使用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。