使用Docker

时间:2015-11-24 13:03:23

标签: docker ansible docker-compose

关于这个问题似乎存在稀疏的冲突信息。我是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,如果这是人们如何实现这一点。

1 个答案:

答案 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,它允许您在运行时从环境变量生成配置。