前言
jib-maven-plugin是谷歌出品的为您的Java应用程序构建Docker和OCI镜像的Maven插件。
申请Docker容器
这里已部署到Docker为例介绍,关于Docker容器的申请,可以 点击
maven中使用
通过在pom.xml文件加入插件引入spring boot工程
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.7.0</version>
<configuration>
<!--from节点用来设置镜像的基础镜像,相当于Docerkfile中的FROM关键字-->
<from>
<!--从openjdk:alpine的基础上建造-->
<image>openjdk:alpine</image>
</from>
<to>
<!--镜像名称和tag-->
<image>docker.io/iamlisen/dockerjib</image>
<tags>
<tag>v1</tag>
</tags>
<auth>
<username>用户名</username>
<password>密码</password>
</auth>
</to>
<!--容器相关的属性-->
<container>
<!--jvm内存参数-->
<jvmFlags>
<jvmFlag>-Xms4g</jvmFlag>
<jvmFlag>-Xmx4g</jvmFlag>
</jvmFlags>
<!--要暴露的端口-->
<ports>
<port>8080</port>
</ports>
</container>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
参数解释
- 从docker-hub拉取openjdk:alpine镜像作为基础镜像
- 构建标识为your_image的镜像,tag列表为v1
- 容器启动时将通过java -Xms4g -Xmx4g
- 并且暴露出端口8080
- docker构建绑定到package生命周期
构建docker镜像
通过以下命令构建docker镜像
mvn compile jib:build
配置
通过将镜像设置为“推送”来配置插件:
使用谷歌容器
确保你有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>
使用亚马逊容器
确保你有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容器
确保你有一个 docker-credential-helper设置。例如,在macOS,凭证助手将是docker-credential-osxkeychain
。参阅其他认证的验证方法。
例如,为了构建镜像my-docker-id/my-app
,配置将是:
<configuration>
<to>
<image>registry.hub.docker.com/my-docker-id/my-app</image>
</to>
</configuration>
扩展
扩展选项提供额外的配置选项为定制镜像生成。
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
to | to | Required | 配置目标镜像以构建应用程序。 |
from | from | 查看from | 配置基础镜像以构建应用程序的顶部。 |
container | container | 查看container | 配置从镜像中运行的容器。 |
allowInsecureRegistries | boolean | false | 如果设置为true ,Jib忽略HTTPS证书错误,并可能退回HTTP作为最后的手段。强烈建议将这个参数设置为false ,因为HTTP通信是未加密的,并且对于网络上的其他人来说是可见的,并且不安全的HTTPS并不比普通的HTTP好。如果使用自签名证书访问注册表,则将证书添加到Java运行时的可信密钥可能是启用此选项的另一种选择。 |
skip | boolean | false | 如果设置为true ,则跳过Jib执行(对于多模块项目是有用的)。这也可以通过-Djib.skip 跳过命令行选项来指定。 |
useOnlyProjectCache | boolean | false | 如果设置为true ,Jib不会在不同的Maven项目之间共享缓存。 |
from
是具有以下属性的对象:
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
image | string | gcr.io/distroless/java | 基础的镜像参考。 |
auth | auth | None | 直接指定凭证。 |
credHelper | string | None | 证书助手的后缀,它可以对基础镜像进行身份验证(遵循docker-credential- )。 |
to
是具有以下属性的对象:
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
image | string | Required | 目标镜像的参考。这也可以通过-Dimage 命令行选项来指定。 |
auth | auth | None | 直接指定凭证。 |
credHelper | string | None | 证书助手的后缀,它可以对基础镜像进行身份验证(遵循docker-credential- )。 |
tags | list | None | 额外的标签推向 |
auth
是一个具有以下属性的对象(请参阅使用特定凭据):
属性 | 类型 | 描述 |
---|---|---|
username | string | 用户名 |
password | string | 密码 |
container
是具有以下属性的对象:
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
appRoot | string | /app | 容器上放置应用程序内容的根目录。 |
args | list | None | 默认的主方法参数来运行应用程序。 |
entrypoint | list | None | 启动容器的命令(类似于Docker的入口点指令)。如果设置,则忽略jvmFlags 和mainClass 。 |
environment | map | None | 键值对,用于设置容器上的环境变量(类似于Docker的Env指令)。 |
format | string | Docker | 使用OCI 构建OCI容器映像 |
jvmFlags | list | None | 运行应用程序时要传递给JVM的附加标志。 |
labels | map | None | 用于应用镜像元数据的键值对(类似于Docker的标签指令)。 |
mainClass | string | Inferred* | 主要类从应用程序启动。 |
ports | list | None | 容器在运行时暴露的端口(类似于Docker的公开指令)。 |
useCurrentTimestamp | boolean | false | 默认情况下,Jib擦除所有时间戳以保证再现性。如果这个参数设置为true ,Jib将把镜像的创建时间戳设置为构建时间,这将牺牲可再现性,以便能够容易地判断镜像何时创建。 |
您还可以使用connection/read
系统属性为注册表交互配置HTTP连接/读取超时,该属性通过命令行以毫秒为单位配置(缺省值是20000
;您还可以将其设置为0
用于无限超时):
mvn compile jib:build -Djib.httpTimeout=3000
多谢博主,解决问题!我的问题已经解决了,但是CDN镜像CSS文件的时候会出现权限报错,这个该怎么解决呢?