打包 OCI 映象

該外掛可以使用 Cloud Native Buildpacks (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-imagebuild-image-no-fork 目標。
雖然構建包從 可執行歸檔 執行,但沒有必要首先執行 repackage 目標,因為可執行歸檔在必要時會自動建立。當 build-image 重新打包應用程式時,它會應用與 repackage 目標相同的設定,即可以使用其中一個排除選項排除依賴項。spring-boot-devtoolsspring-boot-docker-compose 模組預設自動排除(您可以使用 excludeDevtoolsexcludeDockerCompose 屬性控制此行為)。

Docker Daemon

build-image 目標需要訪問 Docker daemon。該目標將檢查本地 Docker CLI 配置檔案 以確定當前的 上下文,並使用上下文連線資訊與 Docker daemon 通訊。如果無法確定當前上下文或上下文沒有連線資訊,則該目標將使用預設的本地連線。這適用於所有受支援平臺上的 Docker Engine,無需配置。

可以設定環境變數來配置 build-image 目標以使用替代的本地或遠端連線。下表顯示了環境變數及其值

環境變數 描述

DOCKER_CONFIG

用於確定當前上下文的 Docker CLI 配置檔案 的位置(預設為 $HOME/.docker

DOCKER_CONTEXT

應從 Docker CLI 配置檔案中檢索主機資訊的 上下文 名稱(覆蓋 DOCKER_HOST

DOCKER_HOST

包含 Docker daemon 主機和埠的 URL - 例如 tcp://192.168.99.100:2376

DOCKER_TLS_VERIFY

設定為 1 時啟用安全的 HTTPS 協議(可選)

DOCKER_CERT_PATH

HTTPS 證書和金鑰檔案的路徑(如果 DOCKER_TLS_VERIFY=1,則必需,否則忽略)

Docker daemon 連線資訊也可以透過外掛配置中的 docker 引數提供。下表總結了可用引數

引數 描述

context

應從 Docker CLI 配置檔案 中檢索主機資訊的 上下文 名稱

host

包含 Docker daemon 主機和埠的 URL - 例如 tcp://192.168.99.100:2376

tlsVerify

設定為 true 時啟用安全的 HTTPS 協議(可選)

certPath

HTTPS 證書和金鑰檔案的路徑(如果 tlsVerifytrue,則必需,否則忽略)

bindHostToBuilder

true 時,host 屬性的值將提供給為 CNB 構建器建立的容器(可選)

有關更多詳細資訊,另請參閱 示例

Docker Registry

如果 builderrunImage 引數指定的 Docker 映象儲存在需要身份驗證的私有 Docker 映象倉庫中,則可以使用 docker.builderRegistry 引數提供身份驗證憑據。

如果生成的 Docker 映象要釋出到 Docker 映象倉庫,則可以使用 docker.publishRegistry 引數提供身份驗證憑據。

引數用於使用者身份驗證或身份令牌身份驗證。請查閱所用 Docker 倉庫的文件,以獲取有關支援的身份驗證方法的更多資訊。

下表總結了 docker.builderRegistrydocker.publishRegistry 的可用引數

引數 描述

username

Docker 映象倉庫使用者的使用者名稱。使用者身份驗證必需。

password

Docker 映象倉庫使用者的密碼。使用者身份驗證必需。

url

Docker 映象倉庫的地址。使用者身份驗證可選。

email

Docker 映象倉庫使用者的電子郵件地址。使用者身份驗證可選。

token

Docker 映象倉庫使用者的身份令牌。令牌身份驗證必需。

有關更多詳細資訊,另請參閱 示例

如果未提供憑據,外掛將讀取使用者的現有 Docker 配置檔案(通常位於 $HOME/.docker/config.json)以確定身份驗證方法。使用這些方法,外掛嘗試為請求的映象提供身份驗證憑據。

該外掛支援以下身份驗證方法

  • 憑據助手:Docker 配置檔案中配置的外部工具,用於為特定倉庫提供憑據。例如,像 osxkeychainecr-login 這樣的工具處理某些倉庫的身份驗證。

  • 憑據儲存:一種預設的後備機制,用於安全地儲存和檢索憑據(例如,Docker Desktop 的 desktop)。

  • 靜態憑據:直接儲存在 Docker 配置檔案 auths 部分下的憑據。

映象自定義

外掛呼叫 構建器 來協調映象的生成。構建器包含多個 構建包,可以檢查應用程式以影響生成的映象。預設情況下,外掛選擇一個構建器映象。生成的映象名稱從專案屬性中推斷。

image 引數允許配置構建器及其應如何操作專案。下表總結了可用引數及其預設值

引數 / (使用者屬性) 描述 預設值

builder
(spring-boot.build-image.builder)

要使用的構建器映象的名稱。

paketobuildpacks/builder-noble-java-tiny:latest

trustBuilder
(spring-boot.build-image.trustBuilder)

是否將構建器視為 受信任的

如果構建器是 paketobuildpacks/builder-noble-java-tinypaketobuildpacks/builder-jammy-java-tinypaketobuildpacks/builder-jammy-tinypaketobuildpacks/builder-jammy-basepaketobuildpacks/builder-jammy-fullpaketobuildpacks/builder-jammy-buildpackless-tinypaketobuildpacks/builder-jammy-buildpackless-basepaketobuildpacks/builder-jammy-buildpackless-fullgcr.io/buildpacks/builderheroku/builder 中的一個,則為 true;否則為 false

imagePlatform
(spring-boot.build-image.imagePlatform)

拉取的任何構建器、執行和構建包映象的平臺(作業系統和架構)。必須採用 OS[/architecture[/variant]] 的形式,例如 linux/amd64linux/arm64linux/arm/v5。請參閱所用構建器的文件以確定可用的映象 OS 和架構選項。

無預設值,表示應使用主機機器的平臺。

runImage
(spring-boot.build-image.runImage)

要使用的執行映象的名稱。

無預設值,表示應使用 Builder 元資料中指定的執行映象。

name
(spring-boot.build-image.imageName)

生成的映象的 映象名稱

docker.io/library/
${project.artifactId}:${project.version}

pullPolicy
(spring-boot.build-image.pullPolicy)

用於確定何時從倉庫拉取構建器和執行映象的 策略。可接受的值為 ALWAYSNEVERIF_NOT_PRESENT

ALWAYS

env

應傳遞給構建器的環境變數。

buildpacks

構建器在構建映象時應使用的構建包。只使用指定的構建包,覆蓋構建器中包含的預設構建包。構建包引用必須採用以下形式之一

  • 構建器中的構建包 - [urn:cnb:builder:]<buildpack ID>[@<version>]

  • 檔案系統上目錄中的構建包 - [file://]<path>

  • 檔案系統上 gzipped tar (.tgz) 檔案中的構建包 - [file://]<path>/<file name>

  • OCI 映象中的構建包 - [docker://]<host>/<repo>[:<tag>][@<digest>]

無,表示構建器應使用其中包含的構建包。

bindings

構建映象時應掛載到構建器容器的 卷繫結掛載。在建立構建器容器時,繫結將未經解析和驗證地傳遞給 Docker。繫結必須採用以下形式之一

  • <主機源路徑>:<容器目標路徑>[:<選項>]

  • <主機卷名稱>:<容器目標路徑>[:<選項>]

其中 <options> 可以包含

  • ro 將卷掛載為容器中的只讀

  • rw 將卷掛載為容器中的可讀寫

  • volume-opt=key=value 指定由選項名稱及其值組成的鍵值對

network + (spring-boot.build-image.network)

構建器容器將配置使用的 網路驅動程式。提供的值在建立構建器容器時未經驗證地傳遞給 Docker。

cleanCache + (spring-boot.build-image.cleanCache)

是否在構建前清理快取。

verboseLogging

啟用構建器操作的詳細日誌記錄。

publish + (spring-boot.build-image.publish)

是否將生成的映象釋出到 Docker 倉庫。

tags

要應用於生成的映象的一個或多個附加標籤。提供給 tags 選項的值應為完整的映象引用。有關更多詳細資訊,請參閱 標籤部分

buildWorkspace

構建器和構建包在映象構建過程中儲存檔案的臨時工作區。該值可以是命名卷或繫結掛載位置。

Docker daemon 中的命名卷,其名稱源自映象名稱。

buildCache

包含構建包建立並由映象構建過程使用的層的快取。該值可以是命名卷或繫結掛載位置。

Docker daemon 中的命名卷,其名稱源自映象名稱。

launchCache

包含構建包建立並由映象啟動過程使用的層的快取。該值可以是命名卷或繫結掛載位置。

Docker daemon 中的命名卷,其名稱源自映象名稱。

createdDate
(spring-boot.build-image.createdDate)

將用於設定生成映象元資料中 Created 欄位的日期。該值必須是 ISO 8601 瞬時格式的字串,或者 now 用於使用當前日期和時間。

固定日期,啟用 構建可重現性

applicationDirectory
(spring-boot.build-image.applicationDirectory)

應用程式內容將上傳到構建器映象中的目錄路徑。應用程式內容也將在生成的映象中的此位置。

/workspace

securityOptions

將應用於構建器容器的 安全選項,以字串值陣列的形式提供

Linux 和 macOS 上為 ["label=disable"],Windows 上為 []

外掛使用編譯器的外掛配置或 maven.compiler.target 屬性檢測專案的目標 Java 相容性。當使用預設的 Paketo 構建器和構建包時,外掛會指示構建包安裝相同的 Java 版本。您可以根據 構建器配置 示例所示覆蓋此行為。

有關更多詳細資訊,另請參閱 示例

標籤格式

提供給 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 將按原樣使用

spring-boot:build-image

org.springframework.boot:spring-boot-maven-plugin:4.0.0

使用構建包將應用程式打包成 OCI 映象,分叉生命週期以確保 package 已執行。此目標適用於命令列呼叫。如果您需要在構建中配置目標 execution,請改用 build-image-no-fork

必需引數

名稱 型別 預設值

sourceDirectory

檔案

${project.build.directory}

可選引數

名稱 型別 預設值

applicationDirectory

字串

classifier

字串

cleanCache

布林值

createdDate

字串

docker

Docker

excludeDevtools

布林值

true

excludeDockerCompose

布林值

true

excludeGroupIds

字串

excludes

List

image

Image

imageBuilder

字串

imageName

字串

imagePlatform

字串

includeOptional

布林值

includeSystemScope

布林值

includeTools

布林值

true

includes

List

layers

Layers

layout

LayoutType

layoutFactory

LayoutFactory

mainClass

字串

network

字串

publish

布林值

pullPolicy

PullPolicy

runImage

字串

skip

布林值

trustBuilder

布林值

引數詳情

applicationDirectory

Image#applicationDirectory 的別名,用於支援透過命令列屬性進行配置。

名稱

applicationDirectory

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.applicationDirectory

3.1.0

classifier

查詢源歸檔時使用的分類器。

名稱

classifier

型別

java.lang.String

預設值

使用者屬性

2.3.0

cleanCache

Image#cleanCache 的別名,用於支援透過命令列屬性進行配置。

名稱

cleanCache

型別

java.lang.Boolean

預設值

使用者屬性

spring-boot.build-image.cleanCache

2.4.0

createdDate

Image#createdDate 的別名,用於支援透過命令列屬性進行配置。

名稱

createdDate

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.createdDate

3.1.0

docker

Docker 配置選項。

名稱

docker

型別

org.springframework.boot.maven.Docker

預設值

使用者屬性

2.4.0

excludeDevtools

從重新打包的歸檔中排除 Spring Boot devtools。

名稱

excludeDevtools

型別

布林值

預設值

true

使用者屬性

spring-boot.repackage.excludeDevtools

1.3.0

excludeDockerCompose

從重新打包的歸檔中排除 Spring Boot 開發服務。

名稱

excludeDockerCompose

型別

布林值

預設值

true

使用者屬性

spring-boot.repackage.excludeDockerCompose

3.1.0

excludeGroupIds

要排除的 groupId 名稱的逗號分隔列表(精確匹配)。

名稱

excludeGroupIds

型別

java.lang.String

預設值

使用者屬性

spring-boot.excludeGroupIds

1.1.0

excludes

要排除的 artifact 定義集合。Exclude 元素定義了強制的 groupIdartifactId 元件以及可選的 classifier 元件。當配置為屬性時,值應以逗號分隔,元件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier

名稱

excludes

型別

java.util.List

預設值

使用者屬性

spring-boot.excludes

1.1.0

image

映象配置,包含 builderrunImagenameenvcleanCacheverboseLoggingpullPolicypublish 選項。

名稱

image

型別

org.springframework.boot.maven.Image

預設值

使用者屬性

2.3.0

imageBuilder

Image#builder 的別名,用於支援透過命令列屬性進行配置。

名稱

imageBuilder

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.builder

2.3.0

imageName

Image#name 的別名,用於支援透過命令列屬性進行配置。

名稱

imageName

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.imageName

2.3.0

imagePlatform

Image#imagePlatform 的別名,用於支援透過命令列屬性進行配置。

名稱

imagePlatform

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.imagePlatform

3.4.0

includeOptional

包含可選依賴項。

名稱

includeOptional

型別

布林值

預設值

使用者屬性

3.5.7

includeSystemScope

包含系統範圍依賴項。

名稱

includeSystemScope

型別

布林值

預設值

使用者屬性

1.4.0

includeTools

包含 JAR 工具。

名稱

includeTools

型別

布林值

預設值

true

使用者屬性

3.3.0

includes

要包含的 artifact 定義集合。Include 元素定義了強制的 groupIdartifactId 元件以及可選的 classifier 元件。當配置為屬性時,值應以逗號分隔,元件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier

名稱

includes

型別

java.util.List

預設值

使用者屬性

spring-boot.includes

1.2.0

layers

層配置,包含停用層建立、排除層工具 jar 和提供自定義層配置檔案的選項。

名稱

layers

型別

org.springframework.boot.maven.Layers

預設值

使用者屬性

2.3.0

layout

歸檔型別(對應於依賴項在其中佈局的方式)。可能的值為 JARWARZIPDIRNONE。預設為根據歸檔型別猜測。

名稱

layout

型別

org.springframework.boot.maven.AbstractPackagerMojo$LayoutType

預設值

使用者屬性

2.3.11

layoutFactory

如果未設定顯式佈局,將用於建立可執行歸檔的佈局工廠。第三方可以提供替代佈局實現。

名稱

layoutFactory

型別

org.springframework.boot.loader.tools.LayoutFactory

預設值

使用者屬性

2.3.11

mainClass

主類的名稱。如果未指定,則將使用找到的第一個包含 main 方法的已編譯類。

名稱

mainClass

型別

java.lang.String

預設值

使用者屬性

1.0.0

network

Image#network 的別名,用於支援透過命令列屬性進行配置。

名稱

network

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.network

2.6.0

publish

Image#publish 的別名,用於支援透過命令列屬性進行配置。

名稱

publish

型別

java.lang.Boolean

預設值

使用者屬性

spring-boot.build-image.publish

pullPolicy

Image#pullPolicy 的別名,用於支援透過命令列屬性進行配置。

名稱

pullPolicy

型別

org.springframework.boot.buildpack.platform.build.PullPolicy

預設值

使用者屬性

spring-boot.build-image.pullPolicy

runImage

Image#runImage 的別名,用於支援透過命令列屬性進行配置。

名稱

runImage

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.runImage

2.3.1

skip

跳過執行。

名稱

skip

型別

布林值

預設值

使用者屬性

spring-boot.build-image.skip

2.3.0

sourceDirectory

包含源歸檔的目錄。

名稱

sourceDirectory

型別

java.io.File

預設值

${project.build.directory}

使用者屬性

2.3.0

trustBuilder

Image#trustBuilder 的別名,用於支援透過命令列屬性進行配置。

名稱

trustBuilder

型別

java.lang.Boolean

預設值

使用者屬性

spring-boot.build-image.trustBuilder

spring-boot:build-image-no-fork

org.springframework.boot:spring-boot-maven-plugin:4.0.0

使用構建包將應用程式打包成 OCI 映象,但不分叉生命週期。在構建中配置目標 execution 時應使用此目標。要在命令列上呼叫此目標,請改用 build-image

必需引數

名稱 型別 預設值

sourceDirectory

檔案

${project.build.directory}

可選引數

名稱 型別 預設值

applicationDirectory

字串

classifier

字串

cleanCache

布林值

createdDate

字串

docker

Docker

excludeDevtools

布林值

true

excludeDockerCompose

布林值

true

excludeGroupIds

字串

excludes

List

image

Image

imageBuilder

字串

imageName

字串

imagePlatform

字串

includeOptional

布林值

includeSystemScope

布林值

includeTools

布林值

true

includes

List

layers

Layers

layout

LayoutType

layoutFactory

LayoutFactory

mainClass

字串

network

字串

publish

布林值

pullPolicy

PullPolicy

runImage

字串

skip

布林值

trustBuilder

布林值

引數詳情

applicationDirectory

Image#applicationDirectory 的別名,用於支援透過命令列屬性進行配置。

名稱

applicationDirectory

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.applicationDirectory

3.1.0

classifier

查詢源歸檔時使用的分類器。

名稱

classifier

型別

java.lang.String

預設值

使用者屬性

2.3.0

cleanCache

Image#cleanCache 的別名,用於支援透過命令列屬性進行配置。

名稱

cleanCache

型別

java.lang.Boolean

預設值

使用者屬性

spring-boot.build-image.cleanCache

2.4.0

createdDate

Image#createdDate 的別名,用於支援透過命令列屬性進行配置。

名稱

createdDate

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.createdDate

3.1.0

docker

Docker 配置選項。

名稱

docker

型別

org.springframework.boot.maven.Docker

預設值

使用者屬性

2.4.0

excludeDevtools

從重新打包的歸檔中排除 Spring Boot devtools。

名稱

excludeDevtools

型別

布林值

預設值

true

使用者屬性

spring-boot.repackage.excludeDevtools

1.3.0

excludeDockerCompose

從重新打包的歸檔中排除 Spring Boot 開發服務。

名稱

excludeDockerCompose

型別

布林值

預設值

true

使用者屬性

spring-boot.repackage.excludeDockerCompose

3.1.0

excludeGroupIds

要排除的 groupId 名稱的逗號分隔列表(精確匹配)。

名稱

excludeGroupIds

型別

java.lang.String

預設值

使用者屬性

spring-boot.excludeGroupIds

1.1.0

excludes

要排除的 artifact 定義集合。Exclude 元素定義了強制的 groupIdartifactId 元件以及可選的 classifier 元件。當配置為屬性時,值應以逗號分隔,元件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier

名稱

excludes

型別

java.util.List

預設值

使用者屬性

spring-boot.excludes

1.1.0

image

映象配置,包含 builderrunImagenameenvcleanCacheverboseLoggingpullPolicypublish 選項。

名稱

image

型別

org.springframework.boot.maven.Image

預設值

使用者屬性

2.3.0

imageBuilder

Image#builder 的別名,用於支援透過命令列屬性進行配置。

名稱

imageBuilder

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.builder

2.3.0

imageName

Image#name 的別名,用於支援透過命令列屬性進行配置。

名稱

imageName

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.imageName

2.3.0

imagePlatform

Image#imagePlatform 的別名,用於支援透過命令列屬性進行配置。

名稱

imagePlatform

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.imagePlatform

3.4.0

includeOptional

包含可選依賴項。

名稱

includeOptional

型別

布林值

預設值

使用者屬性

3.5.7

includeSystemScope

包含系統範圍依賴項。

名稱

includeSystemScope

型別

布林值

預設值

使用者屬性

1.4.0

includeTools

包含 JAR 工具。

名稱

includeTools

型別

布林值

預設值

true

使用者屬性

3.3.0

includes

要包含的 artifact 定義集合。Include 元素定義了強制的 groupIdartifactId 元件以及可選的 classifier 元件。當配置為屬性時,值應以逗號分隔,元件以冒號分隔:groupId:artifactId,groupId:artifactId:classifier

名稱

includes

型別

java.util.List

預設值

使用者屬性

spring-boot.includes

1.2.0

layers

層配置,包含停用層建立、排除層工具 jar 和提供自定義層配置檔案的選項。

名稱

layers

型別

org.springframework.boot.maven.Layers

預設值

使用者屬性

2.3.0

layout

歸檔型別(對應於依賴項在其中佈局的方式)。可能的值為 JARWARZIPDIRNONE。預設為根據歸檔型別猜測。

名稱

layout

型別

org.springframework.boot.maven.AbstractPackagerMojo$LayoutType

預設值

使用者屬性

2.3.11

layoutFactory

如果未設定顯式佈局,將用於建立可執行歸檔的佈局工廠。第三方可以提供替代佈局實現。

名稱

layoutFactory

型別

org.springframework.boot.loader.tools.LayoutFactory

預設值

使用者屬性

2.3.11

mainClass

主類的名稱。如果未指定,則將使用找到的第一個包含 main 方法的已編譯類。

名稱

mainClass

型別

java.lang.String

預設值

使用者屬性

1.0.0

network

Image#network 的別名,用於支援透過命令列屬性進行配置。

名稱

network

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.network

2.6.0

publish

Image#publish 的別名,用於支援透過命令列屬性進行配置。

名稱

publish

型別

java.lang.Boolean

預設值

使用者屬性

spring-boot.build-image.publish

pullPolicy

Image#pullPolicy 的別名,用於支援透過命令列屬性進行配置。

名稱

pullPolicy

型別

org.springframework.boot.buildpack.platform.build.PullPolicy

預設值

使用者屬性

spring-boot.build-image.pullPolicy

runImage

Image#runImage 的別名,用於支援透過命令列屬性進行配置。

名稱

runImage

型別

java.lang.String

預設值

使用者屬性

spring-boot.build-image.runImage

2.3.1

skip

跳過執行。

名稱

skip

型別

布林值

預設值

使用者屬性

spring-boot.build-image.skip

2.3.0

sourceDirectory

包含源歸檔的目錄。

名稱

sourceDirectory

型別

java.io.File

預設值

${project.build.directory}

使用者屬性

2.3.0

trustBuilder

Image#trustBuilder 的別名,用於支援透過命令列屬性進行配置。

名稱

trustBuilder

型別

java.lang.Boolean

預設值

使用者屬性

spring-boot.build-image.trustBuilder

示例

自定義映象構建器

如果您需要自定義用於建立映象的構建器或用於啟動已構建映象的執行映象,請按以下示例配置外掛

<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 屬性設定這些選項。

<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 daemon 執行的構建器與構建包下載工件的網路位置之間存在網路代理,則需要配置構建器使用該代理。當使用 Paketo 構建器時,可以透過設定 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 構建包透過設定 JAVA_TOOL_OPTIONS 環境變數 配置 JVM 執行時環境。可以修改構建包提供的 JAVA_TOOL_OPTIONS 值,以在應用程式映象在容器中啟動時自定義 JVM 執行時行為。

應儲存在映象中並應用於每次部署的環境變數修改可以按照 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>

自定義映象名稱

預設情況下,映象名稱是根據專案的 artifactIdversion 推斷出來的,例如 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 構建器中的構建包(如果構建器中只有一個與 buildpack-id 匹配的構建包,則可以省略版本)

包含構建包內容的目錄路徑(Windows 上不支援)

  • file:///path/to/buildpack/

  • /path/to/buildpack/

包含構建包內容的 gzipped 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…​

映象釋出

可以透過啟用 publish 選項將生成的映象釋出到 Docker 倉庫。

如果 Docker 倉庫需要身份驗證,可以使用 docker.publishRegistry 引數配置憑據。如果 Docker 倉庫不需要身份驗證,則可以省略 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>

構建器快取和工作區配置

CNB 構建器快取用於構建和啟動映象的層。預設情況下,這些快取作為命名卷儲存在 Docker daemon 中,其名稱源自目標映象的完整名稱。如果映象名稱頻繁更改,例如當專案版本用作映象名稱中的標籤時,快取可能會頻繁失效。

可以配置快取卷使用替代名稱,以更好地控制快取生命週期,如下例所示

<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 daemon 通訊,而不是預設的本地連線。

在 Linux 和 macOS 上,minikube 啟動後可以使用命令 eval $(minikube docker-env) 設定環境變數。

也可以透過提供類似於以下示例中所示的連線詳細資訊來配置外掛使用 minikube daemon

<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>
安裝 colima CLI 後,可以使用命令 podman info --format='{{.Host.RemoteSocket.Path}}' 獲取此示例中所示的 docker.host 配置屬性的值。

Colima 的 Docker 配置

外掛可以與 Colima 提供的 Docker daemon 通訊。可以使用以下命令設定 DOCKER_HOST 環境變數

$ export DOCKER_HOST=$(docker context inspect colima -f '{{.Endpoints.docker.Host}}')

也可以透過提供類似於以下示例中所示的連線詳細資訊來配置外掛使用 Colima daemon

<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>
© . This site is unofficial and not affiliated with VMware.