Docker容器部署Java項(xiàng)目的自動(dòng)化腳本
1. 服務(wù)部署過程
先將Java項(xiàng)目在docker中部署的過程中所有命令列舉
命令均在jar包同級(jí)目錄下進(jìn)行執(zhí)行
1.1 移除舊jar包
正常應(yīng)該會(huì)在更新時(shí)覆蓋,但還是執(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 運(yùn)行新容器
運(yùn)行新的容器,自定義名稱,指定端口映射
docker run --name sb_back -p 3006:8089 -d --restart=always sb_back:20250326
參數(shù)描述
- run 運(yùn)行容器命令
- –name 定義容器名稱,這里定為sb_back
- -p 映射端口,將Java服務(wù)端口即容器端口映射到本機(jī)服務(wù)器向外暴露的端口(即后續(xù)訪問該服務(wù)的真實(shí)端口)
- -d 后臺(tái)運(yùn)行
- –restart=always 容器運(yùn)行失敗會(huì)自動(dòng)重啟
- sb_back:$DATE 鏡像及TAG(使用指定鏡像來運(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)來并保存
使用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)來即可
(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. 刪除舊鏡像(可選,強(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容器名稱 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映射到本機(jī)服務(wù)器3006,外部訪問時(shí)訪問的就是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中的換行符為Linux的換行符
sed -i 's/\r$//' your_script.sh
更多解決方案參考文章:Docker構(gòu)建鏡像運(yùn)行容器腳本出現(xià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)目的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Docker部署Nginx設(shè)置環(huán)境變量的實(shí)現(xiàn)步驟
本文主要介紹了Docker部署Nginx設(shè)置環(huán)境變量的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Docker?Compose搭建Wordpress服務(wù)實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Docker?Compose搭建Wordpress服務(wù)實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Docker容器中運(yùn)行flume及啟動(dòng)不輸出運(yùn)行日志問題
這篇文章主要介紹了 Docker容器中運(yùn)行flume及啟動(dòng)不輸出運(yùn)行日志問題及解決方法,需要的朋友參考下吧2018-03-03docker使用alpine構(gòu)建jdk21鏡像的詳細(xì)步驟
這篇文章主要給大家介紹了關(guān)于docker使用alpine構(gòu)建jdk21鏡像的詳細(xì)步驟,鏡像中包含了應(yīng)用程序所需要的運(yùn)行環(huán)境,函數(shù)庫,配置,以及應(yīng)用本身等各種文件,這些文件分層打包而成,需要的朋友可以參考下2024-03-03詳解掛載運(yùn)行的docker容器中如何掛載文件系統(tǒng)
這篇文章主要給大家介紹了如何在掛載運(yùn)行中的docker容器中掛載文件系統(tǒng),文中通過一步步的實(shí)踐過程介紹的很詳細(xì),相信對有需要的朋友們來說具有一定的參考借鑒價(jià)值,感興趣的朋友們下面來一起看看吧。2016-12-12docker 如何搭建私有倉庫(ubuntu 14.04,Docker版本1.6.4)詳細(xì)介紹
這篇文章主要介紹了docker 如何搭建私有倉庫(ubuntu 14.04,Docker版本1.6.4)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-01-01