• docker自动构建jar镜像,自动发布最新镜像的简单shell脚本


    使用docker自动构建spring boot jar,自动发布最新镜像的简单shell脚本。一般在docker上部署流程问为:
    构建docker镜像 -> 停止旧版本 -> 杀掉旧版本 -> 部署最新镜像。

    1、maven/mvd/gradle 打包spring boot jar
    2、编写Dockerfile,
    注意: 如果项目中涉及导出word/excel/ppt/pdf/md/txt等文件并且涉及中文,需要在将中文字体同时构建到镜像中,解决导出文件中文乱码问题。若无,可移除配置

    FROM openjdk:8-jdk-alpine
    # 作者
    MAINTAINER Yang douya
    # jar包添加到镜像中 第一个是maven打包jar 第二个为在镜像中得jar名称 通常aven打包jar都会价版本号 镜像版本不用
    ADD  bt-starter.jar  bt-starter.jar
    # 应用中有中文标识 特别是验证码会报java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion异常 解决增加字体
    RUN echo -e 'https://mirrors.aliyun.com/alpine/v3.6/main/\nhttps://mirrors.aliyun.com/alpine/v3.6/community/' > /etc/apk/repositories \
     && apk update \
     && apk upgrade \
     && apk --no-cache add ttf-dejavu fontconfig
    # 安装中文 安装本地中文字体一定要却换工作地址 [可能存在找不到jar问题]
    #WORKDIR /home/yangdouya/projects/smart-transport
    #直接将字体文件目录和需要构建的 jar放在同一目录即可解决切换工作空间导致找不jar问题
    COPY font/simsun.ttf /usr/share/fonts
    # 解决时差8小时问题
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    # 暴露端口号
    EXPOSE 8085
    # 容器启动之后要执行的命令
    ENTRYPOINT ["java", "-jar", "bt-starter.jar", "--spring.profiles.active=test"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    一键执行构建镜像和发布shell脚本docker-build-run.sh

    #!/bin/sh
    C_VERSION=$(docker ps | grep bt-starter | awk '{print $2}'| awk -F ":" '{print $2}')
    read -p "当前版本号 $C_VERSION 请输入最新版本号:" inputVal
    echo "输入 $inputVal"
    # 执行构建指定版本镜像
    docker build -t bt-starter:$inputVal .
    # 执行完成后查询是否运行得有镜像并停止删除容器
    PID=$(docker ps | grep bt-starter | awk '{print $1}')
    if [ -z "$PID" ]
    then
    	echo "bt-starter 无正在运行容器进程"
    else
    	echo "bt-starter 正在停止容器进程 $PID"
    fi
    PIDS=$(docker ps -a | grep bt-starter | awk '{print $1}')
    for pid in $PIDS
    do
    	docker stop $pid
    	docker rm $pid
    done 
    echo "bt-starter 停止容器 -> 删除容器完成"
    # 执行启动最新版本容器
    echo "正在启动镜像 bt-starter:$inputVal"
    docker run --name bt-starter -p 8080:8080 \
    -v /etc/localtime:/etc/localtime \
    -v /home/yangdouya/projects/data/export-template:/data/export-template \
    -v /home/yangdouya/projects/data/temp:/data/temp \
    -v /home/yangdouya/projects/data/logs:/logs \
    -d bt-starter:$inputVal
    
    echo "启动镜像 bt-starter:$inputVal 完成"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    将docker-build-run.sh脚本设置为可执行文件
    chmod +x docker-build-run.sh

    执行脚本:
    docker-build-run.sh

    这里预留了当前jar的版本输入,如果jar包有版本号可以直接获取。

  • 相关阅读:
    Java ~ Executor ~ LinkedBlockingQueue【源码】
    Linux环境下安装部署MySQL8.0以上(内置保姆级教程)- 离线模式
    2023-09-11 mysql-代号m-0930阶段目标-任务列表-记录
    植物大战僵尸杂交版v2.1最新整合版,附PC端+安卓端+iOS端安装包+修改器+安装教程!
    CTF是黑客大赛?新手如何入门CTF?
    电机模型预测控制算法
    窗口函数实战指南:轻松掌握排名计算技巧,提升数据处理效率
    计算机毕业设计Java健身房管理系统设计(源码+系统+mysql数据库+lw文档)
    java-php-python-ssm外卖订餐管理计算机毕业设计
    极盾故事|某头部私募基金“扩展检测响应XDR平台”建设
  • 原文地址:https://blog.csdn.net/yxt625520/article/details/133983316