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

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

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

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

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

以上就是Docker容器部署Java項(xiàng)目的自動(dòng)化腳本的詳細(xì)內(nèi)容,更多關(guān)于Docker部署Java項(xiàng)目的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
docker-compose安裝Jenkins的實(shí)踐筆記
jenkins是一個(gè)比較強(qiáng)大的自動(dòng)構(gòu)建工具, Jenkins是開(kāi)源CI&CD軟件領(lǐng)導(dǎo)者,提供超過(guò)1000個(gè)插件來(lái)支持構(gòu)建、部署、自動(dòng)化,本文給大家介紹docker-compose安裝Jenkins的實(shí)踐筆記,感興趣的朋友一起看看吧2021-09-09
docker安裝redis 5.0.7并掛載外部配置和數(shù)據(jù)問(wèn)題
Redis 是一個(gè)開(kāi)源的使用 ANSI C 語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value 的 NoSQL 數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的 API。這篇文章主要介紹了docker安裝redis 5.0.7并掛載外部配置和數(shù)據(jù),需要的朋友可以參考下2019-12-12
關(guān)于Docker網(wǎng)絡(luò)配置及部署SpringCloud項(xiàng)目詳解
這篇文章主要介紹了關(guān)于Docker網(wǎng)絡(luò)配置及部署SpringCloud項(xiàng)目詳解,Docker在創(chuàng)建容器時(shí)有四種網(wǎng)絡(luò)模式,bridge為默認(rèn)不需要去指定,其他三種模式需要在創(chuàng)建容器時(shí)使用–net去指定,需要的朋友可以參考下2023-07-07
Docker安裝部署單機(jī)版Rocket及基礎(chǔ)講解
RocketMQ是阿里巴巴旗下一款開(kāi)源的MQ框架,經(jīng)歷過(guò)雙十一考研、Java編程語(yǔ)言實(shí)現(xiàn),有非常好完整生態(tài)系統(tǒng),這篇文章主要介紹了用Docker部署安裝單機(jī)版Rocket及基礎(chǔ)講解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值2022-07-07
從入門(mén)到實(shí)戰(zhàn)全面解析Docker鏡像常用命令
Docker 作為容器化技術(shù)的標(biāo)桿工具,其鏡像管理能力是實(shí)現(xiàn)高效 CI/CD 流程的核心,本文將為大家?guī)?lái)Docker 鏡像常用命令的全方位解析,希望對(duì)大家有所幫助2025-11-11
詳解docker中使用systemctl啟動(dòng)服務(wù)報(bào)錯(cuò)的解決辦法
這篇文章主要介紹了詳解docker中使用systemctl啟動(dòng)服務(wù)報(bào)錯(cuò)的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Docker 與 Kubernetes 部署最佳實(shí)踐指南
本文介紹了Docker與Kubernetes部署的最佳實(shí)踐,涵蓋Dockerfile優(yōu)化、鏡像管理、容器運(yùn)行、Kubernetes部署配置、服務(wù)配置、配置管理、存儲(chǔ)管理、網(wǎng)絡(luò)配置、CI/CD集成、監(jiān)控與日志、安全最佳實(shí)踐、性能優(yōu)化、實(shí)際應(yīng)用場(chǎng)景及未來(lái)發(fā)展趨勢(shì)2026-04-04

