maven-jib插件使用说明
使用说明
jib是maven的一款插件,可以实现使用maven命令直接生成tar的镜像包(或者生成镜像,推送到仓库等操作)
Jib的官网地址是https://github.com/GoogleContainerTools/jib
插件如下:
- container节点用来设置容器的属性,例如对外暴露的端口、jvm参数等
- from节点用来设置基础镜像
- to节点用于指定镜像名称和tag
- allowInsecureRegistries可以用来设置非https的harbor仓库连接
打包
使用mvn clean compile jib:dockerBuild -f pom.xml
//会将镜像存入to所指的仓库
还有其他的jib命令:
mvn compile jib:buildTar
//去java工程的target目录下,发现生成了名为jib-image.tar的文件
运行
- 通过jib生成的java文件会在容器的/app下
- classes是编译后的文件
- libs是依赖包文件
- resources是代码中对应的resources静态文件
-
运行时需要在容器的启动脚本中增加startup.sh,存放在代码reousrces下面
其中使用java - server -cp /app/resources:/app/classes:/app/libs/* 启动类所在路径 启动参数
来启动java程序 -
容器的deployment中指定 command参数为:
command : ["/bin/sh","/app/resources/startip.sh"]
将jib与mvn 构建的生命周期绑定
修改pom.xml增加executions节点,里面设置compile触发jib:dockerBuild
构建命令是mvn compile jib:dockerBuild,可简化为仅用mvn compile就完成镜像构建
【应用场景】:
- 假设当前maven工程是父子结构的,有两个子工程A和B,其中A是二方库,提供一个jar包,里面是接口类和Bean类,B是springboot应用,并且B的源码中用到了A提供的接口和Bean;
- 上述父子结构的maven工程是常见的工程结构,此时如果要将B构建成Docker镜像,在B的目录下执行mvn compile jib:dockerBuild显然是不行的,因为没有编译构建A,会导致B的编译失败;
- 此时最好的做法就是将jib与mvn构建的生命周期绑定,修改B的pom.xml文件,加入executions节点;
- 在父工程目录下执行mvn compile,此时maven会先编译构建整个工程,然后再将B工程的构建结果制作成镜像;
参考了https://blog.csdn.net/boling_cavalry/article/details/100179709