docker-compose:在哪里存储服务的configuration?
我正在使用docker-compose / docker-machine构build一个ELK(elasticsearch / logstash / kibana)堆栈。 该计划是将其部署到数字海洋液滴,并在需要时使用Swarm对其进行缩放。
它工作得很好,但我有点困惑,我应该为服务存储configuration(例如logstash的configuration文件,或者nginx的SSL证书)。
起初,我只是将一个主机目录挂载为卷。 问题是所有的configuration文件必须在docker主机上可用,所以我必须将它们同步到数字水滴。
然后我想我有一个非常聪明的想法:创build一个包含所有configuration的数据容器,并让其他服务使用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
这种方法的问题变得非常明显:每次我改变任何configuration,我需要停止所有容器链接到configuration容器,重新创buildconfiguration图像和容器,然后再次启动服务。 对于正常运行时间不是很好。
那么,最好的方法是什么? 理想情况下,configuration文件将在一个容器内,所以我可以将它发送到任何地方。
解决这个问题的一个常见的解决scheme是将负载平衡器放在服务之前。 这样,当你想改变configuration,你可以启动一个新的容器,负载平衡器将会把它拿起来,然后停止旧的容器。 没有停机时间,它可以让你重新加载configuration。
另一种select可能是使用命名卷。 然后你可以修改指定卷的内容,使用它的任何容器都会看到新的文件。 但是,如果您使用swarm使用多个节点,则需要使用支持多主机卷的卷驱动程序。
您是否考虑过使用扩展机制并覆盖设置文件? 将第二docker-compose.override.yml
放在与主要撰写文件相同的目录中,或者在撰写文件中使用显式扩展名。 看到
https://docs.docker.com/compose/extends/
这样你就可以以透明的方式集成一个configuration文件,或者通过环境variables来控制你想要改变的参数,这些环境variables在覆盖组合中是不同的。
- 如何使用docker-machine部署docker组成的应用程序?
- 用最新版本的应用程序更新图像的Dockerstream程
- dockerd与docker容器vsdocker运行与docker-containerd-ctr vsdocker容器shim
- 只用Dockerfile中的其他更改重build相同的Docker镜像
- docker工在docker机内部,不能挂载音量
- 在OSX上创build带有Virtualbox节点的Swarm集群,连接不可用
- 如何“添加”代理部分将registryconfiguration为直通caching?
- 无法通过API返回Docker存储库映像列表
- 为什么退出的docker房客没有被删除?