关于这个问题似乎存在稀疏的冲突信息。我是Docker的新手,需要一些帮助。我有几个docker容器来运行一个应用程序,有些需要不同的配置文件用于本地开发,就像它们用于生产一样。我似乎无法找到一种利用Docker实现自动化的简洁方法。
我的包含自定义配置的容器是Nginx,Freeradius和我的代码/数据容器是Laravel因此需要一个.env.php文件(目前是L4.2)。
我在docker compose中尝试过Dockers环境变量:
搬运工-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
中选择那些变量。
如何让Docker作为本地'具有本地配置的容器,或作为“生产”的容器。具有生产配置的容器,无需实际构建不同的容器,也无需附加到每个容器以手动配置它们。我需要它自动化,因为这最终将用于相当大的生产环境,该环境将具有包含许多实例的大型服务器集群。
很高兴学习Ansible,如果这是人们如何实现这一点。
答案 0 :(得分:1)
如果你不能使用环境变量来配置应用程序(这是我对问题的理解),那么另一个选择是使用卷来提供配置文件。
您可以使用“数据卷容器”(仅为共享文件和目录的容器)与volumes_from
,或者您可以使用命名卷。
数据量容器
如果使用“数据卷容器”路径,您将创建一个包含所有环境配置文件的容器。每个需要文件的服务都使用volumes_from: - config
。在开发中你有类似的东西:
configs:
build: dev-configs/
freeradius:
volumes_from:
- configs
dev-configs
目录需要Dockerfile
来构建映像,该映像将为所有配置路径提供一堆VOLUME
指令。
对于生产(和其他环境),您可以创建一个覆盖文件,用另一个容器替换configs服务:
搬运工-compose.prod.yml:
configs:
build: prod-configs/
您可能还需要在dev和prod之间进行其他设置更改,这些设置也可以进入此文件。然后使用覆盖文件运行compose:
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
您可以在此处了解详情:http://docs.docker.com/compose/extends/#multiple-compose-files
命名量
如果使用“命名卷”路径,则配置起来会更容易一些。在开发人员中,您使用docker volume create thename
创建一个卷并将一些文件放入其中。在您的配置中,您可以直接使用它:
freeradius:
volumes:
- thename:/etc/freeradius/mods-enabled/sql
在生产中,您需要在每个主机上创建该命名卷,或者使用支持多主机的卷驱动程序插件(我相信flocker就是其中的一个例子。)
使用Dockerize运行时配置
最后,另一个不涉及卷的选项是使用https://github.com/jwilder/dockerize,它允许您在运行时从环境变量生成配置。