用Dockerfile製作一個java應用映象,ubuntu基礎篇

tiandong發表於2022-12-30

內容介紹:

(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

用Dockerfile製作一個java應用映象,ubuntu基礎篇

 

 (2) Docker: TPS = 8671 / s

用Dockerfile製作一個java應用映象,ubuntu基礎篇

 

後續文件,如下:

將介紹使用不同基礎映象:centos / alphine / adobe openjdk-8 / 12 製作java程式映象和最佳化映象檔案大小,以及docker-compose方式部署docker容器。

如果,大夥閱讀之後,覺得有幫助,請點贊支援一下,謝謝!

 

 

 

相關文章