2015-11-09 40 views
0

我想要部署一個映像。試想一下,Web應用程序在myapp:latest圖像:使用配置文件進行映像部署

FROM debian:jessie 
[...] 
EXPOSE 80 
CMD ["/bin/bash", "/bin/run_myapp.sh"] 

/bin/run_myapp.sh負荷配置文件/etc/myapp.conf。 部署與3型動物的配置文件3個實例,我認爲做這樣的事情:

C1=$(docker run -d myapp) 
C2=$(docker run -d myapp) 
C3=$(docker run -d myapp) 
... 

docker cp myapp1.conf $C1:/etc/myapp.conf 
docker cp myapp2.conf $C2:/etc/myapp.conf 
docker cp myapp3.conf $C3:/etc/myapp.conf 

但隨着這一想法,容器已經在運行,所以/bin/run_myapp.sh已經閱讀的/ etc/MYAPP .conf。如果我在啓動myapp之前啓動了docker cp,則容器不存在。

什麼docker解決方案可用於此部署方案?

+0

我通常使用環境變量--env或--env-file。這樣,dev和prod之間就沒有代碼/腳本的變化。如果您必須使用配置文件,也許您可​​以將它們全部三個構建到映像中,並使用--env在運行時指定它的位置。 –

回答

0

解決方法是先用create進行干預,然後再用cpstart容器。

C1=$(docker create myapp) 
C2=$(docker create myapp) 
C3=$(docker create myapp) 

docker cp myapp1.conf $C1:/etc/myapp.conf 
docker cp myapp2.conf $C2:/etc/myapp.conf 
docker cp myapp3.conf $C3:/etc/myapp.conf 

docker start $C1 
docker start $C2 
docker start $C3