如何使用jib-maven-plugin插件构建Maven工程制作镜像
问题现象
由于CodeArts官方提供的maven镜像中没有docker环境,所以,使用docker-maven-plugin插件构建的项目通过CodeArts的编译构建制作镜像时会报错,比如:
INFO: I/O exception (java.io.IOException) caught when processing request to {}->unix://localhost:80: No such file or directory
本文将指导用户在没有docker的maven环境使用jib-maven-plugin插件制作出带有镜像的tar文件。
处理方法
- 修改需要制作镜像的项目代码。
<!--使用jib插件--> <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>1.3.0</version> <configuration> <!--from节点用来设置镜像的基础镜像,相当于Docerkfile中的FROM关键字--> <from> <!—建议使用swr公开镜像,下载速度快,更稳定 --> <image>swr.example.myxxcloud.com/xxxx/xxx:xxxxx</image> </from> <to> <!--镜像名称和tag,使用了mvn内置变量${project.version},表示当前工程的version--> <image> hellojib:${project.version}</image> </to> <!--容器相关的属性--> <container> <!--jvm内存参数--> <jvmFlags> <jvmFlag>-Xms4g</jvmFlag> <jvmFlag>-Xmx4g</jvmFlag> </jvmFlags> <!--要暴露的端口--> <ports> <port>8080</port> </ports> </container> </configuration> </plugin>
- From标签:设置基础镜像,相当于dockerfile中的FROM关键字,这里推荐使用SWR中的镜像,构建时下载速度快并且稳定。
- To标签:设置制作出来的镜像的镜像名称和tag。
- Container标签:设置容器的相关属性,jvm内存参数,端口等。
- mainClass标签:设置项目启动的主程序,也就是Spring Boot的Application类。
- 创建构建任务并执行。
- 添加两个构建步骤:Maven构建和上传软件包到软件发布库,并将Maven构建默认命令修改为:
mvn compile jib:buildTar -Dmaven.test.skip=true -U -e -X –B
jib构建工具主要包含了四个强大的功能,由于编译构建是在没有docker环境的情况下构建,所以使用build命令和dockerBuild命令并不能制作出镜像,只能使用buildTar命令制作出一个包含镜像的tar文件。
- build提供了创建镜像并推送到远程仓库功能。
- buildTar提供创建一个包含镜像的tar文件功能。
- dockerBuild提供创建docker镜像到本地功能。
- exportDockerContext提供创建dockerfile功能。
构建成功后,日志显示如下信息:
- 在java工程的target目录下,可以看到生成了名为jib-image.tar的文件,同时任务会通过上传软件到发布库步骤上传到发布库。
- 添加两个构建步骤:Maven构建和上传软件包到软件发布库,并将Maven构建默认命令修改为:
- 使用tar镜像。
通过执行脚本或下载命令从发布库中将tar文件下载到要部署应用的服务器上,执行docker load命令将tar文件的镜像加载到本地镜像仓库,再使用docker run等命令启动镜像即可。