前言:
在實際生產應用中尤其是測試階段可能需要頻繁修改程序包內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
成功了