共计 1643 个字符,预计需要花费 5 分钟才能阅读完成。
1. 前言
Jib是 Google 开发的可以直接构建 Java应用的 Docker 和OCI镜像的类库,以 Maven 和Gradle插件形式提供。它最骚操作的是可以在没有 Docker 守护程序的情况下构建, 也就是说,您不必在计算机上安装 docker 守护程序!尽管 Spring Boot 2.3.0.RELEASE 已经推出了构建镜像的功能,胖哥还是忍不住要试试Jib。
其实最骚的还是名字。
2. Docker 构建流程和 Jib 的构建流程
没有对比就没有伤害。我们还是要对比一下这两者的构建流程。
Docker构建流程需要我们先把项目打成 Jar 然后编写 Dockerfile,然后使用Docker 构建功能进行构建镜像、运行容器。流程如下:
而 Jib 是这样构建的:
作为一个 Java 开发者,不用再关心各种无关的命令和操作,只需要专注于 Java,而且高效稳定以及可复用的增量构建。为什么 Jib 能这么快而高效?
传统上,将 Java 应用程序与应用程序 Jar 一起构建为单个图像层,而 Jib 的构建策略将 Java 应用程序分为多层,以进行更细化的增量构建。更改代码时,仅重建更改,而不重建整个应用程序。
3. Jib 构建 Spring Boot 应用
接下来我将演示如何将 Spring Boot 应用打成镜像并上传到Dockerhub 仓库。
以 Maven 工程为例,我们只需要在 pom.xml
中引入 Jib Maven 插件。默认情况下Jib 会把我们打好的镜像上传到 Google 的gcr.io仓库,实际中我们会把打好的镜像上传到私有仓库,所以我们要加一些个性化配置。这里我以 dockerhub 仓库为例添加一些个性化配置:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.4.0</version>
<configuration>
<!-- 相当于 Dockerfile 中的 FROM -->
<from>
<image>amazoncorretto:8</image>
</from>
<to>
<!-- 构建镜像名称,这里我使用 maven 中定义的项目名称 -->
<image>daxus/${project.name}</image>
<!-- 私有仓库的账号密码 -->
<auth>
<username>felordcn</username>
<password>yourpassword</password>
</auth>
<!--Docker 镜像的 tag 这里使用 maven 定义的版本号 -->
<tags>
<tag>
${project.version}
</tag>
</tags>
</to>
</configuration>
</plugin>
然后在项目根目录执行 mvn clean compile jib:build
就可以了。
其实也可以简单引入 Jib 插件:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.4.0</version>
</plugin>
只不过我们的命令会更复杂一些,需要指定一些必要的参数,例如:
mvn clean compile jib:build \
-Djib.to.image=myregistry/myimage:latest \
-Djib.to.auth.username=$USERNAME \
-Djib.to.auth.password=$PASSWORD
更多的定制命令可参考官方文档:
https://github.com/GoogleCont…
4. 总结
Jib使用起来非常简单,让开发人员以 Java 的风格来完成 Docker 镜像的构建,能够大大改善编程的体验。多多关注:码农小胖哥 获取更多有用的编程干货教程。
关注公众号:Felordcn 获取更多资讯
个人博客:https://felord.cn