封裝 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 類似,但不 fork 生命週期以確保 package 已執行。在本節的其餘部分,build-image 用於指稱 build-imagebuild-image-no-fork 目標。
雖然 buildpack 從 可執行歸檔 執行,但不需要先執行 repackage 目標,因為可執行歸檔會在必要時自動建立。當 build-image 重新封裝應用程式時,它會套用與 repackage 目標相同的設定,也就是可以使用其中一個排除選項來排除依賴項。spring-boot-devtoolsspring-boot-docker-compose 模組預設會自動排除 (您可以使用 excludeDevtoolsexcludeDockerCompose 屬性來控制此行為)。

Docker Daemon

build-image 目標需要存取 Docker daemon。此目標將檢查本機 Docker CLI 組態檔案,以判斷目前的 context,並使用 context 連線資訊與 Docker daemon 通訊。如果無法判斷目前的 context,或 context 沒有連線資訊,則此目標將使用預設的本機連線。這適用於所有支援平台上的 Docker Engine,無需組態。

可以設定環境變數,以組態 build-image 目標以使用替代的本機或遠端連線。下表顯示環境變數及其值

環境變數 描述

DOCKER_CONFIG

Docker CLI 的位置 組態檔案,用於判斷目前的 context (預設為 $HOME/.docker)

DOCKER_CONTEXT

應使用的 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

應使用的 context 名稱,以從 Docker CLI 組態檔案 擷取主機資訊

host

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

tlsVerify

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

certPath

HTTPS 的憑證和金鑰檔案路徑 (如果 tlsVerifytrue 則為必要,否則會忽略)

bindHostToBuilder

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

如需更多詳細資訊,另請參閱範例

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 映像檔登錄使用者的身分識別權杖。權杖驗證為必要項目。

如需更多詳細資訊,另請參閱範例

映像檔自訂

此外掛程式會叫用 builder 來協調映像檔的產生。builder 包含多個 buildpack,這些 buildpack 可以檢查應用程式以影響產生的映像檔。預設情況下,此外掛程式會選擇 builder 映像檔。產生的映像檔名稱會從專案屬性中推斷出來。

image 參數允許組態 builder 及其應如何對專案運作。下表摘要說明可用的參數及其預設值

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

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

要使用的 Builder 映像檔名稱。

paketobuildpacks/builder-jammy-base:latest

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)

用於判斷何時從登錄檔提取 builder 和執行映像檔的 原則。可接受的值為 ALWAYSNEVERIF_NOT_PRESENT

ALWAYS

env

應傳遞至 builder 的環境變數。

buildpacks

builder 在建置映像檔時應使用的 Buildpack。只會使用指定的 buildpack,覆寫 builder 中包含的預設 buildpack。Buildpack 參考必須採用下列其中一種形式

  • Builder 中的 Buildpack - [urn:cnb:builder:]<buildpack ID>[@<version>]

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

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

  • OCI 映像檔中的 Buildpack - [docker://]<host>/<repo>[:<tag>][@<digest>]

無,表示 builder 應使用其中包含的 buildpack。

bindings

應在建置映像檔時掛載到 builder 容器的 磁碟區繫結掛載。繫結將在建立 builder 容器時,以未剖析和未驗證的方式傳遞至 Docker。繫結必須採用下列其中一種形式

  • <host 來源路徑>:<container 目的地路徑>[:<options>]

  • <host 磁碟區名稱>:<container 目的地路徑>[:<options>]

其中 <options> 可以包含

  • ro,將磁碟區以唯讀方式掛載在容器中

  • rw,將磁碟區以可讀寫方式掛載在容器中

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

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

網路驅動程式,builder 容器將組態為使用此驅動程式。提供的值將在建立 builder 容器時,以未驗證的方式傳遞至 Docker。

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

是否在建置前清除快取。

false

verboseLogging

啟用 builder 作業的詳細記錄。

false

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

是否將產生的映像檔發佈到 Docker 登錄檔。

false

tags

要套用至產生之映像檔的一個或多個額外標籤。提供給 tags 選項的值應為完整映像檔參考。如需更多詳細資訊,請參閱標籤章節

buildWorkspace

builder 和 buildpack 將用於在映像檔建置期間儲存檔案的暫時工作區。此值可以是具名磁碟區或繫結掛載位置。

Docker daemon 中的具名磁碟區,其名稱衍生自映像檔名稱。

buildCache

包含由 buildpack 建立且由映像檔建置程序使用的圖層的快取。此值可以是具名磁碟區或繫結掛載位置。

Docker daemon 中的具名磁碟區,其名稱衍生自映像檔名稱。

launchCache

包含由 buildpack 建立且由映像檔啟動程序使用的圖層的快取。此值可以是具名磁碟區或繫結掛載位置。

Docker daemon 中的具名磁碟區,其名稱衍生自映像檔名稱。

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

將用於設定產生之映像檔中繼資料中 Created 欄位的日期。此值必須是 ISO 8601 instant 格式的字串,或是 now 以使用目前日期和時間。

啟用 建置可重現性的固定日期。

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

應用程式內容將上傳到 builder 映像檔中之目錄的路徑。應用程式內容也會位於產生之映像檔中的此位置。

/workspace

securityOptions

將套用至 builder 容器的 安全性選項,以字串值陣列形式提供

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

此外掛程式會使用編譯器的外掛程式組態或 maven.compiler.target 屬性偵測專案的目標 Java 相容性。使用預設 Paketo builder 和 buildpack 時,此外掛程式會指示 buildpack 安裝相同的 Java 版本。您可以覆寫此行為,如builder 組態範例所示。

如需更多詳細資訊,另請參閱範例

標籤格式

提供給 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:3.3.5

使用 buildpack 將應用程式封裝到 OCI 映像檔中,fork 生命週期以確保 package 已執行。此目標適用於命令列叫用。如果您需要在您的建置中組態目標 execution,請改用 build-image-no-fork

必要參數

名稱 類型 預設

sourceDirectory

檔案

${project.build.directory}

選用參數

名稱 類型 預設

classifier

字串

docker

Docker

excludeDevtools

布林值

true

excludeDockerCompose

布林值

true

excludeGroupIds

字串

excludes

List

image

Image

includeSystemScope

布林值

false

includeTools

布林值

true

includes

List

layers

Layers

layout

LayoutType

layoutFactory

LayoutFactory

loaderImplementation

LoaderImplementation

mainClass

字串

skip

布林值

false

參數詳細資訊

classifier

在尋找來源歸檔時使用的分類器。

名稱

classifier

類型

java.lang.String

預設值

使用者屬性

2.3.0

docker

Docker 組態選項。

名稱

docker

類型

org.springframework.boot.maven.Docker

預設值

使用者屬性

2.4.0

excludeDevtools

從重新封裝的歸檔中排除 Spring Boot 開發工具。

名稱

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

要排除的成品定義集合。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

includeSystemScope

包含系統範圍的依賴項。

名稱

includeSystemScope

類型

布林值

預設值

false

使用者屬性

1.4.0

includeTools

包含 JAR 工具。

名稱

includeTools

類型

布林值

預設值

true

使用者屬性

3.3.0

includes

要包含的成品定義集合。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

如果未設定明確的版面配置,則將用於建立可執行歸檔的版面配置 factory。替代的版面配置實作可由協力廠商提供。

名稱

layoutFactory

類型

org.springframework.boot.loader.tools.LayoutFactory

預設值

使用者屬性

2.3.11

loaderImplementation

應使用的載入器實作。

名稱

loaderImplementation

類型

org.springframework.boot.loader.tools.LoaderImplementation

預設值

使用者屬性

3.2.0

mainClass

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

名稱

mainClass

類型

java.lang.String

預設值

使用者屬性

1.0.0

skip

略過執行。

名稱

skip

類型

布林值

預設值

false

使用者屬性

spring-boot.build-image.skip

2.3.0

sourceDirectory

包含來源歸檔的目錄。

名稱

sourceDirectory

類型

java.io.File

預設值

${project.build.directory}

使用者屬性

2.3.0

spring-boot:build-image-no-fork

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

使用 buildpack 將應用程式封裝到 OCI 映像檔中,但不 fork 生命週期。當在您的建置中組態目標 execution 時,應使用此目標。若要在命令列上叫用目標,請改用 build-image

必要參數

名稱 類型 預設

sourceDirectory

檔案

${project.build.directory}

選用參數

名稱 類型 預設

classifier

字串

docker

Docker

excludeDevtools

布林值

true

excludeDockerCompose

布林值

true

excludeGroupIds

字串

excludes

List

image

Image

includeSystemScope

布林值

false

includeTools

布林值

true

includes

List

layers

Layers

layout

LayoutType

layoutFactory

LayoutFactory

loaderImplementation

LoaderImplementation

mainClass

字串

skip

布林值

false

參數詳細資訊

classifier

在尋找來源歸檔時使用的分類器。

名稱

classifier

類型

java.lang.String

預設值

使用者屬性

2.3.0

docker

Docker 組態選項。

名稱

docker

類型

org.springframework.boot.maven.Docker

預設值

使用者屬性

2.4.0

excludeDevtools

從重新封裝的歸檔中排除 Spring Boot 開發工具。

名稱

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

要排除的成品定義集合。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

includeSystemScope

包含系統範圍的依賴項。

名稱

includeSystemScope

類型

布林值

預設值

false

使用者屬性

1.4.0

includeTools

包含 JAR 工具。

名稱

includeTools

類型

布林值

預設值

true

使用者屬性

3.3.0

includes

要包含的成品定義集合。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

如果未設定明確的版面配置,則將用於建立可執行歸檔的版面配置 factory。替代的版面配置實作可由協力廠商提供。

名稱

layoutFactory

類型

org.springframework.boot.loader.tools.LayoutFactory

預設值

使用者屬性

2.3.11

loaderImplementation

應使用的載入器實作。

名稱

loaderImplementation

類型

org.springframework.boot.loader.tools.LoaderImplementation

預設值

使用者屬性

3.2.0

mainClass

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

名稱

mainClass

類型

java.lang.String

預設值

使用者屬性

1.0.0

skip

略過執行。

名稱

skip

類型

布林值

預設值

false

使用者屬性

spring-boot.build-image.skip

2.3.0

sourceDirectory

包含來源歸檔的目錄。

名稱

sourceDirectory

類型

java.io.File

預設值

${project.build.directory}

使用者屬性

2.3.0

範例

自訂映像檔 Builder

如果您需要自訂用於建立映像檔的 builder,或用於啟動建置之映像檔的執行映像檔,請組態此外掛程式,如下列範例所示

<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 的 builder 映像檔,以及名稱為 mine/java-cnb-run 和標籤為 latest 的執行映像檔。

builder 和執行映像檔也可以在命令列上指定,如此範例所示

$ mvn spring-boot:build-image -Dspring-boot.build-image.builder=mine/java-cnb-builder -Dspring-boot.build-image.runImage=mine/java-cnb-run

Builder 組態

如果 builder 使用環境變數公開組態選項,則可以使用 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 在其中執行的 builder 與 buildpack 從中下載成品的網路位置之間存在網路 Proxy,則您需要組態 builder 以使用 Proxy。當使用 Paketo builder 時,可以藉由設定 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 buildpack 藉由設定 JAVA_TOOL_OPTIONS 環境變數來組態 JVM 執行時期環境。當應用程式映像檔在容器中啟動時,可以修改 buildpack 提供的 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

Buildpack

預設情況下,builder 將使用 builder 映像檔中包含的 buildpack,並以預先定義的順序套用它們。可以提供替代的 buildpack 集合,以套用 builder 中未包含的 buildpack,或變更包含之 buildpack 的順序。當提供一個或多個 buildpack 時,將只會套用指定的 buildpack。

下列範例指示 builder 使用封裝在 .tgz 檔案中的自訂 buildpack,然後使用 builder 中包含的 buildpack。

<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>

Buildpack 可以採用下列任何一種形式指定。

位於 CNB Builder 中的 buildpack (如果 builder 中只有一個符合 buildpack-id 的 buildpack,則可以省略版本)

目錄路徑,其中包含 buildpack 內容 (Windows 上不支援)

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

  • /path/to/buildpack/

gzipped tar 檔案的路徑,其中包含 buildpack 內容

  • file:///path/to/buildpack.tgz

  • /path/to/buildpack.tgz

OCI 映像檔,其中包含 封裝的 buildpack

  • 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>

建構器和 buildpack 需要一個位置來儲存映像建構期間的暫存檔案。預設情況下,此暫存建構工作區儲存在具名卷冊中。

快取和建構工作區可以配置為使用繫結掛載而不是具名卷冊,如下列範例所示

<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>