建立 tomcat-app1 和 tomcat-app2 兩個目錄,表示基於 tomcat 自定義基礎鏡像構建出不一樣業務的 tomcat 應用鏡像。這個時候咱們就由普通用戶來啓動tomcat。而且咱們使用命令類來啓動tomcat(tail -f這樣啓動的容器就不會受tomcat 的影響)java
一、準備tomcat容器的默認顯示web頁面web
1)進入到/opt/dockerfile/web/tomcat/目錄下分別建立兩個不一樣的tomcat應用目錄一個是app一、app2,這樣作的好處事好部署後期不一樣的業務而後直接基於tomcat的基礎鏡像便可docker
[21:29:12 root@docker ~]#cd /opt/dockerfile/web/tomcat/ [21:29:20 root@docker tomcat]#mkdir tomcat-app{1,2}
2)而後tomcat的壓縮包上傳上來,由於等會要基於tomcat的server.xml文件修改他的默認web顯示頁面apache
#已經上傳至服務器 [21:31:11 root@docker tomcat]#ls apache-tomcat-9.0.37.tar.gz apache-tomcat-9.0.37.tar.gz
3)解壓tomcat壓縮包vim
[21:31:15 root@docker tomcat]#tar xf apache-tomcat-9.0.37.tar.gz
4)而後再將如今解壓好的server.xml文件拷貝到/opt/dockerfile/web/tomcat/tomcat-app1目錄下,這個server.xml文件決定了容器的tomcat啓動以後再什麼地方去找web顯示頁面文件瀏覽器
[21:33:43 root@docker tomcat]#cp apache-tomcat-9.0.37/conf/server.xml /opt/dockerfile/web/tomcat/tomcat-app1/
5)修改server.xml文件,修改它默認的web顯示頁面的目錄,咱們這是將他的web顯示頁面修改成tomcat
#在這個配置文件中找到 appBase 這一行修改他的web根目錄爲/data/tomcat/webapps [21:33:44 root@docker tomcat]#vim /opt/dockerfile/web/tomcat/tomcat-app1/server.xml <Host name="localhost" appBase="/data/tomcat/webapps" unpackWARs="true" autoDeploy="true">
6)準備自定義web頁面,等會好將這個目錄下的web頁面解壓到tomcat容器中的/data/tomcat/webapps中,之後再公司中將WEBserver目錄替換成公司的數據目錄便可bash
[21:38:38 root@docker tomcat]#cd /opt/dockerfile/web/tomcat/tomcat-app1 [21:38:54 root@docker tomcat-app1]#mkdir WEBserver
7)WEBserver目錄,並建立一個index.jsp,好作以區別app1和app2應用的web頁面服務器
[21:39:01 root@docker tomcat-app1]#cd WEBserver/ [21:39:55 root@docker WEBserver]#vim index.jsp zhangguiyuan tomcat-app1 APP1
8)再將這個WEBserver文件夾打包,由於等會在dockerfiel中要讓ADD參數解壓到tomcat容器去,而且打包的時候有個小注意,就是咱們是否包含WEBserver這個目錄,若是一開始包含的WEBserver這個目錄的話,就決定了tomcat訪問的方式,是否添加WEBserver的URL。因此包括了就要一直包括,因此到了公司中必定要和開發商量好。千萬不要來回變app
咱們這裏是不包含這個WEBserver這個目錄
[21:43:44 root@docker WEBserver]#tar czfv WEBserver.tar.gz ./* ./index.jsp
9) 將WEBserver.tar.gz拷貝到/opt/dockerfile/web/tomcat/tomcat-app1目錄中,等會好添加到dockerfile文件中
[21:44:36 root@docker WEBserver]#cp WEBserver.tar.gz /opt/dockerfile/web/tomcat/tomcat-app1/ #驗證已經將WEBserver.tar.gz壓縮包拷貝過來 [21:45:52 root@docker WEBserver]#ll /opt/dockerfile/web/tomcat/tomcat-app1/WEBserver.tar.gz -rw-r--r-- 1 root root 158 Jul 31 21:45 /opt/dockerfile/web/tomcat/tomcat-app1/WEBserver.tar.gz
二、準備app1業務鏡像Dockerfile文件
[23:07:54 root@docker WEBserver]#cd /opt/dockerfile/web/tomcat/tomcat-app1/ [21:52:03 root@docker tomcat-app1]#vim /opt/dockerfile/web/tomcat/tomcat-app1/Dockerfile #tomcat app1業務鏡像 #註釋:基於tomcat-base:9.0.37鏡像 FROM tomcat-base:v9.0.37 #添加server.xml文件修改默認的tomcat,web顯示頁面 ADD server.xml /apps/tomcat/conf/server.xml #將咱們的web頁面壓縮包WEBserver.tar.gz打進容器中 ADD WEBserver.tar.gz /data/tomcat/webapps/WEBserver #給www用受權/data/tomcat/ 的權限,咱們須要調用這個目錄的index.jsp網頁文件 RUN chown www.www /data/tomcat/ -R #給www用戶受權/apps下的tomcat目錄權限,咱們須要www用戶來啓動tomcat服務 RUN chown www.www /apps/tomcat -R #給www用戶受權/apps下的apache-tomcat-9.0.37目錄權限,由於他是一個軟鏈接 RUN chown www.www /apps/apache-tomcat-9.0.37/ -R #暴露端口咱們須要這兩個端口 EXPOSE 8080 8443
三、編輯tomcat 業務1的構建腳本
[22:12:21 root@docker tomcat-app1]#vim build-command.sh #!/bin/bash docker build -t tomcat-web:app1 . docker build: #經過docker build 命令製做鏡像 -t: #指定新鏡像名 tomcat-web:app1: #新鏡像名 . #dockerfile文件在當前目錄下
四、執行構建腳本,開始製做鏡像
#執行製做腳本 [22:14:16 root@docker tomcat-app1]#bash build-command.sh #提示成功鏡像製做完成 Successfully built 2a57fce6c5d6 #tomcat-web:app1鏡像製做完成 [22:14:28 root@docker tomcat-app1]#docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat-web app1 2a57fce6c5d6 About a minute ago 899 MB
五、啓動tomcat-web:app1容器
[23:08:57 root@docker tomcat-app1]#docker run -it -d -p 8080:8080 --name tomcat-web tomcat-web:app1 bash docker run: #啓動容器 -it: #在容器中執行命令 -d: #放到後臺運行 -p 8080:8080: #容器8080端口映射到宿主機8080端口 --name tomcat-web: #容器名爲tomcat-web tomcat-web:app1: #經過tomcat-web:app1鏡像啓動 bash: #執行命令
六、進入容器經過www普通用戶啓動tomcat服務
#經過bash進入tomcat-web容器 [23:09:18 root@docker tomcat-app1]#docker exec -it tomcat-web bash #進入容器以後切換www普通用戶 [root@d6444260fcac /]# su www #經過www用去啓動tomcat [www@d6444260fcac /]$ /apps/tomcat/bin/catalina.sh start #最後退出容器
七、瀏覽器訪問檢測
http://10.0.0.117:8080/WEBserver/
瀏覽器訪問測試,得出的結果正好是咱們自定義web界面的結果,再工做中無非將代碼換成公司的代碼便可
一、拷貝dockerfile鏡像製做文件以及所需文件
製做第二個 tomcat 服務鏡像。作的二個業務鏡像的時候就不用這麼複雜了,而是直接將tomcat-app1的目錄拷貝到tomcat-app2便可,由於他們所需的文件都差很少
#回到父目錄也就是tomcat目錄下 [12:36:24 root@docker tomcat-app1]#cd .. #而後將app1 中的全部內容拷貝到tomcat-app2下 [12:36:29 root@docker tomcat]#cp -r tomcat-app1/* tomcat-app2/
二、修改app2 的web頁面
進入tomcat-app2目錄下只需修改index.jsp 便可,由於app2這個業務也是基於 tomcat-basev9.0.37 的基礎鏡像來製做。和app1的製做過程同樣
#進入app2業務目錄 [12:40:59 root@docker tomcat]#cd tomcat-app2/ #編寫web顯示頁面 [13:07:12 root@docker tomcat-app2]#vim WEBserver/index.jsp app2 tomcat-app2 APP2 22222
三、打包app2 業務的web頁面壓縮包
#刪除從APP1 業務目錄拷貝過來的web壓縮包 [12:42:26 root@docker tomcat-app2]#rm -fr WEBserver.tar.gz #進入到app2的web頁面目錄下 [12:43:59 root@docker tomcat-app2]#cd WEBserver/ #打包APP2 web頁面壓縮包 [12:46:06 root@docker WEBserver]#tar cvzf WEBserver.tar.gz ./* #將WEBserver.tar.gz壓縮移動到 app2業務目錄下 [12:47:10 root@docker WEBserver]#mv WEBserver.tar.gz ../
四、修改構建腳本,區分app2業務的鏡像名
咱們的dockerfile文件其實已經不用動了,由於多個tomcat業務都是共用tomact的基礎鏡像。因此只需修改構建腳本便可,將其新的鏡像名改成 app2。
#回到父目錄 [12:47:17 root@docker WEBserver]#cd ../ #修改鏡像構建腳本 [12:47:26 root@docker tomcat-app2]#vim build-command.sh docker build -t tomcat-web:app2 . docker build: #製做鏡像 -t: #給鏡像作一個新名字 tomcat-web:app2: #新鏡像名爲 app2業務 . #dockerfile在當前目錄下
五、執行構建鏡像腳本,製做新鏡像
#運行腳本 [12:51:34 root@docker tomcat-app2]#bash build-command.sh Successfully built 43a79b360480 #製做成功 #經過查看新鏡像已製做完成 [12:51:44 root@docker tomcat-app2]#docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat-web app2 43a79b360480 33 seconds ago 914 MB
六、啓動app2容器
#啓動容器 [12:52:16 root@docker tomcat-app2]#docker run -it --name tomcat-app2 -p 8081:8080 -d tomcat-web:app2 bash docker run: #運行容器 -it: #對容器執行命令 --name tomcat-app2: #容器名爲tomcat-app2 -p 8081:8080: #將容器的8080端口映射到宿主機的8081端口上 -d #放到後臺運行 tomcat-web:app2: #使用tomcat-web:app2鏡像 bash: #執行bash命令 #進入容器 [13:10:09 root@docker tomcat-app2]#docker exec -it tomcat-app2 bash #切換爲www用戶 [root@9f78526048af /]# su www #經過www用戶來啓動tomcat [www@9f78526048af /]$ /apps/tomcat/bin/catalina.sh start #最後退出容器回到宿主機
七、經過瀏覽器訪問檢測
http://10.0.0.117:8081/WEBserver/
5.4.3.1.6 修改tomcat容器的啓動日誌存放到/data/目錄下
#進入tomcat-app2容器 [13:11:25 root@docker tomcat-app2]#docker exec -it tomcat-app2 bash #編輯tomcat的日誌配置文件 [root@9f78526048af /]# vim /apps/tomcat/conf/logging.properties #找到這一行就該tomcat日誌存放路徑 1catalina.org.apache.juli.AsyncFileHandler.directory = /data/tomcat/logs #建立/data/tomcat/logs文件用來存放tomcat日誌 [root@9f78526048af /]# mkdir /data/tomcat/logs #給www普通用戶受權 [root@9f78526048af /]# chown www.www /data/tomcat/logs/ -R #使用www用戶重啓tomcat服務使其配置文件生效 [root@9f78526048af /]# su - www -c "/apps/tomcat/bin/catalina.sh start" #查看日誌存放路徑已經有了tomcat日誌 [root@9f78526048af /]# ll /data/tomcat/logs/ total 8 -rw-r----- 1 www www 7944 Aug 1 05:24 catalina.2020-08-01.log #若是數tomcat起不來必定會在這個日誌中打出爲何起不來
總結:
以上就是針對java服務的鏡像構建以及啓動方式
更多文章和資料|點擊下方文字直達 ↓↓↓
阿里雲K8s實戰手冊
[阿里雲CDN排坑指南] ( https://mp.weixin.qq.com/s/te...
ECS運維指南
DevOps實踐手冊
Hadoop大數據實戰手冊
Knative雲原生應用開發指南
OSS 運維實戰手冊