Docker容器部署Java项目的自动化脚本

 更新时间:2025年04月03日 09:09:41   作者:岫珩  
这篇文章主要为大家详细介绍了Docker容器中部署Java项目的自动化脚本编写,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

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

更多解决方案参考文章:Docker构建镜像运行容器脚本出现换行符问题的解决

5. 查看镜像

执行脚本后,使用命令查看镜像是否更新

docker images

6. 查看容器

查看容器是否已经创建并运行

查看正在运行的容器

docker ps

以上就是Docker容器部署Java项目的自动化脚本的详细内容,更多关于Docker部署Java项目的资料请关注脚本之家其它相关文章!

相关文章

  • docker-compose安装Jenkins的实践笔记

    docker-compose安装Jenkins的实践笔记

    jenkins是一个比较强大的自动构建工具, Jenkins是开源CI&CD软件领导者,提供超过1000个插件来支持构建、部署、自动化,本文给大家介绍docker-compose安装Jenkins的实践笔记,感兴趣的朋友一起看看吧
    2021-09-09
  • docker安装redis 5.0.7并挂载外部配置和数据问题

    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网络配置及部署SpringCloud项目详解,Docker在创建容器时有四种网络模式,bridge为默认不需要去指定,其他三种模式需要在创建容器时使用–net去指定,需要的朋友可以参考下
    2023-07-07
  • Docker数据目录迁移方法详解

    Docker数据目录迁移方法详解

    这篇文章主要介绍了Docker数据目录迁移方法,Docker数据目录迁移成功后再也不用担心服务器系统盘目录被占满的情况的,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Docker安装部署单机版Rocket及基础讲解

    Docker安装部署单机版Rocket及基础讲解

    RocketMQ是阿里巴巴旗下一款开源的MQ框架,经历过双十一考研、Java编程语言实现,有非常好完整生态系统,这篇文章主要介绍了用Docker部署安装单机版Rocket及基础讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
    2022-07-07
  • 从入门到实战全面解析Docker镜像常用命令

    从入门到实战全面解析Docker镜像常用命令

    Docker 作为容器化技术的标杆工具,其镜像管理能力是实现高效 CI/CD 流程的核心,本文将为大家带来Docker 镜像常用命令的全方位解析,希望对大家有所帮助
    2025-11-11
  • 详解docker中使用systemctl启动服务报错的解决办法

    详解docker中使用systemctl启动服务报错的解决办法

    这篇文章主要介绍了详解docker中使用systemctl启动服务报错的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 使用Docker安装Jenkins的示例代码

    使用Docker安装Jenkins的示例代码

    这篇文章主要介绍了使用Docker安装Jenkins的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Docker 与 Kubernetes 部署最佳实践指南

    Docker 与 Kubernetes 部署最佳实践指南

    本文介绍了Docker与Kubernetes部署的最佳实践,涵盖Dockerfile优化、镜像管理、容器运行、Kubernetes部署配置、服务配置、配置管理、存储管理、网络配置、CI/CD集成、监控与日志、安全最佳实践、性能优化、实际应用场景及未来发展趋势
    2026-04-04
  • Docker超详细讲解镜像操作

    Docker超详细讲解镜像操作

    镜像也是 docker 的核心组件之一,镜像时容器运行的基础,容器是镜像运行后的形态。本文主要介绍Docker镜像的基本操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论