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