“写一次,就可以在任何地方运行”(WORA),有时甚至是“写一次,就可以在任何地方运行”(WORE),一直是座右铭,它描述了Java语言在跨时代的优势以及容器使Java开发人员比以往更加紧密来实现这种类型的工作流程。

不要误会我的意思。 容器化Java应用程序绝非易事,这是创建Jib的主要推动力。

由Google创建的Jib是开源Java容器化程序,它使Java开发人员可以使用他们熟悉的Java工具来构建容器。 它为您的Java应用程序构建Docker和OCI映像,并且可以作为MavenGradle的插件使用

创建Jib是为了处理将应用程序打包到容器映像中的所有步骤,它不需要您编写Dockerfile或安装docker,因为它直接集成到Maven和Gradle中。

让我们看一下与Docker相比构建流程的可视化表示:

Docker构建流程:




java打包一个包含main方法的类 java打包程序_gradle


臂架构建流程:




java打包一个包含main方法的类 java打包程序_docker_02


Jib创作的目标有三个:

  • 快速 - Swift部署您的更改。 Jib将您的应用程序分成多个层,从而将依赖项与类分开。 现在,您不必等待Docker重建整个Java应用程序-只需部署已更改的层。
  • 具有可复制性 –用相同的内容重建容器映像始终会生成相同的映像。 永远不要再次触发不必要的更新。
  • 无守护程序 –减少CLI依赖性。 从Maven或Gradle内部构建Docker映像,然后推送到您选择的任何注册表。 无需再编写Dockerfile并调用docker build / push。

您问它如何运作?

根据其GitHub repo的说法,传统上将Java应用程序与应用程序JAR一起构建为单个图像层,“ Jib的构建策略将Java应用程序分为多层,以实现更细化的增量构建。 更改代码时,仅重建更改,而不重建整个应用程序。 默认情况下,这些图层位于不易破坏的基础映像之上。”

如果您还有其他问题或评论,例如“但是,我不是Java开发人员”或“我只想在运行映像时设置一些JVM标志”,请确保查看“ FAQ”部分。

入门

您可以将Jib添加为Maven和Gradle的插件,并且需要的配置最少。 只需将插件添加到您的构建定义并配置目标映像即可。

Maven上的短臂

<plugin>
  <groupId>com.google.cloud.tools</groupId>
  <artifactId>jib-maven-plugin</artifactId>
  <version>0.9.0</version>
  <configuration>
    <to>
      <image>gcr.io/my-project/image-built-with-jib</image>
    </to>
  </configuration>
</plugin>
# Builds to a container image registry.
$ mvn compile jib:build
# Builds to a Docker daemon.
$ mvn compile jib:dockerBuild

请参阅jib-maven-plugin文档

摇篮摇臂

plugins {
  id 'com.google.cloud.tools.jib' version '0.9.0'
}
jib.to.image = 'gcr.io/my-project/image-built-with-jib'
# Builds to a container image registry.
$ gradle jib
# Builds to a Docker daemon.
$ gradle jibDockerBuild

请参阅jib-gradle-plugin文档

但是,必须记住,如果要构建私有注册表,则应确保为Jib配置注册表的凭据