Docker 当使用data volume容器作为其他容器的共享存储时,如何仅替换不相同的文件,而不是整个目录

Docker 当使用data volume容器作为其他容器的共享存储时,如何仅替换不相同的文件,而不是整个目录,docker,Docker,需求:当新版本的J2EE应用程序投入生产时,由于开发环境和生产环境不同,DBA必须替换war包中的一些配置文件,需要替换的文件通常包含一些敏感数据(如数据库帐户、密码) 我认为创建一个数据卷容器是一个好主意,它包含特定于生产的配置文件。在这种情况下,可以在容器(应用程序)之间共享配置文件 假设我让docker使用tomcat 8运行Java和J2EE应用程序,docker文件如下: FROM tomcat:8 WORKDIR $CATALINA_HOME RUN midair -p /etc

需求:当新版本的J2EE应用程序投入生产时,由于开发环境和生产环境不同,DBA必须替换war包中的一些配置文件,需要替换的文件通常包含一些敏感数据(如数据库帐户、密码)

我认为创建一个数据卷容器是一个好主意,它包含特定于生产的配置文件。在这种情况下,可以在容器(应用程序)之间共享配置文件

假设我让docker使用tomcat 8运行Java和J2EE应用程序,docker文件如下:

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和c中有“a”和“d”

Q1:当使用data volume容器作为其他容器的共享存储时,如何仅替换不相同的文件,而不是整个目录


问题2:有没有其他更好的解决方案来满足我的要求。将卷装载到容器中的目录时,该目录中的所有内容都将被数据卷替换。Docker不是映射文件,而是在容器文件系统中的某个位置装载卷

问题2:您是否研究过使用ENV或ARG作为在运行时设置值的方法