Docker容器部署Java項目的自動化腳本
1. 服務(wù)部署過程
先將Java項目在docker中部署的過程中所有命令列舉
命令均在jar包同級目錄下進行執(zhí)行
1.1 移除舊jar包
正常應(yīng)該會在更新時覆蓋,但還是執(zhí)行以下刪除操作
rm -f app.jar
1.2 jar包更新
通過oss工具命令線上更新或者ftp工具上傳更新
這里使用oss工具(使用ftp工具上傳可省略這一步更新操作)
ossutil64 cp oss://sb-dev/sb_back/app.jar app.jar
1.3 停止舊容器
先停止原來的容器
docker stop sb_back
1.4 刪除舊容器
刪除原來的容器
docker rm sb_back
1.5 刪除舊鏡像
檢索并刪除原來的鏡像
docker rmi sb_back:20250327
1.6 構(gòu)建新鏡像
構(gòu)建新的鏡像
docker build -t sb_back:20250327 .
參數(shù)描述
- build 構(gòu)建命令
- -t 打標(biāo)簽,TAG的縮寫
- sb_back:20250327 鏡像名稱和TAG
- . 當(dāng)前目錄下
1.7 運行新容器
運行新的容器,自定義名稱,指定端口映射
docker run --name sb_back -p 3006:8089 -d --restart=always sb_back:20250326
參數(shù)描述
- run 運行容器命令
- –name 定義容器名稱,這里定為sb_back
- -p 映射端口,將Java服務(wù)端口即容器端口映射到本機服務(wù)器向外暴露的端口(即后續(xù)訪問該服務(wù)的真實端口)
- -d 后臺運行
- –restart=always 容器運行失敗會自動重啟
- sb_back:$DATE 鏡像及TAG(使用指定鏡像來運行容器)
2. 創(chuàng)建shell腳本文件
可以在本地創(chuàng)建后上傳到服務(wù)器或者在服務(wù)器jar包同級目錄創(chuàng)建
2.1 本地創(chuàng)建并上傳到服務(wù)器
先在本地編輯(VSCode等編輯器創(chuàng)建一個sb_back.sh文件),將腳本內(nèi)容粘貼進來并保存

使用FTP工具或者oss工具上傳
ossutil64 cp oss://sb-dev/sb_back/sb_back.sh sb_back.sh
注意,由于Windows和Linux換行符不同,腳本上傳后執(zhí)行可能會報錯,可參考4.3進行解決

2.2 服務(wù)器中創(chuàng)建sh文件
在jar包同級目錄下創(chuàng)建名為sb_back.sh的文件
mkdir sb_back.sh
編輯文件
vim sb_back.sh
將腳本內(nèi)容粘貼進來即可
(i開啟輸入模式,esc推出輸出模式,:wq保存并退出)
3. 腳本內(nèi)容
將以上名命令整合到一起就是腳本執(zhí)行的命令,完整內(nèi)容如下
3.1 簡易腳本
停止容器、移除原有容器和鏡像,構(gòu)建鏡像并部署容器的腳本命令
#!/bin/bash # 1. 停止并刪除舊容器 echo "Stopping and removing old container..." docker stop sb_back || true docker rm sb_back || true # 2. 刪除舊鏡像(可選,強制重新構(gòu)建時使用) echo "Removing old image..." docker rmi $IMAGE_NAME || true # 3. 構(gòu)建新鏡像 echo "Building new image..." docker build -t $IMAGE_NAME $DOCKERFILE_PATH docker build -t sb_back:20250327 . # 4. 運行新容器 echo "Starting new container..." docker run -d --name sb_back -p 3006:8089 --restart=always sb_back:20250327 echo "Deployment completed!"
注:|| true 用于忽略未找到容器的錯誤
3.2 升級腳本
移除jar包,上傳jar包,停止容器、移除容器和鏡像、構(gòu)建鏡像和運行容器等命令整合
并且將容器名鏡像名等以變量的形式傳入
其中以時間變量作為鏡像TAG
#!/bin/bash # 定義當(dāng)前日期,后續(xù)使用日期作為鏡像TAG版本 DATE=$(date +%Y%m%d) # 定義當(dāng)前時間 CURRENT_TIME=`date +'%Y%m%d_%H%M%S'` # 或者 # CURRENT_TIME=(date +%Y%m%d_%H%M%S) # 輸出當(dāng)前時間內(nèi)容 echo "DATE = "$DATE echo "CURRENT_TIME = "$CURRENT_TIME # 0. 移除舊jar包,放入新的jar包 echo "Removing jar and copy new jar..." rm -f app.jar ossutil64 cp oss://dev/3_JWH/01_SB_BACK/app.jar app.jar # 部署配置(根據(jù)實際情況修改) CONTAINER_NAME="sb_back" # Docker容器名稱 IMAGE_TAG=$DATE IMAGE_NAME=$CONTAINER_NAME:$IMAGE_TAG # Docker鏡像名稱 # JAR_PATH="./target/*.jar" # 生成的Jar包路徑 DOCKERFILE_PATH="." # Dockerfile所在目錄,jar包和dockerfile文件在同一位置 PORT_MAPPING="3006:8089" # 端口映射, Java服務(wù)端口8089映射到本機服務(wù)器3006,外部訪問時訪問的就是3006端口 # 1. 停止并刪除舊容器 echo "Stopping and removing old container..." docker stop $CONTAINER_NAME || true docker rm $CONTAINER_NAME || true # 2. 刪除舊鏡像(可選,強制重新構(gòu)建時使用) echo "Removing old image..." docker rmi $IMAGE_NAME || true # 3. 構(gòu)建新鏡像 echo "Building new image..." docker build -t $IMAGE_NAME $DOCKERFILE_PATH # 4. 運行新容器 echo "Starting new container..." docker run -d \ --name $CONTAINER_NAME \ -p $PORT_MAPPING \ --restart=always \ $IMAGE_NAME echo "Deployment completed!"
4. 執(zhí)行腳本
4.1 檢查腳本
執(zhí)行前可先檢查以下腳本內(nèi)容
cat sb_back.sh

4.2 執(zhí)行腳本
在腳本所在目錄,執(zhí)行命令
sh sb_back.sh
注意:由于Windows中的換行符和Linux環(huán)境中的有所不同,可能會導(dǎo)致sh腳本執(zhí)行報錯,如報錯可參考下一步解決
執(zhí)行截圖

4.3 報錯處理
如果報錯可先執(zhí)行以下命令將替換Windows中的換行符為Linux的換行符
sed -i 's/\r$//' your_script.sh
更多解決方案參考文章:Docker構(gòu)建鏡像運行容器腳本出現(xiàn)換行符問題的解決
5. 查看鏡像
執(zhí)行腳本后,使用命令查看鏡像是否更新
docker images

6. 查看容器
查看容器是否已經(jīng)創(chuàng)建并運行
查看正在運行的容器
docker ps

以上就是Docker容器部署Java項目的自動化腳本的詳細內(nèi)容,更多關(guān)于Docker部署Java項目的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Docker部署Nginx設(shè)置環(huán)境變量的實現(xiàn)步驟
本文主要介紹了Docker部署Nginx設(shè)置環(huán)境變量的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Docker?Compose搭建Wordpress服務(wù)實現(xiàn)詳解
這篇文章主要為大家介紹了Docker?Compose搭建Wordpress服務(wù)實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
docker使用alpine構(gòu)建jdk21鏡像的詳細步驟
這篇文章主要給大家介紹了關(guān)于docker使用alpine構(gòu)建jdk21鏡像的詳細步驟,鏡像中包含了應(yīng)用程序所需要的運行環(huán)境,函數(shù)庫,配置,以及應(yīng)用本身等各種文件,這些文件分層打包而成,需要的朋友可以參考下2024-03-03
詳解掛載運行的docker容器中如何掛載文件系統(tǒng)
這篇文章主要給大家介紹了如何在掛載運行中的docker容器中掛載文件系統(tǒng),文中通過一步步的實踐過程介紹的很詳細,相信對有需要的朋友們來說具有一定的參考借鑒價值,感興趣的朋友們下面來一起看看吧。2016-12-12
docker 如何搭建私有倉庫(ubuntu 14.04,Docker版本1.6.4)詳細介紹
這篇文章主要介紹了docker 如何搭建私有倉庫(ubuntu 14.04,Docker版本1.6.4)詳細介紹的相關(guān)資料,需要的朋友可以參考下2017-01-01

