🤟致敬读者
- 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉
📘博主相关
- 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息
文章目录
- Docker容器部署Java项目的自动化脚本(Shell编写)
- 1. 服务部署过程
- 1.1 移除旧jar包
- 1.2 jar包更新
- 1.3 停止旧容器
- 1.4 删除旧容器
- 1.5 删除旧镜像
- 1.6 构建新镜像
- 1.7 运行新容器
- 2. 创建shell脚本文件
- 2.1 本地创建并上传到服务器
- 2.2 服务器中创建sh文件
- 3. 脚本内容
- 3.1 简易脚本
- 3.2 升级脚本
- 4. 执行脚本
- 4.1 检查脚本
- 4.2 执行脚本
- 4.3 报错处理
- 5. 查看镜像
- 6. 查看容器
📃文章前言
- 🔷文章均为学习工作中整理的笔记。
- 🔶如有错误请指正,共同学习进步。
Docker容器部署Java项目的自动化脚本(Shell编写)
1. 服务部署过程
先将Java项目在docker中部署的过程中所有命令列举
命令均在jar包同级目录下进行执行
1.1 移除旧jar包
正常应该会在更新时覆盖,但还是执行以下删除操作
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服务端口即容器端口映射到本机服务器向外暴露的端口(即后续访问该服务的真实端口)
-d 后台运行
–restart=always 容器运行失败会自动重启
sb_back:$DATE 镜像及TAG(使用指定镜像来运行容器)
2. 创建shell脚本文件
可以在本地创建后上传到服务器或者在服务器jar包同级目录创建
2.1 本地创建并上传到服务器
先在本地编辑(VSCode等编辑器创建一个sb_back.sh文件),将脚本内容粘贴进来并保存
使用FTP工具或者oss工具上传
ossutil64 cp oss://sb-dev/sb_back/sb_back.sh sb_back.sh
注意,由于Windows和Linux换行符不同,脚本上传后执行可能会报错,可参考4.3
进行解决
2.2 服务器中创建sh文件
在jar包同级目录下创建名为sb_back.sh的文件
mkdir sb_back.sh
编辑文件
vim sb_back.sh
将脚本内容粘贴进来即可
(i
开启输入模式,esc
推出输出模式,:wq
保存并退出)
3. 脚本内容
将以上名命令整合到一起就是脚本执行的命令,完整内容如下
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
# 定义当前日期,后续使用日期作为镜像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. 执行脚本
4.1 检查脚本
执行前可先检查以下脚本内容
cat sb_back.sh
4.2 执行脚本
在脚本所在目录,执行命令
sh sb_back.sh
注意:由于Windows中的换行符和Linux环境中的有所不同,可能会导致sh脚本执行报错,如报错可参考下一步解决
执行截图
4.3 报错处理
如果报错可先执行以下命令将替换Windows中的换行符为Linux的换行符
sed -i 's/\r$//' your_script.sh
更多解决方案参考文章:Error: context must be a directory: “/root/xxxx/.\r“(Docker构建镜像运行容器脚本出现换行符问题的解决)
5. 查看镜像
执行脚本后,使用命令查看镜像是否更新
docker images
6. 查看容器
查看容器是否已经创建并运行
查看正在运行的容器
docker ps
📜文末寄语
- 🟠关注我,获取更多内容。
- 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
- 🟢《全栈知识库》技社区,集结全栈各领域开发者,期待你的加入。
- 🔵加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
- 🟣点击下方名片获取更多内容🍭🍭🍭👇