挂载方式启动docker镜像(加载外部配置,无需重新打镜像启动)
前言:
在实际生产应用中尤其是测试阶段可能需要频繁修改程序包内application.properties文件,然后重新打镜像,这样不断打镜像消耗了大量的精力和时间,现在通过挂载方式,读取外部配置文件的方式,实现不用打镜像就修改程序包内的配置文件,简化步骤,提高效率(部分图片是缩放了的,看不清的话可以点击就放大)
1.准备需要打镜像的文件,把所有的文件放在一个realware文件夹里,realware下有三个文件
①config文件夹里放的是需要挂载的配置文件application.properties,就是通过修改该配置文件实现修改镜像程序包内的配置文件
②realware是war解压后的文件(程序的war包解压出来),上传上去
③Dockerfile里放打镜像的命令,内容如下
FROM tomcat:9.0
COPY ./realware /usr/local/tomcat/webapps/realware
ADD ./config /usr/local/tomcat/webapps/realware/WEB-INF/classes/config
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
命令解释:
FROM tomcat:9.0 下载tomcat
COPY ./realware /usr/local/tomcat/webapps/realware 复制realware程序包到tomcat下
ADD ./config /usr/local/tomcat/webapps/realware/WEB-INF/classes/config 挂载config文件到程序的config(程序中可以没有该config文件,该命令可以直接添加)
2.打镜像,注意3.0.0 后面有个空格和.
docker image build -t realware:3.0.0 .
3.docker 挂载方式启动镜像启动
docker run -p 8080:8080 --name realware -v /home/realware/config:/usr/local/tomcat/webapps/realware/WEB-INF/classes/config -d realware:3.0.0
命令解释:
8080:8080 对外映射8080端口,对内转发也是8080端口
--name realware 启动的镜像起了一个realware的名字
/home/realware/config 本地目录,挂载的文件
/usr/local/tomcat/webapps/realware/WEB-INF/classes/config 覆盖容器中的目录的配置,config下原本有application.properties
realware:3.0.0 需要启动的镜像
由于我之前启动过realware的镜像,现在需要删除掉原来的这个镜像
docker rm 7257473a1f1ed717d4ff95ddb6c44ad420bb1625df4d874843dd53a991d710b6
再重新执行命令:
docker run -p 8080:8080 --name realware -v /home/realware/config:/usr/local/tomcat/webapps/realware/WEB-INF/classes/config -d realware:3.0.0
启动成功
4.查看启动日志:
docker logs -f 2e4a437a15d31617c2237e4abf1627ef81116c5cfdf2a6caf896ca2fcea06a39
看到日志已经打印出获取的值了JDTEST
注意该值是从挂载文件config下的application.properties里拿的
下面我们修改该值,实现挂载启动外部配置文件,不需要重打docker镜像启动,修改application.properties完后上传到config下
server.context-path=/realware
server.port=8087
evoucher.model.SignService=JDTESTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
关掉刚刚启动的镜像, 删除占用realware的容器名字
docker rm 容器id
重新启动
docker run -p 8080:8080 --name realware -v /home/realware/config:/usr/local/tomcat/webapps/realware/WEB-INF/classes/config -d realware:3.0.0
查看日志,r日志已经打印出修改后的值,JDTESTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
成功了