【问题标题】:docker-compose: where to store configuration for services?docker-compose:在哪里存储服务配置?
【发布时间】:2016-03-09 21:43:52
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 如果您的配置不断变化,无论如何您都必须进行某种同步(与 docker 主机或容器同步)。

标签: docker docker-compose docker-machine


【解决方案1】:

此问题的一个常见解决方案是在服务前面放置一个负载平衡器。这样,当您想要更改配置时,您可以启动一个新容器,负载均衡器会选择它,然后停止旧容器。无需停机,它可以让您重新加载配置。

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

【讨论】:

    【解决方案2】:

    您是否考虑过使用扩展机制并覆盖设置文件?将第二个docker-compose.override.yml 放在与主撰写文件相同的目录中,或在撰写文件中使用显式扩展名。见

    https://docs.docker.com/compose/extends/

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      • 2012-07-28
      相关资源
      最近更新 更多