如今容器使 Java 开发者比以往任何时候都更靠近“一次编写,随处运行” 的工作流程,但容器化 Java 应用却并非易事:你必须先编写 Dockerfile ,root 后运行 Docker 守护进程,等待构建完成,最后将镜像推送至远程注册表。
Jib 将处理将应用打包到容器镜像过程中的所有步骤,它直接与 Maven 和 Gradle Java 开发环境集成,不需要你编写 Dockerfile 或安装 Docker ,只需将其作为插件添加到你的构建中,就可以立即将 Java 应用容器化。
如下是Docker构建流程和Jib构建流程的区别,我们可以看到Jib构建相当简单,省去了Docker构建复杂的过程
Docker 构建流程:
Jib 构建流程:
Jib 提供了如下四种方式构建,我们今天使用Maven插件的方式来构建一下。
Maven:请参阅有关jib-maven-plugin的文档。
Gradle:请参阅文档jib-gradle-plugin。
Jib Core:Java的通用容器构建库。
Jib CLI:使用Jib Core构建图像的命令行界面
首先在springboot项目的pom.xml中添加jib插件,如下:
<plugin> <groupId>com.google.cloud.toolsgroupId> <artifactId>jib-maven-pluginartifactId> <version>2.6.0version> <configuration> <from> <image>openjdk:8-jdk-stretchimage> from> <to> <image>aimr0215/hellojib:${project.version}image> to> configuration>plugin>
在pom.xml文件所在目录执行以下命令即可自动推送到 hub.docker.com,其中aimr0215是我在hub.docker.com上的注册账号,密码此处省略。填入你自己注册的账号密码即可。执行如下命令
mvn compile jib:build -Djib.to.auth.username=填写你的账号 -Djib.to.auth.password=填写你的密码
运行结果如下:
[INFO] Scanning for projects...[INFO] [INFO] ------------------------< com.hzp:jib-project >-------------------------[INFO] Building jib-project 0.0.1-SNAPSHOT[INFO] --------------------------------[ jar ]---------------------------------[INFO] [INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ jib-project ---[INFO] Using 'UTF-8' encoding to copy filtered resources.[INFO] Copying 1 resource[INFO] Copying 0 resource[INFO] [INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ jib-project ---[INFO] Nothing to compile - all classes are up to date[INFO] [INFO] --- jib-maven-plugin:2.6.0:build (default-cli) @ jib-project ---[WARNING] 'mainClass' configured in 'maven-jar-plugin' is not a valid Java class: ${start-class}[INFO] [INFO] Containerizing application to aimr0215/hellojib:0.0.1-SNAPSHOT...[WARNING] Base image 'openjdk:8-jdk-stretch' does not use a specific image digest - build may not be reproducible[INFO] Using credentials from for aimr0215/hellojib:0.0.1-SNAPSHOT[INFO] The base image requires auth. Trying again for openjdk:8-jdk-stretch...[WARNING] The credential helper (docker-credential-desktop) has nothing for server URL: registry-1.docker.io[WARNING] Got output:credentials not found in native keychain[WARNING] The credential helper (docker-credential-desktop) has nothing for server URL: registry.hub.docker.com[WARNING] Got output:credentials not found in native keychain[INFO] Using credentials from Docker config (/Users/hzp/.docker/config.json) for openjdk:8-jdk-stretch[INFO] Using base image with digest: sha256:d8d62fe0d8e9f3e6e62921c7d738c9a962efd6887b2b282dc2f852d7f1ee4512[INFO] [INFO] Container entrypoint set to [java, -cp, /app/resources:/app/classes:/app/libs/*, com.hzp.jibproject.JibProjectApplication][INFO] [INFO] Built and pushed image as aimr0215/hellojib:0.0.1-SNAPSHOT[INFO] Executing tasks:[INFO] [==============================] 100.0% complete[INFO] [INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 03:02 min[INFO] Finished at: 2020-11-24T18:00:07+08:00[INFO] ------------------------------------------------------------------------
然后我们打开docker hub网站已经可以看到推送上去的镜像文件。
经过上述操作,一个项目的镜像文件就制作完成了。更多的操作可以参考jib官方github:
https://github.com/GoogleContainerTools/jib