基於tomcat基礎鏡像構建各類業務鏡像|範例如APP

範例:APP 1

建立 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界面的結果,再工做中無非將代碼換成公司的代碼便可

範例:APP 2

一、拷貝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 運維實戰手冊
相關文章
相關標籤/搜索