【发布时间】:2015-11-15 19:58:03
【问题描述】:
我打算使用 docker 来构建我的开发和生产环境。我构建了基于 Django 的应用程序。
在开发中,我使用docker-compose 来管理所有本地容器。这是一个不错且方便的解决方案。我运行 Django、3 个 celery 队列、rabbitmq、2 个 postgresql 数据库。
但我的生产环境完全不同。我需要运行 gunicorn 和 nginx。此外,数据库将使用 AWS RDS 运行。当然 Django 应用需要更多的东西,比如不同的设置文件或更多的环境变量。
我正在徘徊如何划分它。我也应该在那里docker-compose吗?这将需要用于 dev 和 prod 的单独文件,将来可能需要更多用于暂存等...如果是,如何部署它?使用Jenkins,拉取,重启全部使用compose?
或者我应该使用 ansible 直接运行docker 命令?但是我不相信我的开发与现场相同,并且更难预测其行为。
我喜欢在所有环境中运行 compose 文件的想法,但我不确定为不同环境维护多个文件是否是个好主意。开发需要更少的环境变量和更少的配置。我可以使用 env 文件将它们全部设置为生产环境。但是我应该将我的实时设置保留在 se repo 中吗?以前我在配置时设置所有环境变量,这是一个单独的过程。现在看起来配置和部署是一样的?也许这就是 Docker 的方式?
【问题讨论】:
-
理想情况下,Dev 和 Prod 之间的唯一区别应该是规模和对数据的访问。 Docker swarm 可以在 EC2 上运行,这使您能够在生产中拥有相同的工作流程。如果您使用的是 RDS,则可以使用环境变量将 DB URL 和凭据注入到容器中。这可以使用在 Docker 容器中独立运行的数据库在 Dev 中进行模拟。
-
在连续第三个项目中,我为每个环境使用单独的文件。
标签: docker ansible provisioning docker-compose