• 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包有版本号可以直接获取。

  • 相关阅读:
    鸿蒙DevEco Studio 4.1 Release-模拟器启动方式错误
    Linux从入门到精通(八)——Linux磁盘管理
    注视一切的终结
    如何高效备考系统架构设计师考试?
    期货开户的条件和流程
    输入输出管理:I/O控制方式
    Python编程:高效数据处理与自动化任务实践
    linux驱动开发:linux设备模型
    Java内存模型-JMM
    数据结构与算法之LeetCode-652. 寻找重复的子树
  • 原文地址:https://blog.csdn.net/yxt625520/article/details/133983316