Docker容器部署Java項目的自動化腳本
1. 服務部署過程
先將Java項目在docker中部署的過程中所有命令列舉
命令均在jar包同級目錄下進行執(zhí)行
1.1 移除舊jar包
正常應該會在更新時覆蓋,但還是執(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 構建新鏡像
構建新的鏡像
docker build -t sb_back:20250327 .
參數描述
- build 構建命令
- -t 打標簽,TAG的縮寫
- sb_back:20250327 鏡像名稱和TAG
- . 當前目錄下
1.7 運行新容器
運行新的容器,自定義名稱,指定端口映射
docker run --name sb_back -p 3006:8089 -d --restart=always sb_back:20250326
參數描述
- run 運行容器命令
- –name 定義容器名稱,這里定為sb_back
- -p 映射端口,將Java服務端口即容器端口映射到本機服務器向外暴露的端口(即后續(xù)訪問該服務的真實端口)
- -d 后臺運行
- –restart=always 容器運行失敗會自動重啟
- sb_back:$DATE 鏡像及TAG(使用指定鏡像來運行容器)
2. 創(chuàng)建shell腳本文件
可以在本地創(chuàng)建后上傳到服務器或者在服務器jar包同級目錄創(chuàng)建
2.1 本地創(chuàng)建并上傳到服務器
先在本地編輯(VSCode等編輯器創(chuàng)建一個sb_back.sh文件),將腳本內容粘貼進來并保存

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

2.2 服務器中創(chuàng)建sh文件
在jar包同級目錄下創(chuàng)建名為sb_back.sh的文件
mkdir sb_back.sh
編輯文件
vim sb_back.sh
將腳本內容粘貼進來即可
(i開啟輸入模式,esc推出輸出模式,:wq保存并退出)
3. 腳本內容
將以上名命令整合到一起就是腳本執(zhí)行的命令,完整內容如下
3.1 簡易腳本
停止容器、移除原有容器和鏡像,構建鏡像并部署容器的腳本命令
#!/bin/bash # 1. 停止并刪除舊容器 echo "Stopping and removing old container..." docker stop sb_back || true docker rm sb_back || true # 2. 刪除舊鏡像(可選,強制重新構建時使用) echo "Removing old image..." docker rmi $IMAGE_NAME || true # 3. 構建新鏡像 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包,停止容器、移除容器和鏡像、構建鏡像和運行容器等命令整合
并且將容器名鏡像名等以變量的形式傳入
其中以時間變量作為鏡像TAG
#!/bin/bash # 定義當前日期,后續(xù)使用日期作為鏡像TAG版本 DATE=$(date +%Y%m%d) # 定義當前時間 CURRENT_TIME=`date +'%Y%m%d_%H%M%S'` # 或者 # CURRENT_TIME=(date +%Y%m%d_%H%M%S) # 輸出當前時間內容 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 # 部署配置(根據實際情況修改) 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服務端口8089映射到本機服務器3006,外部訪問時訪問的就是3006端口 # 1. 停止并刪除舊容器 echo "Stopping and removing old container..." docker stop $CONTAINER_NAME || true docker rm $CONTAINER_NAME || true # 2. 刪除舊鏡像(可選,強制重新構建時使用) echo "Removing old image..." docker rmi $IMAGE_NAME || true # 3. 構建新鏡像 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í)行前可先檢查以下腳本內容
cat sb_back.sh

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

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

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

以上就是Docker容器部署Java項目的自動化腳本的詳細內容,更多關于Docker部署Java項目的資料請關注腳本之家其它相關文章!
相關文章
docker安裝redis 5.0.7并掛載外部配置和數據問題
Redis 是一個開源的使用 ANSI C 語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value 的 NoSQL 數據庫,并提供多種語言的 API。這篇文章主要介紹了docker安裝redis 5.0.7并掛載外部配置和數據,需要的朋友可以參考下2019-12-12
關于Docker網絡配置及部署SpringCloud項目詳解
這篇文章主要介紹了關于Docker網絡配置及部署SpringCloud項目詳解,Docker在創(chuàng)建容器時有四種網絡模式,bridge為默認不需要去指定,其他三種模式需要在創(chuàng)建容器時使用–net去指定,需要的朋友可以參考下2023-07-07
詳解docker中使用systemctl啟動服務報錯的解決辦法
這篇文章主要介紹了詳解docker中使用systemctl啟動服務報錯的解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08

