docker compose:在何处存储服务配置?

docker compose:在何处存储服务配置?,docker,docker-compose,docker-machine,Docker,Docker Compose,Docker Machine,我正在使用docker compose/docker machine构建一个ELK(elasticsearch/logstash/kibana)堆栈。该计划是将其部署到一个数字海洋液滴上,如果需要,使用Swarm进行扩展 它工作得非常好,但是我有点困惑应该在哪里存储服务的配置(例如,logstash的配置文件,或者nginx的SSL证书) 首先,我只是装载了一个主机目录作为卷。问题是所有的配置文件都必须在docker主机上可用,所以我必须将它们同步到digitalocean droplet 然后

我正在使用docker compose/docker machine构建一个ELK(elasticsearch/logstash/kibana)堆栈。该计划是将其部署到一个数字海洋液滴上,如果需要,使用Swarm进行扩展

它工作得非常好,但是我有点困惑应该在哪里存储服务的配置(例如,logstash的配置文件,或者nginx的SSL证书)

首先,我只是装载了一个主机目录作为卷。问题是所有的配置文件都必须在docker主机上可用,所以我必须将它们同步到digitalocean droplet

然后我想我有了一个非常聪明的想法:创建一个包含所有配置的数据容器,并让其他服务使用
volumes\u从
访问它:

config:
    volumes:
        - /conf
    build:
        context: .
        # this just copies the conf folder into the image
        dockerfile: /dockerfiles/config/Dockerfile

logstash:
    image: logstash:2.2
    volumes_from:
        - config
这种方法的问题很快变得显而易见:每次更改任何配置时,我都需要停止链接到配置容器的所有容器,重新创建配置映像和容器,然后再次启动服务。不适合正常运行时间:(


那么,最好的方法是什么呢?理想情况下,配置文件应该放在一个容器中,这样我就可以把它发送到任何地方。

这个问题的一个常见解决方案是在服务前面放一个负载平衡器。这样,当你想更改配置时,你可以启动一个新的容器,负载平衡器会把它捡起来,然后停止旧容器。没有停机时间,它允许您重新加载配置


另一种选择可能是使用命名卷。然后您可以修改命名卷的内容,任何使用它的容器都会看到新文件。但是,如果您在swarm中使用多个节点,则需要使用支持多主机卷的卷驱动程序。

此问题的一个常见解决方案是放置负载平衡器在服务前面。这样,当您想要更改配置时,您可以启动一个新容器,负载平衡器将拾取它,然后停止旧容器。没有停机时间,它允许您重新加载配置


另一个选项可能是使用命名卷。然后您可以修改命名卷的内容,使用它的任何容器都可以看到新文件。但是,如果使用多个带有Sead的节点,则需要使用支持多主机卷的卷驱动程序。

您是否考虑使用扩展机制并重写A?设置文件?将第二个

docker compose.override.yml
放在与主compose文件相同的目录中,或在compose文件中使用显式扩展名。请参阅


这样,您可以以透明的方式集成配置文件,或者通过在覆盖的构图中不同的环境变量来控制要更改的参数。

< P>您是否考虑使用扩展机制并重写设置文件?在同一DIR中放置第二个代码> DOCKER撰写?ectory作为主撰写文件,或在撰写文件中使用显式扩展名。请参阅


通过这种方式,您可以以透明的方式集成配置文件,或者通过覆盖组合中不同的环境变量控制要更改的参数。

如果您的配置不断更改,您无论如何都必须进行某种同步(到docker主机或容器)。如果您的配置不断更改,您将不得不进行某种同步(到docker主机或容器)。