2017-07-24 20 views
0

要求:當新版本的J2EE應用程序投入生產時,因爲開發環境和生產不是同樣,DBA必須替換war包中的一些配置文件,那些需要替換的文件通常包含一些敏感數據(如數據庫賬號,密碼)。如何僅替換文件不相同,而不是整個目錄當使用數據卷容器作爲其他容器的共享存儲時

我認爲創建一個數據卷容器是一個好主意,它包含那些特定於生產的配置文件。在這種情況下,配置文件可以是(應用程序)」容器之間共享

讓說,我有和J2EE應用程序與搬運工人使用Tomcat 8運行時,dockerfile如下:

FROM tomcat:8 

WORKDIR $CATALINA_HOME 

RUN midair -p /etc/foo 

RUN touch /etc/foo/a 

RUN touch /etc/foo/b 

RUN touch /etc/foo/c 

RUN touch /etc/foo/d 

RUN echo "a" >> /etc/foo/a 

RUN echo "b" >> /etc/foo/b 

RUN echo "c" >> /etc/foo/c 

RUN echo "d" >> /etc/foo/d 

CMD ["catalina.sh", "run"] 

DBA必須更換文件b和C的應用程序之前投入生產,因此,我們有一個dockerfile如下:

FROM centos:6.8 

RUN mkdir -p /etc/foo 

RUN touch /etc/foo/a 

RUN touch /etc/foo/d 

RUN echo "sub a" >> /etc/foo/a 

RUN echo "sub d" >> /etc/foo/d 

COPY ./run.sh /root 

RUN chmod 755 /root/run.sh 

CMD ["/root/run.sh"] 

要測試數據量容器是否會滿足我的要求,運行下面的命令:

docker create -v /etc/foo --name configstore centos:6.8 /bin/bash 

docker run -d --volumes-from configstore --name testsubcontainer tomcat:8 

最後我發現「tomcat」容器在/etc/foo b中有「a」和「d」,c已經不存在了。

問題1:如何將僅使用數據卷容器作爲其他容器的共享存儲時的文件全部替換爲不同的文件。

Q2:有沒有其他更好的解決方案,以滿足我的要求

回答

0

Q1:使用卷爲你,這是不可能的。將卷裝載到容器中的目錄時,該目錄內的所有內容都將被數據卷替換。 Docker沒有映射文件,它將卷掛載到容器文件系統中的某個點。

問題2:您是否已經探索過ENV或ARG作爲在運行時設置值的方法?

相關問題