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