此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1! |
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1! |
该插件可以使用云原生 Buildpack (CNB) 从 jar 或 war 文件创建 OCI 映像。
可以使用目标在命令行上生成图像。
这可确保在创建映像之前包生命周期已运行。build-image
出于安全原因,映像以非 root 用户身份构建和运行。 有关详细信息,请参阅 CNB 规范。 |
最简单的入门方法是在项目上调用。
每当调用阶段时,都可以自动创建映像,如以下示例所示:mvn spring-boot:build-image
package
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-image-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
在将目标绑定到包生命周期时使用。
此目标类似于,但不会分叉生命周期以确保已运行。
在本节的其余部分,用于指代 或 目标。build-image-no-fork build-image package build-image build-image build-image-no-fork |
虽然构建包从可执行存档运行,但不必先执行目标,因为可执行存档是在必要时自动创建的。
当重新打包应用程序时,它会应用与目标相同的设置,即可以使用其中一个排除选项来排除依赖项。
默认情况下,会自动排除 和 模块(您可以使用 和 属性进行控制)。repackage build-image repackage spring-boot-devtools spring-boot-docker-compose excludeDevtools excludeDockerCompose |
出于安全原因,映像以非 root 用户身份构建和运行。 有关详细信息,请参阅 CNB 规范。 |
在将目标绑定到包生命周期时使用。
此目标类似于,但不会分叉生命周期以确保已运行。
在本节的其余部分,用于指代 或 目标。build-image-no-fork build-image package build-image build-image build-image-no-fork |
虽然构建包从可执行存档运行,但不必先执行目标,因为可执行存档是在必要时自动创建的。
当重新打包应用程序时,它会应用与目标相同的设置,即可以使用其中一个排除选项来排除依赖项。
默认情况下,会自动排除 和 模块(您可以使用 和 属性进行控制)。repackage build-image repackage spring-boot-devtools spring-boot-docker-compose excludeDevtools excludeDockerCompose |
Docker 守护程序
该目标需要访问 Docker 守护程序。
目标将检查本地 Docker CLI 配置文件以确定当前上下文,并使用上下文连接信息与 Docker 守护程序进行通信。
如果无法确定当前上下文或上下文没有连接信息,则目标将使用默认的本地连接。
这适用于所有受支持平台上的 Docker 引擎,无需配置。build-image
可以设置环境变量以配置使用备用本地或远程连接的目标。
下表显示了环境变量及其值:build-image
环境变量 | 描述 |
---|---|
DOCKER_CONFIG |
用于确定当前上下文的 Docker CLI 配置文件的位置(默认为 |
DOCKER_CONTEXT |
应用于从 Docker CLI 配置文件中检索主机信息的上下文的名称(覆盖 |
DOCKER_HOST |
包含 Docker 守护程序的主机和端口的 URL - 例如 |
DOCKER_TLS_VERIFY |
设置为(可选)时启用安全 HTTPS 协议 |
DOCKER_CERT_PATH |
HTTPS 的证书和密钥文件的路径(如果为必填项,则为必填项,否则忽略) |
Docker 守护进程连接信息也可以使用插件配置中的参数提供。
下表总结了可用参数:docker
参数 | 描述 |
---|---|
|
|
|
包含 Docker 守护程序的主机和端口的 URL - 例如 |
|
设置为(可选)时启用安全 HTTPS 协议 |
|
HTTPS 的证书和密钥文件的路径(如果为 ,则为必填项,否则忽略) |
|
当 时,该属性的值将提供给为 CNB 生成器创建的容器(可选) |
有关详细信息,另请参阅示例。
环境变量 | 描述 |
---|---|
DOCKER_CONFIG |
用于确定当前上下文的 Docker CLI 配置文件的位置(默认为 |
DOCKER_CONTEXT |
应用于从 Docker CLI 配置文件中检索主机信息的上下文的名称(覆盖 |
DOCKER_HOST |
包含 Docker 守护程序的主机和端口的 URL - 例如 |
DOCKER_TLS_VERIFY |
设置为(可选)时启用安全 HTTPS 协议 |
DOCKER_CERT_PATH |
HTTPS 的证书和密钥文件的路径(如果为必填项,则为必填项,否则忽略) |
参数 | 描述 |
---|---|
|
|
|
包含 Docker 守护程序的主机和端口的 URL - 例如 |
|
设置为(可选)时启用安全 HTTPS 协议 |
|
HTTPS 的证书和密钥文件的路径(如果为 ,则为必填项,否则忽略) |
|
当 时,该属性的值将提供给为 CNB 生成器创建的容器(可选) |
Docker 注册表
如果 或 参数指定的 Docker 镜像存储在需要身份验证的私有 Docker 镜像注册表中,则可以使用参数提供身份验证凭据。builder
runImage
docker.builderRegistry
如果要将生成的 Docker 镜像发布到 Docker 镜像注册表,则可以使用参数提供身份验证凭据。docker.publishRegistry
提供用户认证或身份令牌认证的参数。 有关支持的身份验证方法的更多信息,请参阅用于存储映像的 Docker 注册表的文档。
下表总结了 和 的可用参数:docker.builderRegistry
docker.publishRegistry
参数 | 描述 |
---|---|
|
Docker 映像注册表用户的用户名。用户身份验证是必需的。 |
|
Docker 映像注册表用户的密码。用户身份验证是必需的。 |
|
Docker 映像注册表的地址。对于用户身份验证是可选的。 |
|
Docker 映像注册表用户的电子邮件地址。对于用户身份验证是可选的。 |
|
Docker 映像注册表用户的身份令牌。令牌身份验证是必需的。 |
有关详细信息,另请参阅示例。
参数 | 描述 |
---|---|
|
Docker 映像注册表用户的用户名。用户身份验证是必需的。 |
|
Docker 映像注册表用户的密码。用户身份验证是必需的。 |
|
Docker 映像注册表的地址。对于用户身份验证是可选的。 |
|
Docker 映像注册表用户的电子邮件地址。对于用户身份验证是可选的。 |
|
Docker 映像注册表用户的身份令牌。令牌身份验证是必需的。 |
图像自定义
该参数允许配置构建器以及它应该如何在项目上运行。
下表汇总了可用参数及其默认值:image
参数 / (用户属性) | 描述 | 默认值 |
---|---|---|
|
要使用的 Builder 映像的名称。 |
|
|
要使用的运行映像的名称。 |
无默认值,表示应使用生成器元数据中指定的运行映像。 |
|
生成的图像的图像名称。 |
|
|
用于确定何时从注册表中拉取生成器和运行映像的策略。
可接受的值为 、 和 。 |
|
|
应传递给生成器的环境变量。 |
|
|
构建者在生成映像时应使用的构建包。 将仅使用指定的构建包,覆盖构建器中包含的默认构建包。 Buildpack 引用必须采用以下形式之一:
|
None,表示构建器应使用其中包含的构建包。 |
|
在生成映像时应装载到构建器容器的卷绑定挂载。 在创建生成器容器时,绑定将未经分析和验证地传递给 Docker。 绑定必须采用以下形式之一:
其中可以包含:
|
|
|
构建器容器将配置为使用的网络驱动程序。 在创建生成器容器时,提供的值将在未经验证的情况下传递给 Docker。 |
|
|
是否在构建之前清理缓存。 |
|
|
启用生成器操作的详细日志记录。 |
|
|
是否将生成的镜像发布到 Docker 注册表。 |
|
|
要应用于生成的图像的一个或多个附加标记。
提供给选项的值应为完整图像引用。
有关更多详细信息,请参阅标签部分。 |
|
|
构建器和构建包将用于在映像构建期间存储文件的临时工作区。 该值可以是命名卷或绑定挂载位置。 |
Docker 守护程序中的命名卷,其名称派生自映像名称。 |
|
包含由 buildpack 创建并由映像构建过程使用的图层的缓存。 该值可以是命名卷或绑定挂载位置。 |
Docker 守护程序中的命名卷,其名称派生自映像名称。 |
|
包含由构建包创建并由映像启动过程使用的图层的缓存。 该值可以是命名卷或绑定挂载位置。 |
Docker 守护程序中的命名卷,其名称派生自映像名称。 |
|
将用于在生成的图像的元数据中设置字段的日期。
该值必须是 ISO 8601 即时格式的字符串,或者使用当前日期和时间。 |
一个固定的日期,可实现构建的可重现性。 |
|
应用程序内容将在构建器映像中上载到的目录的路径。 应用程序内容也将位于生成的图像中的此位置。 |
|
|
将应用于构建器容器的安全选项,以字符串值数组的形式提供 |
|
该插件使用编译器的插件配置或属性检测项目的目标 Java 兼容性。
当使用默认的 Paketo 构建器和构建包时,插件会指示构建包安装相同的 Java 版本。
您可以覆盖此行为,如构建器配置示例中所示。maven.compiler.target |
有关详细信息,另请参阅示例。
标签格式
提供给选项的值应为完整图像引用。
接受的格式为 。tags
[domainHost:port/][path/]name[:tag][@digest]
如果缺少域,则默认为 。
如果缺少路径,则默认为 。
如果缺少标记,则默认为 。docker.io
library
latest
一些例子:
-
my-image
导致图像引用docker.io/library/my-image:latest
-
my-repository/my-image
导致docker.io/my-repository/my-image:latest
-
example.com/my-repository/my-image:1.0.0
将按原样使用
参数 / (用户属性) | 描述 | 默认值 |
---|---|---|
|
要使用的 Builder 映像的名称。 |
|
|
要使用的运行映像的名称。 |
无默认值,表示应使用生成器元数据中指定的运行映像。 |
|
生成的图像的图像名称。 |
|
|
用于确定何时从注册表中拉取生成器和运行映像的策略。
可接受的值为 、 和 。 |
|
|
应传递给生成器的环境变量。 |
|
|
构建者在生成映像时应使用的构建包。 将仅使用指定的构建包,覆盖构建器中包含的默认构建包。 Buildpack 引用必须采用以下形式之一:
|
None,表示构建器应使用其中包含的构建包。 |
|
在生成映像时应装载到构建器容器的卷绑定挂载。 在创建生成器容器时,绑定将未经分析和验证地传递给 Docker。 绑定必须采用以下形式之一:
其中可以包含:
|
|
|
构建器容器将配置为使用的网络驱动程序。 在创建生成器容器时,提供的值将在未经验证的情况下传递给 Docker。 |
|
|
是否在构建之前清理缓存。 |
|
|
启用生成器操作的详细日志记录。 |
|
|
是否将生成的镜像发布到 Docker 注册表。 |
|
|
要应用于生成的图像的一个或多个附加标记。
提供给选项的值应为完整图像引用。
有关更多详细信息,请参阅标签部分。 |
|
|
构建器和构建包将用于在映像构建期间存储文件的临时工作区。 该值可以是命名卷或绑定挂载位置。 |
Docker 守护程序中的命名卷,其名称派生自映像名称。 |
|
包含由 buildpack 创建并由映像构建过程使用的图层的缓存。 该值可以是命名卷或绑定挂载位置。 |
Docker 守护程序中的命名卷,其名称派生自映像名称。 |
|
包含由构建包创建并由映像启动过程使用的图层的缓存。 该值可以是命名卷或绑定挂载位置。 |
Docker 守护程序中的命名卷,其名称派生自映像名称。 |
|
将用于在生成的图像的元数据中设置字段的日期。
该值必须是 ISO 8601 即时格式的字符串,或者使用当前日期和时间。 |
一个固定的日期,可实现构建的可重现性。 |
|
应用程序内容将在构建器映像中上载到的目录的路径。 应用程序内容也将位于生成的图像中的此位置。 |
|
|
将应用于构建器容器的安全选项,以字符串值数组的形式提供 |
|
该插件使用编译器的插件配置或属性检测项目的目标 Java 兼容性。
当使用默认的 Paketo 构建器和构建包时,插件会指示构建包安装相同的 Java 版本。
您可以覆盖此行为,如构建器配置示例中所示。maven.compiler.target |
spring-boot:build-image
org.springframework.boot:spring-boot-maven-plugin:3.3.2-SNAPSHOT
使用 buildpack 将应用打包到 OCI 映像中,然后分叉生命周期以确保其运行。此目标适用于命令行调用。如果需要在生成中配置目标,请改用。package
execution
build-image-no-fork
可选参数
名字 | 类型 | 违约 |
---|---|---|
|
||
|
|
|
|
|
|
|
||
|
||
|
|
|
|
|
|
|
||
|
||
|
|
参数详细信息
excludeDevtools
从重新打包的存档中排除 Spring Boot devtools。
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
excludeDockerCompose
从重新打包的存档中排除 Spring Boot 开发服务。
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
excludeGroupIds
要排除的 groupId 名称的逗号分隔列表(完全匹配)。
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
excludes
要排除的项目定义的集合。该元素定义必需组件和组件以及可选组件。配置为属性时,值应以逗号分隔,并用冒号分隔的组件分隔:Exclude
groupId
artifactId
classifier
groupId:artifactId,groupId:artifactId:classifier
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
image
映像配置,包括 、 、 、 、 、 和 选项。builder
runImage
name
env
cleanCache
verboseLogging
pullPolicy
publish
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
includes
要包含的项目定义的集合。该元素定义必需组件和组件以及可选组件。配置为属性时,值应以逗号分隔,并用冒号分隔的组件分隔:Include
groupId
artifactId
classifier
groupId:artifactId,groupId:artifactId:classifier
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
layout
存档的类型(对应于依赖项在其中的布局方式)。可能的值为 、 、 、 。默认为基于存档类型的猜测。JAR
WAR
ZIP
DIR
NONE
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 | 类型 | 违约 |
---|---|---|
|
|
名字 | 类型 | 违约 |
---|---|---|
|
||
|
|
|
|
|
|
|
||
|
||
|
|
|
|
|
|
|
||
|
||
|
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
spring-boot:build-image-no-fork
org.springframework.boot:spring-boot-maven-plugin:3.3.2-SNAPSHOT
使用 buildpack 将应用打包到 OCI 映像中,但不分叉生命周期。在生成中配置目标时,应使用此目标。若要在命令行上调用目标,请改用。execution
build-image
可选参数
名字 | 类型 | 违约 |
---|---|---|
|
||
|
|
|
|
|
|
|
||
|
||
|
|
|
|
|
|
|
||
|
||
|
|
参数详细信息
excludeDevtools
从重新打包的存档中排除 Spring Boot devtools。
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
excludeDockerCompose
从重新打包的存档中排除 Spring Boot 开发服务。
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
excludeGroupIds
要排除的 groupId 名称的逗号分隔列表(完全匹配)。
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
excludes
要排除的项目定义的集合。该元素定义必需组件和组件以及可选组件。配置为属性时,值应以逗号分隔,并用冒号分隔的组件分隔:Exclude
groupId
artifactId
classifier
groupId:artifactId,groupId:artifactId:classifier
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
image
映像配置,包括 、 、 、 、 、 和 选项。builder
runImage
name
env
cleanCache
verboseLogging
pullPolicy
publish
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
includes
要包含的项目定义的集合。该元素定义必需组件和组件以及可选组件。配置为属性时,值应以逗号分隔,并用冒号分隔的组件分隔:Include
groupId
artifactId
classifier
groupId:artifactId,groupId:artifactId:classifier
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
layout
存档的类型(对应于依赖项在其中的布局方式)。可能的值为 、 、 、 。默认为基于存档类型的猜测。JAR
WAR
ZIP
DIR
NONE
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 | 类型 | 违约 |
---|---|---|
|
|
名字 | 类型 | 违约 |
---|---|---|
|
||
|
|
|
|
|
|
|
||
|
||
|
|
|
|
|
|
|
||
|
||
|
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
名字 |
|
---|---|
类型 |
|
默认值 |
|
User 属性 |
|
因为 |
|
例子
自定义映像生成器
如果您需要自定义用于创建镜像的构建器或用于启动构建镜像的运行镜像,请配置插件,如以下示例所示:
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<builder>mine/java-cnb-builder</builder>
<runImage>mine/java-cnb-run</runImage>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
此配置将使用具有名称和标记的构建器映像,以及命名和标记的运行映像。mine/java-cnb-builder
latest
mine/java-cnb-run
latest
也可以在命令行上指定构建器和运行映像,如以下示例所示:
$ mvn spring-boot:build-image -Dspring-boot.build-image.builder=mine/java-cnb-builder -Dspring-boot.build-image.runImage=mine/java-cnb-run
构建器配置
如果构建器使用环境变量公开配置选项,则可以使用属性设置这些选项。env
以下是在构建时配置 Paketo Java 构建包使用的 JVM 版本的示例:
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<env>
<BP_JVM_VERSION>17</BP_JVM_VERSION>
</env>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
如果生成器运行的 Docker 守护程序与生成包从中下载项目的网络位置之间存在网络代理,则需要将生成器配置为使用该代理。
使用 Paketo 构建器时,可以通过设置 and/or 环境变量来实现,如以下示例所示:HTTPS_PROXY
HTTP_PROXY
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<env>
<HTTP_PROXY>http://proxy.example.com</HTTP_PROXY>
<HTTPS_PROXY>https://proxy.example.com</HTTPS_PROXY>
</env>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
运行时 JVM 配置
Paketo Java 构建包通过设置环境变量来配置 JVM 运行时环境。
可以修改 buildpack 提供的值,以便在容器中启动应用程序映像时自定义 JVM 运行时行为。JAVA_TOOL_OPTIONS
JAVA_TOOL_OPTIONS
可以按照 Paketo 文档中的描述设置应存储在映像中并应用于每个部署的环境变量修改,并在以下示例中显示:
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<env>
<BPE_DELIM_JAVA_TOOL_OPTIONS xml:space="preserve"> </BPE_DELIM_JAVA_TOOL_OPTIONS>
<BPE_APPEND_JAVA_TOOL_OPTIONS>-XX:+HeapDumpOnOutOfMemoryError</BPE_APPEND_JAVA_TOOL_OPTIONS>
</env>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
自定义镜像名称
默认情况下,映像名称是从项目的 和 推断出来的,类似于 .
您可以控制该名称,如以下示例所示:artifactId
version
docker.io/library/${project.artifactId}:${project.version}
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<name>example.com/library/${project.artifactId}</name>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
此配置不提供显式标记,因此使用。
也可以指定标记,可以使用 ,构建中可用的任何属性或硬编码版本。latest ${project.version} |
也可以在命令行上指定映像名称,如以下示例所示:
$ mvn spring-boot:build-image -Dspring-boot.build-image.imageName=example.com/library/my-app:v1
构建包
默认情况下,构建器将使用构建器映像中包含的构建包,并按预定义的顺序应用它们。 可以提供一组替代的构建包来应用构建器中未包含的构建包,或更改包含的构建包的顺序。 当提供一个或多个构建包时,将仅应用指定的构建包。
下面的示例指示构建器使用打包在文件中的自定义构建包,后跟构建器中包含的构建包。.tgz
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<buildpacks>
<buildpack>file:///path/to/example-buildpack.tgz</buildpack>
<buildpack>urn:cnb:builder:paketo-buildpacks/java</buildpack>
</buildpacks>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
构建包可以在下面显示的任何形式中指定。
位于 CNB Builder 中的构建包(如果构建器中只有一个与 ...buildpack-id
-
urn:cnb:builder:buildpack-id
-
urn:cnb:builder:[email protected]
-
buildpack-id
包含构建包内容的目录的路径(Windows 不支持):
-
file:///path/to/buildpack/
-
/path/to/buildpack/
包含构建包内容的 gzip 压缩 tar 文件的路径:
-
file:///path/to/buildpack.tgz
-
/path/to/buildpack.tgz
包含打包构建包的 OCI 映像:
-
docker://example/buildpack
-
docker:///example/buildpack:latest
-
docker:///example/buildpack@sha256:45b23dee08…
-
example/buildpack
-
example/buildpack:latest
-
example/buildpack@sha256:45b23dee08…
图像发布
通过启用选项,可以将生成的映像发布到 Docker 注册表。publish
如果 Docker 注册表需要身份验证,则可以使用参数配置凭据。
如果 Docker 注册表不需要身份验证,则可以省略配置。docker.publishRegistry
docker.publishRegistry
映像将发布到的注册表由映像名称的注册表部分确定(在这些示例中为)。
如果配置了凭据并包含参数,则此值将传递给注册表,但不用于确定发布注册表位置。docker.example.com docker.publishRegistry url |
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<name>docker.example.com/library/${project.artifactId}</name>
<publish>true</publish>
</image>
<docker>
<publishRegistry>
<username>user</username>
<password>secret</password>
</publishRegistry>
</docker>
</configuration>
</plugin>
</plugins>
</build>
</project>
也可以在命令行上指定该选项,如以下示例所示:publish
$ mvn spring-boot:build-image -Dspring-boot.build-image.imageName=docker.example.com/library/my-app:v1 -Dspring-boot.build-image.publish=true
在命令行上使用该选项进行身份验证时,可以使用属性提供凭据,如下例所示:publish
$ mvn spring-boot:build-image \
-Ddocker.publishRegistry.username=user \
-Ddocker.publishRegistry.password=secret \
-Ddocker.publishRegistry.url=docker.example.com \
-Dspring-boot.build-image.publish=true \
-Dspring-boot.build-image.imageName=docker.example.com/library/my-app:v1
并引用 XML 配置中的属性:
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<docker>
<publishRegistry>
<url>${docker.publishRegistry.url}</url>
<username>${docker.publishRegistry.username}</username>
<password>${docker.publishRegistry.password}</password>
</publishRegistry>
</docker>
</configuration>
</plugin>
</plugins>
</build>
</project>
Builder 缓存和工作区配置
CNB 构建器缓存在构建和启动映像时使用的图层。 默认情况下,这些缓存作为命名卷存储在 Docker 守护程序中,其名称派生自目标映像的全名。 如果映像名称频繁更改,例如,当项目版本用作映像名称中的标记时,则缓存可能会经常失效。
缓存卷可以配置为使用备用名称,以便更好地控制缓存生命周期,如以下示例所示:
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<buildCache>
<volume>
<name>cache-${project.artifactId}.build</name>
</volume>
</buildCache>
<launchCache>
<volume>
<name>cache-${project.artifactId}.launch</name>
</volume>
</launchCache>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
构建器和构建包在映像构建过程中需要一个位置来存储临时文件。 默认情况下,此临时生成工作区存储在命名卷中。
可以将缓存和生成工作区配置为使用绑定装载而不是命名卷,如以下示例所示:
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<buildWorkspace>
<bind>
<source>/tmp/cache-${project.artifactId}.work</source>
</bind>
</buildWorkspace>
<buildCache>
<bind>
<source>/tmp/cache-${project.artifactId}.build</source>
</bind>
</buildCache>
<launchCache>
<bind>
<source>/tmp/cache-${project.artifactId}.launch</source>
</bind>
</launchCache>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
Docker 配置
minikube 的 Docker 配置
该插件可以与 minikube 提供的 Docker 守护进程进行通信,而不是默认的本地连接。
在 Linux 和 macOS 上,可以在启动 minikube 后使用命令设置环境变量。eval $(minikube docker-env)
该插件还可以通过提供类似于以下示例中所示的连接详细信息来配置为使用 minikube 守护程序:
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<docker>
<host>tcp://192.168.99.100:2376</host>
<tlsVerify>true</tlsVerify>
<certPath>/home/user/.minikube/certs</certPath>
</docker>
</configuration>
</plugin>
</plugins>
</build>
</project>
podman 的 Docker 配置
该插件可以与 podman 容器引擎进行通信。
通过提供类似于以下示例中所示的连接详细信息,可以将插件配置为使用 podman 本地连接:
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<docker>
<host>unix:///run/user/1000/podman/podman.sock</host>
<bindHostToBuilder>true</bindHostToBuilder>
</docker>
</configuration>
</plugin>
</plugins>
</build>
</project>
安装 CLI 后,该命令可用于获取此示例中所示的配置属性的值。colima podman info --format='{{.Host.RemoteSocket.Path}}' docker.host |
Colima 的 Docker 配置
该插件可以与 Colima 提供的 Docker 守护进程进行通信。
可以使用命令设置环境变量DOCKER_HOST
export DOCKER_HOST=$(docker context inspect colima -f '{{.Endpoints.docker.Host}}').
该插件还可以通过提供类似于以下示例中所示的连接详细信息来配置为使用 Colima 守护程序:
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<docker>
<host>unix:///${user.home}/.colima/docker.sock</host>
</docker>
</configuration>
</plugin>
</plugins>
</build>
</project>
用于身份验证的 Docker 配置
如果生成器或运行映像存储在支持用户身份验证的专用 Docker 注册表中,则可以使用参数提供身份验证详细信息,如以下示例所示:docker.builderRegistry
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<docker>
<builderRegistry>
<username>user</username>
<password>secret</password>
<url>https://docker.example.com/v1/</url>
<email>[email protected]</email>
</builderRegistry>
</docker>
</configuration>
</plugin>
</plugins>
</build>
</project>
如果生成器或运行映像存储在支持令牌身份验证的专用 Docker 注册表中,则可以使用参数提供令牌值,如以下示例所示:docker.builderRegistry
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<docker>
<builderRegistry>
<token>9cbaf023786cd7...</token>
</builderRegistry>
</docker>
</configuration>
</plugin>
</plugins>
</build>
</project>
此配置不提供显式标记,因此使用。
也可以指定标记,可以使用 ,构建中可用的任何属性或硬编码版本。latest ${project.version} |
映像将发布到的注册表由映像名称的注册表部分确定(在这些示例中为)。
如果配置了凭据并包含参数,则此值将传递给注册表,但不用于确定发布注册表位置。docker.example.com docker.publishRegistry url |
安装 CLI 后,该命令可用于获取此示例中所示的配置属性的值。colima podman info --format='{{.Host.RemoteSocket.Path}}' docker.host |