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"]

一键执行构建镜像和发布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" ]
thenecho "bt-starter 无正在运行容器进程"
elseecho "bt-starter 正在停止容器进程 $PID"
fi
PIDS=$(docker ps -a | grep bt-starter | awk '{print $1}')
for pid in $PIDS
dodocker stop $piddocker 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:$inputValecho "启动镜像 bt-starter:$inputVal 完成"

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/116145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读书笔记:Effective C++ 2.0 版,条款37(不要重新定义继承而来的非虚函数)、条款38(不重新定义继承而来的缺省参数值)

条款37: 决不要重新定义继承而来的非虚函数 非虚函数在编译期静态绑定,容易出错。 概念上也不合适。 任何条件下都要禁止重新定义继承而来的非虚函数。 条款38: 决不要重新定义继承而来的缺省参数值 继承一个有缺省参数值的虚函数。 虚函数是动态绑定而缺省参数值是…

Java面试题-Java核心基础-第十一天(注解)

目录 一、注解是什么? 二、注解的作用? 三、Java中的内置注解有哪些? 四、如何自定义一个注解? 五、JDK8中的新特性 一、注解是什么? 注解就是一种可以标注在类、属性、方法、方法参数等结构上面的一种特殊“注释…

解决“您点击的链接已过期”;The Link You Followed Has Expired的问题

今天WP碰到一个坑。无论发布文章还是更新插件、更换主题都是这么一种状态“您点击的链接已过期”;The Link You Followed Has Expired 百度出来的答案都是修改post_max_size 方法1. 通过functions.php文件修复 这种方法更容易,只需将以下代码添加到Wor…

Flutter和SwiftUI比较

0.语言 SwiftUI 毫无疑问是Swift语言编写, 在2019年正式推出,目前最新是Swift 5.9 (2023年9月),由Apple公司维护和发行; 该编程语言发明人已离职Apple。 语言官网:https://developer.apple.com/swift/ 最好用Xcode编…

maven仓库改国内源

今天准备复现漏洞环境,发现太慢,需要配置国内源 file -> settings 搜索maven 修改settings.xml,这里的需要修改两个文件 1.上图的settings.xml文件 2.idea的maven模块 settings.xml文件将原来的注释掉,然后把阿里的添加上&…

【前端设计模式】之调停者模式(中介者模式)

调停者模式是一种行为设计模式,它通过引入一个调停者对象来集中处理一组对象之间的交互。调停者模式的目标是减少对象之间的直接通信,从而降低耦合度,并且使代码更易于维护和扩展。 调停者模式特性 将对象之间的通信集中在一个调停者对象中…

Web前端—Flex布局:标准流、浮动、Flex布局、综合案例(短视频首页解决方案)

版本说明 当前版本号[20231024]。 20231024初版 目录 文章目录 版本说明目录Flex布局01-标准流02-浮动基本使用产品区域布局HTML标签CSS样式 清除浮动场景搭建额外标签法单伪元素法双伪元素法overfow法 03-Flex布局Flex组成主轴对齐方式侧轴对齐方式修改主轴方向弹性伸缩比弹…

【Spring Cloud】seata分布式事务官方入门案例(导读2)

文章目录 1. 准备seata环境1.1. 生产环境启动seata1.2. 采用代码启动seata 2. 开始测试3. 附录3.1. 如果第一次配置seata压缩包3.2. 常见问题参考 本文是针对官方seata入门文章https://sca.aliyun.com/zh-cn/docs/2022.0.0.0/user-guide/seata/quick-start的 补充说明&#xf…

第3章 指令级并行及其利用

3.1 指令级并行:概念和挑战 1985年之后几乎所有处理器都使用流水线来使指令能重叠执行。由于指令可以并行执行,所有指令之间的这种可能得重叠称为指令级并行ILP。 ILP大体有两种实现方法: 1. 依靠硬件来动态发现并实现并行&#xf…

基于C语言 --- 自己写一个通讯录

C语言程序设计笔记---039 C语言之实现通讯录1、介绍C/C程序的内存开辟2、C语言实现通讯录2.1、ContactMain.c程序大纲2.2、Contact2.h2.3、Contact2.c2.3.1 InitContact( )初始化通讯录函数2.3.2 AddContact( )添加联系人和CheckCapaticy( )检查容量函数2.3.3、ShowContact( )显…

项目架构落地之需求分析(一)

目标 尽可能全面准确、全面、深入理解业务(5W2H)识别重难点业务理清业务流程和功能点识别非功能需求和质量约束 一.需求调研 派什么人: 懂业务头脑灵活懂技术擅长沟通业务经验多情商高 调研之前: 做功课假想系统 调研中&am…

常用Web安全扫描工具汇整

漏洞扫描是一种安全检测行为,更是一类重要的网络安全技术,它能够有效提高网络的安全性,而且漏洞扫描属于主动的防范措施,可以很好地避免黑客攻击行为,做到防患于未然。 1、AWVS Acunetix Web Vulnerability Scanner&a…

数据库Redis(一):基础知识

NoSQL数据库简介 NoSQL,Not only SQL,泛指非关系型的数据库,不依赖业务逻辑方式存储,而以简单的 key-value 模式存储,极大地增加了数据库的扩展能力。 1)不遵循SQL标准; 2)不支持A…

图书推荐管理系统Python+Django网页界面+协同过滤推荐算法

一、介绍 图书管理与推荐系统。使用Python作为主要开发语言。前端采用HTML、CSS、BootStrap等技术搭建界面结构,后端采用Django作为逻辑处理,通过Ajax等技术实现数据交互通信。在图书推荐方面使用经典的协同过滤算法作为推荐算法模块。主要功能有&#…

安全、高效远程访问大数据分析平台解决方法:Splunk Enterprise+Cpolar

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 Splunk Enterprise是一个强大的机器数据管理平台,可帮助客户分析和搜索数据,以及可视化数据…

iPhone开发--Xcode15下载iOS 17.0.1 Simulator Runtime失败解决方案

爆句粗口,升级后公司网络下载iOS 17.0.1 Simulator Runtime一直出错,每次出错后都得重新开始下载,oh,f**k。上一次在在家里的网络升级成功。 解决办法一: 进入网址:https://developer.apple.com/download…

QMap之自定义Key和Value

为什么要自定义QMap的 key和value呢?因为在某些应用场景,基本数据类型的key和value并不能满足要求,比如座位在第几行、第几列,座位上人的姓名、职务;二维坐标系中散点的横坐标、纵坐标,散点的id、result。即key和value是一种多对多的关系。 #include <QMap> #incl…

税务某局 webpack 登录接口逆向分析

持续创作文章&#xff0c;只是为了更好的思考 这里不多介绍了&#xff0c;我放一张图大家就明白是什么接口了。这里只介绍整体加密逻辑&#xff0c;有些细的地方大家自行调整。 本次逆向的网址是 aHR0cHM6Ly90cGFzcy5qaWxpbi5jaGluYXRheC5nb3YuY246ODQ0My8jL2xvZ2luP3JlZGly…

罗马数字转整数[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 罗马数字包含以下七种字符:I&#xff0c;V&#xff0c;X&#xff0c;L&#xff0c;C&#xff0c;D和M。 字符数值I1V5X10L50C100D500M1000 例如&#xff1a;罗马数字2写做II&#xff0c;即为两个并列的1。12写做XII&#xff0c;即为…

Python使用正则表达式去除base64编码前缀

Python使用正则表达式去除base64编码前缀 当我们做开发时&#xff0c;前端有可能会传给我我们base64编码字符串&#xff0c;如果我们想把它转成文件&#xff0c;需要去除前缀&#xff0c;代码如下&#xff1a; import rebase64_str "data:zip/png;base64,AAAAAAAAAAAAB…