生产环境中使用Docker compose?

6

我计划使用Docker来构建我的开发和生产环境。我的应用基于Django构建。

在开发中,我使用docker-compose来管理所有本地容器,这是一个不错而且方便的解决方案。我运行Django、3个celery队列、rabbitmq、2个postgresql数据库。

但我的生产环境有所不同。我需要运行gunicorn和nginx。此外,数据库将使用AWS RDS运行。当然,Django应用程序还需要更多的东西,比如不同的设置文件或更多的环境变量。

我想知道该如何分配任务。我应该在那里也使用 docker-compose 吗?这将需要为dev和prod(也许还有staging等)准备单独的文件... 如果使用,该如何部署?使用Jenkins、拉取并使用compose重启所有内容?

或者,我应该使用ansible来直接运行docker 命令吗?但是这样我就不能确保我的开发环境与线上环境一致,并且很难预测它的行为。

我喜欢在所有环境中运行compose文件的想法,但我不确定维护多个不同环境的文件是否是个好主意。开发需要较少的环境变量和较少的配置。我可以在生产环境中使用env文件来设置所有环境变量。但是,我应该将我的线上设置保存在同一个repo中吗?以前我会在配置过程中设置所有环境变量,这是一个单独的流程。现在看起来像是配置和部署是一样的?也许这就是Docker的方式?


2
理想情况下,Dev 和 Prod 之间唯一的区别应该是规模和数据访问权限。Docker swarm 可以在 EC2 上运行,这使得您可以在生产环境中拥有相同的工作流程。如果您正在使用 RDS,则可以使用环境变量将 DB URL 和凭据注入到容器中。在 Dev 中,可以使用在 Docker 容器内独立运行的数据库来模拟此过程。 - Mark O'Connor
在连续的三个项目中,我都使用单独的文件来处理每个环境。 - Opal
1个回答

10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接