我计划使用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的方式?