使用Dockerpipe理dev / test / prod环境

在这个问题上似乎有稀less的矛盾信息。 我新来的Docker,需要一些帮助。 我有几个docker容器来运行一个应用程序,有些需要不同的configuration文件来进行本地开发。 我似乎无法find一个干净的方式来自动化与Docker。

我的包含自定义configuration的容器是Nginx,Freeradius,而我的代码/数据容器是Laravel,因此需要一个.env.php文件(目前为L4.2)。

我已经在Docker撰写了Dockers环境variables:

泊坞窗,compose.yml:

freeradius: env_file: ./env/freeradius.env 

./env/freeradius.env

 DB_HOST=123.56.12.123 DB_DATABASE=my_database DB_USER=me DB_PASS=itsasecret 

除了我不能在/etc/freeradius/mods-enabled/sql那些他们需要的variables。

我如何让Docker作为一个本地configuration的本地容器来运行,或者作为一个带有生产configuration的“生产”容器来运行,而不必实际构build不同的容器,也不必附加到每个容器来手动configuration它们。 我需要它自动化,因为这将最终在相当大的生产环境中使用,这将会产生大量的具有多个实例的服务器集群。

很高兴学习Ansible,如果这是人们如何实现这一目标。

如果你不能使用环境variables来configuration应用程序(这是我对这个问题的理解),那么另一个select是使用卷来提供configuration文件。

您可以使用“数据卷容器”(这是容器的唯一目的是共享文件和目录)与volumes_from ,也可以使用命名卷。

数据量容器

如果使用“数据容器”path,则可以创build一个包含所有环境configuration文件的容器。 每个需要文件的服务都使用volumes_from: - config 。 在开发中,你会有这样的东西:

 configs: build: dev-configs/ freeradius: volumes_from: - configs 

dev-configs目录将需要一个Dockerfile来构build映像,该映像将为所有configurationpath提供一堆VOLUME指令。

对于生产(和其他环境),您可以创build一个覆盖文件,它将configuration服务replace为不同的容器:

泊坞窗,compose.prod.yml:

 configs: build: prod-configs/ 

您可能还想在dev和prod之间更改其他设置,这些设置也可以放入此文件中。 然后你运行覆盖文件组成:

 docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d 

你可以在这里了解更多关于这个: http : //docs.docker.com/compose/extends/#multiple-compose-files

命名音量

如果您使用“命名音量”路线,则configuration会更容易一些。 在开发你创build一个容器与docker volume create thename并把一些文件到它。 在你的configuration中,你直接使用它:

 freeradius: volumes: - thename:/etc/freeradius/mods-enabled/sql 

在生产中,你需要在每台主机上创build一个命名卷,或者使用一个支持多主机的卷驱动插件(我相信flocker就是这方面的一个例子)。

运行时configuration使用Dockerize

最后,不涉及卷的另一个选项是使用https://github.com/jwilder/dockerize ,它允许您在运行时从环境variables生成configuration。