2015-12-05 38 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 *是關鍵字)。 –