jib-maven-plugin

容器化你的 Maven 项目

Jib 是一个用于给你的 Java 应用构建 Docker 或 OCI 镜像的 Maven 插件。

需要 Gradle 插件,请查看 jib-gradle-plugin 项目

关于本项目的信息,请查看 Jib 项目 README

起步

你可以用单个命令很容易地容器化你的应用:

mvn compile com.google.cloud.tools:jib-maven-plugin:1.4.0:build -Dimage=<MY IMAGE>

这会给你的应用构建一个容器镜像,并将它推送到某个容器 registry。 如果你遇到授权问题,请查看授权方法

要从 Docker daemon 进行构建,使用:

mvn compile com.google.cloud.tools:jib-maven-plugin:1.4.0:dockerBuild

如果你需要将 Jib 设置为你的 Maven 构建的一部分,可以遵循以下指导。

设置

在你的 Maven Java 项目中,给 pom.xml 添加该插件:

<project>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <version>1.4.0</version>
        <configuration>
          <to>
            <image>myimage</image>
          </to>
        </configuration>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

配置

通过设置要推送的镜像来配置该插件:

使用 Google Container Registry (GCR)...

确保拥有 docker-credential-gcr 命令行工具。 Jib 自动使用 docker-credential-gcr 来获取凭证。 详见 授权方法 来查看其它授权方式。

如,要构建 gcr.io/my-gcp-project/my-app,其配置将是:

<configuration>
  <to>
    <image>gcr.io/my-gcp-project/my-app</image>
  </to>
</configuration>

使用 Amazon Elastic Container Registry (ECR)...

确保拥有 docker-credential-ecr-login 命令行工具。 Jib 自动使用 docker-credential-ecr-login 来获取凭证。 详见 授权方法 来查看其它授权方式。

如,要构建 aws_account_id.dkr.ecr.region.amazonaws.com/my-app,其配置将是:

<configuration>
  <to>
    <image>aws_account_id.dkr.ecr.region.amazonaws.com/my-app</image>
  </to>
</configuration>

使用 Docker Hub Registry ...

确保拥有 docker-credential-helper。 如在 maxOS 上,其 credential helper 将是 docker-credential-osxkeychain。 详见 授权方法 来查看其它授权方式。

如,要构建 my-docker-id/my-app,其配置将是:

<configuration>
  <to>
    <image>docker.io/my-docker-id/my-app</image>
  </to>
</configuration>

使用 Azure Container Registry (ACR)...

确保拥有 ACR Docker Credential Helper。 如,在 Windows 上,其 credential helper 将是 docker-credential-acr-windows 。 详见 授权方法 来查看其它授权方式。

如,要构建 my_acr_name.azurecr.io/my-app,其配置将是:

<configuration>
  <to>
    <image>my_acr_name.azurecr.io/my-app</image>
  </to>
</configuration>

构建镜像

通过以下命令构建容器镜像:

mvn compile jib:build

后续的构建将会比初始构建快得多。

还有问题?可以 提 Issue 给我们,也可以在 Gitter 上联系我们,或者在 Jib 用户论坛 发帖子。

构建到 Docker daemon

Jib 也可以直接向 Docker daemon 构建镜像。它会使用 docker 命令行,并且需要 docker 存在于你的 PATH 中。

mvn compile jib:dockerBuild

如果你使用 minikube 的远程 Docker daemon,请确保 设置了正确的环境变量 来指向该远端 daemon。

eval $(minikube docker-env)
mvn compile jib:dockerBuild

或者,你可以在 Jib 配置中设置环境变量。查看 dockerClient 中更多配置项。

构建一个镜像 tarball

你可以构建并将镜像打成 tarball 到硬盘上:

mvn compile jib:buildTar

这会构建并将镜像保存到 target/jib-image.tar,然后你可以加载到 docker 中:

docker load --input target/jib-image.tar

绑定到生命周期

你可以将 jib:build 绑定到某个 Maven 生命周期,如 package。 在你的 jib-maven-plugin 定义中添加以下 execution :

<plugin>
  <groupId>com.google.cloud.tools</groupId>
  <artifactId>jib-maven-plugin</artifactId>
  ...
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>build</goal>
      </goals>
    </execution>
  </executions>
</plugin>

然后你就可以通过运行以下命令来构建容器镜像:

mvn package

额外的构建工件

作为镜像构建的一部分,Jib 也会将 镜像摘要 写到 target/jib-image.digest, 已经将 镜像ID 写到 target/jib-image.id

扩展用法

扩展配置项提供了定制镜像构建的额外选项

属性 类型 默认值 描述
to to 必需 配置应用所要构建到的目标镜像
from from 详见 from 配置应用所要构建自的基础镜像
container container 详见 container 配置镜像所运行的容器
extraDirectories extraDirectories 详见 extraDirectories 配置用于给镜像添加任意文件的目录
containerizingMode string exploded 如果设置为 packaged,则将构建在 ${project.build.directory}/${project.build.finalName}.jar(很多 JAR 构建插件将注册为主工件的 JAR 的默认存放位置,如 Maven JAR 插件) 到最终镜像中。如果设置为 exploded (默认值),则会独立地容器化 .class 文件和资源文件。
allowInsecureRegistries boolean false 如果设置为 true,Jib 会忽略 HTTPS 凭证错误并且在最后会回退到 HTTP 做最后努力。强烈推荐让该参数设置为默认的 false,因为 HTTP 交互是非加密的,并且在网络上是可见的,并且非安全的 HTTPS 并不比纯 HTTP 更好。如果要访问一个自签名凭证的 registry,可以将其凭证加入到你的 Java 运行时的 trusted keys 中 可能是启用该选项的一个替代方案。
skip boolean false 如果设置为 true,Jib 执行会被跳过(对多模块项目有用)。这也可以通过 -Djib.skip 命令行选项来指定。

from 是一个带有以下属性的对象:

属性 类型 默认值 描述
image string gcr.io/distroless/java 用作基础镜像的镜像引用
auth auth None 直接指定凭证(是 credHelper 的替代方案)
credHelper string None 指定一个 credential helper 来给拉取基本镜像授权。该参数可以配置为到 credential helper 可执行文件的绝对路径,或者作为一个 credential helper 后缀(跟随 docker-credential-)

to 是一个带有以下属性的对象:

属性 类型 默认值 描述
image string Required 用作目标镜像的镜像引用。它也可以通过 -Dimage 命令行参数来指定。
auth auth None 直接指定凭证(是 credHelper 的替代方案)
credHelper string None 指定一个 credential helper 来给推送目标镜像授权。该参数可以配置为到 credential helper 可执行文件的绝对路径,或者作为一个 credential helper 后缀(跟随 docker-credential-)
tags list None 要推送的额外的 tags

auth 是一个带有以下属性的对象(详见 使用特定凭证):

属性 类型
username String
password String

container 是一个带有以下属性的对象:

属性 类型 默认值 描述
appRoot string /app 容器中应用内容存放的根目录。对希望采用不同的 Servlet 引擎基础镜像 WAR 包项目非常有用,它可以指定哪里存放展开的 WAR 内容;详见 WAR 使用 示例
args list None 添加到容器启动命令行后的额外参数(类似 Docker 的 CMD 指令和 ENTRYPOINT 的关系)。在你没有设置自定义 entrypoint 的默认情况下,该参数就是你的应用的 main 方法的参数。
entrypoint list None

系统属性

示例

添加任意文件到镜像中

授权方法

使用 Docker Credentail Helpers

使用特定凭证

WAR 项目

常见问题(FAQ)

社区