2015-12-05 39 views
1

假设我的Docker主机上有以下配置文件,并且我希望多个Docker容器能够访问此文件。将配置文件共享到多个Docker容器

/opt/shared/config_file.yml 

在一个典型的非泊坞环境,我可以使用符号链接,使得:

/opt/app1/config_file.yml -> /opt/shared/config_file.yml 
/opt/app2/config_file.yml -> /opt/shared/config_file.yml 

现在假定APP1和App2的dockerized。我希望能够在一个地方更新config_file.yml,并让所有消费者(码头集装箱)都能够在不需要重建容器的情况下获取此更改。

我知道符号链接不能用于访问主机上位于泊坞窗容器外部的文件。

浮现在脑海中的前两个选项分别是:

  1. 从搬运工主机设置NFS共享,以Docker容器
  2. 放在一个共享泊坞窗卷的配置文件,并使用搬运工,撰写到将app1和app2连接到共享配置码头

我试图找出其他选项,然后最终决定最佳的行动方案。

+1

将文件安装为卷是您要查找的内容(请参阅@AndyShinn的答案)。为了扩展到多个容器,你有没有考虑运行一个配置存储如consul或etcd的配置?有兼容的模板引擎可以通过配置更改保持容器中的本地文件最新。请参阅:https://github.com/kelseyhightower/confd –

+0

马克,谢谢你的建议。领事和etcd看起来很有趣。我认为服务发现/分布式配置概念可以解决很多这些问题。 – kgx

回答

1

主机安装卷怎么样?如果每个应用程序只读取配置和要求是住在你可以做类似的容器内的不同位置:

docker run --name app1 --volume /opt/shared/config_file.yml:/opt/app1/config_file.yml:ro app1image 
docker run --name app2 --volume /opt/shared/config_file.yml:/opt/app2/config_file.yml:ro app2image 

主机上的文件可以被安装在每个容器单独的位置。在Docker 1.9中,您实际上可以使用特定插件的任意卷来保存数据(例如Flocker)。但是,这两种解决方案仍是每个主机,并且数据不能同时在多个主机上使用。

+0

安迪,谢谢你的回答。此解决方案有效。也谢谢你推荐Flocker。我仍然在找出码头工作的方式。你知道是否可以使用Swarm实现多主机解决方案? – kgx

+0

我目前使用NFS进行多主机文件共享。 Swarm只是一个调度程序AFAIK,它并不真正与NFS结合。有了swarm,你仍然需要以某种方式引导NFS安装。 我一直在关注存储解决方案。但我还没有看到任何多主机并发文件装入。所有这些目前主要是为了持久性和在主机之间移动的能力(* move *是关键字)。 –