內容介紹:
(1) 本章目的,將一個自行開發的java程式webpay-api,製作為docker自定義映象,並且進行部署。
(2) 實驗環境:
物理機:VMware 虛擬機器 + CentOS 7.8 x64
Docker:Docker version 20.10.17, build 100c701
(3) 基礎映象: ubuntu:latest
製作步驟:
主要是,前期程式檔案準備和上傳(略:java程式檔案), 後續映象檔案構建,以及最後容器部署和容器檢查。
步驟細節:
Part 1: 製作映象檔案
step 1:
製作映象檔案
mkdir -p /home/src/webpay-api/ubuntu-v/ cat <<EOF> /home/src/webpay-api/ubuntu-v/webpay-api.Dockerfile FROM ubuntu:latest MAINTAINER tian.dong <tiandong19860806@126.com> # ============================================================================================================== # step 1: 初始化依賴環境 # RUN mkdir -p {/home/env/jdk,/home/app/webpay/webpay-api,/home/log/webpay/webpay-api} # 如果是-v引數外部掛載目錄,則不需要和不能手動建立 VOLUME ["/home/env/jdk", "/home/app/webpay/webpay-api", "/home/log/webpay/webpay-api"] COPY app/* /home/app/webpay/webpay-api/ # ADD jdk/jdk-12.0.33-x64_bin.tar.gz /home/env/jdk/ RUN chmod +x /home/app/webpay/webpay-api/*.sh && \ sh -c /home/app/webpay/webpay-api/install-jdk.sh && \ sh -c /home/app/webpay/webpay-api/install-app.sh # ============================================================================================================== # step 2: 安裝和啟動程式 # 開放埠 EXPOSE 9080 # 啟動程式命令 ENTRYPOINT ["/bin/bash", "-c", "/home/app/webpay/webpay-api/startup.sh"] # ============================================================================================================== EOF
step 2:
執行構建映象檔案
cd /home/src/webpay-api/ubuntu-v/ # *.dockerfile檔案路徑引數,後面的"."符號一定不要忘記。 docker build -f ./webpay-api.Dockerfile . -t app-webpay-api-ubuntu:2.0.0
執行構建成功,結果輸出如下:
step 3:
檢查映象檔案結果
Part 2: 啟動容器例項
部署容器之前,執行準備工作:比如掛載目錄的建立和授權
step 1:
建立物理機本地路徑:準備掛載docker容器
# 建立物理機本地路徑:準備掛載docker容器上面 mkdir -p {/home/env/jdk,/home/app/webpay/webpay-api,/home/log/webpay/webpay-api} # 授權docker賬號的檔案路徑訪問許可權 chmod -R a+x /home/env/jdk && \ chown -R docker:docker /home/env/jdk # chmod -R a+x /home/app/webpay/webpay-api && \ chown -R docker:docker /home/app/webpay/webpay-api # chmod -R a+x /home/log/webpay/webpay-api && \ chown -R docker:docker /home/log/webpay/webpay-api
step 2:
查詢物理機的賬號docker的uid:後面啟動容器要說明使用者引數,必須用uid,不能使用username
cat /etc/passwd | grep docker # 輸出結果,如下: ## [root@CNT7XVM01 ~]# cat /etc/passwd | grep docker ## docker:x:1001:1001::/home/docker:/bin/bash ## [root@CNT7XVM01 ~]#
step 3:
啟動容器,宣告啟動使用者、掛載目錄、命令環境
引數 -d:將容器在後臺執行
引數 -t: 使用虛擬終端
# 方式1:推薦方式:指定使用者 docker docker run -td -u 1001:1001 -p 9080:9080 -v /home/env/jdk:/home/env/jdk \ -v /home/app/webpay/webpay-api:/home/app/webpay/webpay-api \ -v /home/log/webpay/webpay-api:/home/log/webpay/webpay-api \
-port 9080:9080 \ app-webpay-api-ubuntu:2.0.0 \ /bin/bash # 或者, # 方式2:測試方式:預設使用者 root【不推薦】 docker run -td -p 9080:9080 -v /home/env/jdk:/home/env/jdk \ -v /home/app/webpay/webpay-api:/home/app/webpay/webpay-api \ -v /home/log/webpay/webpay-api:/home/log/webpay/webpay-api \ app-webpay-api-ubuntu:2.0.0 \ /bin/bash #
輸出結果,如下:
Part 3: 進入容器內部
step 1: 進入容器內部,檢查掛載目錄的檔案
# 進入容器內部 docker exec -it -u 1001:1001 39d9249adda7 /bin/bash # 或者 docker exec -it 39d9249adda7 /bin/bash
hostname
ls -al /home/env/jdk/jdk-12/
ls -al /home/app/webpay/webpay-api/
ls -al /home/log/webpay/webpay-api/
輸出結果,如下:
step 2: 進入容器,檢視安裝的環境和應用啟動情況
java --vesion ps -ef | grep java
輸出結果,如下:
step 3: 在外部測試和訪問部署的應用服務
提醒,如果docker部署的虛擬機器沒有開放程式埠9080,記得要自己開放一下。
開放防火牆埠,命令如下:
# 開放埠 9080 firewall-cmd --zone=public --add-port=9080/tcp --permanent && \ # 儲存設定:永久儲存 firewall-cmd --reload && \ # 查詢開放的埠 firewall-cmd --zone=public --list-ports
Step 4:
對部署的docker 應用服務,執行jemeter壓力測試。
對比VM虛擬機器部署和Docker方式部署(同一臺機器,資源引數和應用併發引數相同),兩者效能測試結果差別如下:相差10%。
(1) VM 虛擬機器: TPS = 9644 / s
(2) Docker: TPS = 8671 / s
後續文件,如下:
將介紹使用不同基礎映象:centos / alphine / adobe openjdk-8 / 12 製作java程式映象和最佳化映象檔案大小,以及docker-compose方式部署docker容器。
如果,大夥閱讀之後,覺得有幫助,請點贊支援一下,謝謝!