乐趣区

作为一个Java开发你用过Jib吗

1. 前言

JibGoogle 开发的可以直接构建 Java应用的 DockerOCI镜像的类库,以 MavenGradle插件形式提供。它最骚操作的是可以在没有 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 会把我们打好的镜像上传到 Googlegcr.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

退出移动版