SpringBoot 打包jar并生成docker镜像
type
status
date
slug
summary
tags
category
icon
password
order
SpringBoot打包可以是war(tomcat需要),或者jar直接执行,我这里打包的jar,然后利用google的插件jib可以直接生成docker镜像提交到自己仓库

配置打包jar

首先得配置下多环境多配置文件,比如开发环境是这一套配置,生产环境,测试环境等等
先新建好对应的目录,以及放好对应的配置文件
notion image
然后在pox.xml中添加以下配置,根据个人需求进行修改
最后在pox.xml中的build节点下,添加以下配置,关键是${env},获取上面所激活的(activeByDefault=true)的那个配置
多环境多配置到这就可以了,然后是配置打包jar,直接放完整配置,本配置依赖包以及resources都是与jar分离的,方便更新,
注意以下地方的修改
  • maven-jar-plugin插件中的mainClass参数,里面是你的SpringBoot启动类, excludes参数是要排除哪些目录文件,因为这个配置文件的打包配置,是资源、依赖是与jar分离的
这些配置完后,就可以在根目录执行mvn package命令,或者在idea右边选择maven,手动点击package选项进行打包,
打包完应该会在target目录下生成resources目录、libs目录以及项目名.jar文件

生成docker镜像并提交

首先在pox.xml的顶部,properties节点下添加配置,你docker仓库的url
然后是配置jib插件,在plugins节点下添加
提交到docker仓库必然是需要账户密码的,为了安全在本地maven的settings.xml中配置,也可以直接在plugin添加节点
1.在jib插件的plugin->configuration->from/to节点中设置账户密码
2.在maven的settings.xml中servers节点下设置账户密码,其实这段放到 plugin->configuration 下也可以,注意id是需要验证用户名密码的域名
这个时候再执行mvn package,当打包jar结束时,就会调用jib插件去上传到你的docker仓库
成功输出信息
notion image
如果想直接运行该docker镜像,那么用以下代码,18080:8080中8080是容器内的端口,18080是宿主机端口

问题踩坑

1.jib默认的超时时间是20S,而20S经常出现docker镜像传不完,就会报错read timeout,所以需要手动设置下超时时间,命令如下,其实和执行mvn package一样,但是多了个超时参数
2.打包完直接java -jar xxx.jar就可以执行,如果执行出现问题,比如找不到类XXX,找不到启动类什么的,解压jar文件,检查META-INF目录下的MANIFEST.MF文件里内容是否正确,或者resources/libs文件夹里的内容是否正确无缺失
结尾,另一篇文章会描述编写docker-compose脚本,配置安装运行haproxy、redis、mysql、nginx、springboot
 
docker运行springboot+haproxy+mysql+redisSpring中实现单点Redis分布式锁