OCI イメージのパッケージ化

プラグインは、Cloud Native Buildpacks (英語) (CNB) を使用して jar または war ファイルから OCI イメージ [GitHub] (英語) を作成できます。イメージは、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 のゴールを参照するために使用されます。
buildpack は実行可能アーカイブから実行されますが、実行可能アーカイブは必要に応じて自動的に作成されるため、最初に repackage ゴールを実行する必要はありません。build-image がアプリケーションを再パッケージ化すると、repackage のゴールと同じ設定が適用されます。つまり、除外オプションの 1 つを使用して依存関係を除外できます。spring-boot-devtools および spring-boot-docker-compose モジュールは、デフォルトで自動的に除外されます (これは、excludeDevtools および excludeDockerCompose プロパティを使用して制御できます)。

Docker デーモン

build-image ゴールには、Docker デーモンへのアクセスが必要です。このゴールは、ローカルの Docker CLI 構成ファイル (英語) をインスペクションして現在のコンテキスト (英語) を特定し、そのコンテキスト接続情報を使用して Docker デーモンと通信します。現在のコンテキストを特定できない場合、またはコンテキストに接続情報がない場合、ゴールはデフォルトのローカル接続を使用します。これは、サポートされているすべてのプラットフォーム上の Docker エンジン (英語) で構成なしで動作します。

環境変数を設定して、代替のローカル接続またはリモート接続を使用するように build-image のゴールを構成できます。次の表に、環境変数とその値を示します。

環境変数 説明

DOCKER_CONFIG

現在のコンテキストを決定するために使用される Docker CLI 構成ファイル (英語) の場所 (デフォルトは $HOME/.docker)

DOCKER_CONTEXT

Docker CLI 構成ファイルからホスト情報を取得するために使用するコンテキスト (英語) の名前 (DOCKER_HOST をオーバーライドします)

DOCKER_HOST

Docker デーモンのホストとポートを含む URL- 例: tcp://192.168.99.100:2376

DOCKER_TLS_VERIFY

1 に設定されている場合、安全な HTTPS プロトコルを有効にする (オプション)

DOCKER_CERT_PATH

HTTPS の証明書とキーファイルへのパス (DOCKER_TLS_VERIFY=1 の場合は必須、それ以外の場合は無視)

Docker デーモン接続情報は、プラグイン構成の docker パラメーターを使用して提供することもできます。次の表は、使用可能なパラメーターをまとめたものです。

パラメーター 説明

context

Docker CLI 構成ファイル (英語) からホスト情報を取得するために使用するコンテキスト (英語) の名前

host

Docker デーモンのホストとポートを含む URL- 例: tcp://192.168.99.100:2376

tlsVerify

true に設定されている場合、安全な HTTPS プロトコルを有効にする (オプション)

certPath

HTTPS の証明書とキーファイルへのパス (tlsVerify が true の場合は必須、それ以外の場合は無視されます)

bindHostToBuilder

true の場合、host プロパティの値は、CNB ビルダー用に作成されたコンテナーに提供されます。(オプション)

詳細については、も参照してください。

Docker レジストリ

builder または runImage パラメーターで指定された Docker イメージが、認証を必要とするプライベート Docker イメージレジストリに保管されている場合、認証資格情報は docker.builderRegistry パラメーターを使用して提供できます。

生成された Docker イメージを Docker イメージレジストリに公開する場合は、docker.publishRegistry パラメーターを使用して認証資格情報を提供できます。

ユーザー認証または ID トークン認証用のパラメーターが提供されます。サポートされている認証方法の詳細については、イメージの保存に使用されている Docker レジストリのドキュメントを参照してください。

次の表は、docker.builderRegistry および docker.publishRegistry で使用可能なパラメーターを要約したものです。

パラメーター 説明

username

Docker イメージレジストリユーザーのユーザー名。ユーザー認証に必要です。

password

Docker イメージレジストリユーザーのパスワード。ユーザー認証に必要です。

url

Docker イメージレジストリのアドレス。ユーザー認証のオプション。

email

Docker イメージレジストリユーザーのメールアドレス。ユーザー認証のオプション。

token

Docker イメージレジストリユーザーの ID トークン。トークン認証に必要です。

詳細については、も参照してください。

イメージのカスタマイズ

プラグインはビルダー (英語) を呼び出して、イメージの生成を調整します。ビルダーには、生成されたイメージに影響を与えるためにアプリケーションをインスペクションできる複数の buildpacks が含 (英語) まれています。デフォルトでは、プラグインはビルダーイメージを選択します。生成されたイメージの名前は、プロジェクトのプロパティから推測されます。

image パラメーターを使用すると、ビルダーの構成と、プロジェクトでの動作方法を設定できます。次の表は、使用可能なパラメーターとそのデフォルト値をまとめたものです。

パラメーター / (ユーザープロパティ) 説明 デフォルト値

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

Name of the builder image to use.

paketobuildpacks/builder-jammy-java-tiny:latest

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

Whether to treat the builder as trusted (英語) .

true if the builder is one of paketobuildpacks/builder-jammy-java-tiny, paketobuildpacks/builder-noble-java-tiny, paketobuildpacks/builder-jammy-tiny, paketobuildpacks/builder-jammy-base, paketobuildpacks/builder-jammy-full, paketobuildpacks/builder-jammy-buildpackless-tiny, paketobuildpacks/builder-jammy-buildpackless-base, paketobuildpacks/builder-jammy-buildpackless-full, gcr.io/buildpacks/builder, heroku/builder; false otherwise.

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

The platform (operating system and architecture) of any builder, run, and buildpack images that are pulled. Must be in the form of OS[/architecture[/variant]], such as linux/amd64, linux/arm64, or linux/arm/v5. Refer to documentation of the builder being used to determine the image OS and architecture options available.

No default value, indicating that the platform of the host machine should be used.

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

Name of the run image to use.

No default value, indicating the run image specified in Builder metadata should be used.

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

Image name (Javadoc) for the generated image.

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

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

Policy (Javadoc) used to determine when to pull the builder and run images from the registry. Acceptable values are ALWAYS, NEVER, and IF_NOT_PRESENT.

ALWAYS

env

ビルダーに渡す必要のある環境変数。

buildpacks

ビルダーがイメージをビルドするときに使用する必要がある Buildpacks。指定された buildpacks のみが使用され、ビルダーに含まれているデフォルトの buildpacks がオーバーライドされます。Buildpack 参照は、次のいずれかの形式である必要があります。

  • ビルダーの Buildpack - [urn:cnb:builder:]<buildpack ID>[@<version>]

  • ファイルシステム上のディレクトリ内の Buildpack- [file://]<path>

  • ファイルシステム上の gzip 圧縮された tar(.tgz)ファイル内の Buildpack- [file://]<path>/<file name>

  • OCI イメージの Buildpack- [docker://]<host>/<repo>[:<tag>][@<digest>]

なし。ビルダーがそれに含まれる buildpacks を使用する必要があることを示します。

bindings

イメージをビルドするときにビルダーコンテナーにマウントする必要があるボリュームバインドマウント (英語) 。バインディングは、ビルダーコンテナーの作成時に、解析されず、検証されずに Docker に渡されます。バインディングは、次のいずれかの形式である必要があります。

  • <host source path>:<container destination path>[:<options>]

  • <host volume name>:<container destination path>[:<options>]

<options> に含めることができる場所:

  • ボリュームを読み取り専用としてコンテナーにマウントする ro 

  • ボリュームをコンテナー内で読み取り可能および書き込み可能としてマウントするための rw 

  • オプション名とその値で構成されるキーと値のペアを指定する volume-opt=key=value 

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

The network driver (英語) the builder container will be configured to use. The value supplied will be passed unvalidated to Docker when creating the builder container.

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

Whether to clean the cache before building.

false

verboseLogging

ビルダー操作の詳細ログを有効にします。

false

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

Whether to publish the generated image to a Docker registry.

false

tags

生成されたイメージに適用する 1 つ以上の追加タグ。tags オプションに指定される値は、完全なイメージ参照である必要があります。詳細については、タグのセクションを参照してください。

buildWorkspace

ビルダーと buildpacks がイメージの構築中にファイルを保存するために使用する一時ワークスペース。値には、名前付きボリュームまたはバインドマウントの場所を指定できます。

イメージ名から派生した名前を持つ、Docker デーモン内の名前付きボリューム。

buildCache

buildpacks によって作成され、イメージ構築プロセスによって使用されるレイヤーを含むキャッシュ。値には、名前付きボリュームまたはバインドマウントの場所を指定できます。

イメージ名から派生した名前を持つ、Docker デーモン内の名前付きボリューム。

launchCache

buildpacks によって作成され、イメージ起動プロセスによって使用されるレイヤーを含むキャッシュ。値には、名前付きボリュームまたはバインドマウントの場所を指定できます。

イメージ名から派生した名前を持つ、Docker デーモン内の名前付きボリューム。

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

A date that will be used to set the Created field in the generated image’s metadata. The value must be a string in the ISO 8601 instant format, or now to use the current date and time.

A fixed date that enables build reproducibility (英語) .

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

The path to a directory that application contents will be uploaded to in the builder image. Application contents will also be in this location in the generated image.

/workspace

securityOptions

文字列値の配列として提供される、ビルダーコンテナーに適用されるセキュリティオプション (英語)

["label=disable"] on Linux and macOS, [] on Windows

The plugin detects the target Java compatibility of the project using the compiler’s plugin configuration or the maven.compiler.target property. When using the default Paketo builder and buildpacks, the plugin instructs the buildpacks to install the same Java version. You can override this behaviour as shown in the builder configuration examples.

For more details, see also examples.

Tags Format

The values provided to the tags option should be full image references. The accepted format is [domainHost:port/][path/]name[:tag][@digest].

If the domain is missing, it defaults to docker.io. If the path is missing, it defaults to library. If the tag is missing, it defaults to latest.

Some examples:

  • my-image leads to the image reference 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.4.1

buildpack を使用してアプリケーションを OCI イメージにパッケージ化し、ライフサイクルをフォークして package が確実に実行されるようにします。このゴールは、コマンドライン呼び出しに適しています。ビルドでゴール execution を構成する必要がある場合は、代わりに build-image-no-fork を使用してください。

必須パラメーター

名前 タイプ デフォルト

sourceDirectory

File

${project.build.directory}

パラメーターの詳細

classifier

ソースアーカイブを検索するときに使用される分類子。

名前

classifier

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

開始

2.3.0

docker

Docker 構成オプション。

名前

docker

タイプ

org.springframework.boot.maven.Docker (Javadoc)

デフォルト値

ユーザープロパティ

開始

2.4.0

excludeDevtools

再パッケージ化されたアーカイブから Spring Boot devtools を除外します。

名前

excludeDevtools

タイプ

boolean

デフォルト値

true

ユーザープロパティ

spring-boot.repackage.excludeDevtools

開始

1.3.0

excludeDockerCompose

再パッケージ化されたアーカイブから Spring Boot 開発サービスを除外します。

名前

excludeDockerCompose

タイプ

boolean

デフォルト値

true

ユーザープロパティ

spring-boot.repackage.excludeDockerCompose

開始

3.1.0

excludeGroupIds

除外する groupId 名のカンマ区切りリスト (完全一致)。

名前

excludeGroupIds

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

spring-boot.excludeGroupIds

開始

1.1.0

excludes

除外するアーティファクト定義のコレクション。Exclude 要素は、必須の groupId および artifactId コンポーネントとオプションの classifier コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier

名前

excludes

タイプ

java.util.List

デフォルト値

ユーザープロパティ

spring-boot.excludes

開始

1.1.0

image

builderrunImagenameenvcleanCacheverboseLoggingpullPolicypublish オプションを使用したイメージ構成。

名前

image

タイプ

org.springframework.boot.maven.Image (Javadoc)

デフォルト値

ユーザープロパティ

開始

2.3.0

includeSystemScope

システムスコープの依存関係を含めます。

名前

includeSystemScope

タイプ

boolean

デフォルト値

false

ユーザープロパティ

開始

1.4.0

includeTools

JAR ツールを含めます。

名前

includeTools

タイプ

boolean

デフォルト値

true

ユーザープロパティ

開始

3.3.0

includes

含めるアーティファクト定義のコレクション。Include 要素は、必須の groupId および artifactId コンポーネントとオプションの classifier コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier

名前

includes

タイプ

java.util.List

デフォルト値

ユーザープロパティ

spring-boot.includes

開始

1.2.0

layers

レイヤーの作成を無効にし、レイヤーツール jar を除外し、カスタムレイヤー構成ファイルを提供するオプションを備えたレイヤー構成。

名前

layers

タイプ

org.springframework.boot.maven.Layers (Javadoc)

デフォルト値

ユーザープロパティ

開始

2.3.0

layout

アーカイブの型(依存関係がアーカイブ内にどのように配置されているかに対応します)。可能な値は JARWARZIPDIRNONE です。デフォルトは、アーカイブ型に基づく推測です。

名前

layout

タイプ

org.springframework.boot.maven.AbstractPackagerMojo$LayoutType (Javadoc)

デフォルト値

ユーザープロパティ

開始

2.3.11

layoutFactory

明示的なレイアウトが設定されていない場合に実行可能アーカイブを作成するために使用されるレイアウトファクトリ。サードパーティが代替レイアウトの実装を提供できます。

名前

layoutFactory

タイプ

org.springframework.boot.loader.tools.LayoutFactory (Javadoc)

デフォルト値

ユーザープロパティ

開始

2.3.11

loaderImplementation

使用する必要があるローダー実装。

名前

loaderImplementation

タイプ

org.springframework.boot.loader.tools.LoaderImplementation (Javadoc)

デフォルト値

ユーザープロパティ

開始

3.2.0

mainClass

メインクラスの名前。指定しない場合、main メソッドを含む最初に見つかったコンパイル済みクラスが使用されます。

名前

mainClass

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

開始

1.0.0

skip

実行をスキップします。

名前

skip

タイプ

boolean

デフォルト値

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

buildpack を使用してアプリケーションを OCI イメージにパッケージ化しますが、ライフサイクルはフォークしません。このゴールは、ビルドでゴール execution を構成するときに使用する必要があります。コマンドラインでゴールを呼び出すには、代わりに build-image を使用します。

必須パラメーター

名前 タイプ デフォルト

sourceDirectory

File

${project.build.directory}

パラメーターの詳細

classifier

ソースアーカイブを検索するときに使用される分類子。

名前

classifier

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

開始

2.3.0

docker

Docker 構成オプション。

名前

docker

タイプ

org.springframework.boot.maven.Docker (Javadoc)

デフォルト値

ユーザープロパティ

開始

2.4.0

excludeDevtools

再パッケージ化されたアーカイブから Spring Boot devtools を除外します。

名前

excludeDevtools

タイプ

boolean

デフォルト値

true

ユーザープロパティ

spring-boot.repackage.excludeDevtools

開始

1.3.0

excludeDockerCompose

再パッケージ化されたアーカイブから Spring Boot 開発サービスを除外します。

名前

excludeDockerCompose

タイプ

boolean

デフォルト値

true

ユーザープロパティ

spring-boot.repackage.excludeDockerCompose

開始

3.1.0

excludeGroupIds

除外する groupId 名のカンマ区切りリスト (完全一致)。

名前

excludeGroupIds

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

spring-boot.excludeGroupIds

開始

1.1.0

excludes

除外するアーティファクト定義のコレクション。Exclude 要素は、必須の groupId および artifactId コンポーネントとオプションの classifier コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier

名前

excludes

タイプ

java.util.List

デフォルト値

ユーザープロパティ

spring-boot.excludes

開始

1.1.0

image

builderrunImagenameenvcleanCacheverboseLoggingpullPolicypublish オプションを使用したイメージ構成。

名前

image

タイプ

org.springframework.boot.maven.Image (Javadoc)

デフォルト値

ユーザープロパティ

開始

2.3.0

includeSystemScope

システムスコープの依存関係を含めます。

名前

includeSystemScope

タイプ

boolean

デフォルト値

false

ユーザープロパティ

開始

1.4.0

includeTools

JAR ツールを含めます。

名前

includeTools

タイプ

boolean

デフォルト値

true

ユーザープロパティ

開始

3.3.0

includes

含めるアーティファクト定義のコレクション。Include 要素は、必須の groupId および artifactId コンポーネントとオプションの classifier コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier

名前

includes

タイプ

java.util.List

デフォルト値

ユーザープロパティ

spring-boot.includes

開始

1.2.0

layers

レイヤーの作成を無効にし、レイヤーツール jar を除外し、カスタムレイヤー構成ファイルを提供するオプションを備えたレイヤー構成。

名前

layers

タイプ

org.springframework.boot.maven.Layers (Javadoc)

デフォルト値

ユーザープロパティ

開始

2.3.0

layout

アーカイブの型(依存関係がアーカイブ内にどのように配置されているかに対応します)。可能な値は JARWARZIPDIRNONE です。デフォルトは、アーカイブ型に基づく推測です。

名前

layout

タイプ

org.springframework.boot.maven.AbstractPackagerMojo$LayoutType (Javadoc)

デフォルト値

ユーザープロパティ

開始

2.3.11

layoutFactory

明示的なレイアウトが設定されていない場合に実行可能アーカイブを作成するために使用されるレイアウトファクトリ。サードパーティが代替レイアウトの実装を提供できます。

名前

layoutFactory

タイプ

org.springframework.boot.loader.tools.LayoutFactory (Javadoc)

デフォルト値

ユーザープロパティ

開始

2.3.11

loaderImplementation

使用する必要があるローダー実装。

名前

loaderImplementation

タイプ

org.springframework.boot.loader.tools.LoaderImplementation (Javadoc)

デフォルト値

ユーザープロパティ

開始

3.2.0

mainClass

メインクラスの名前。指定しない場合、main メソッドを含む最初に見つかったコンパイル済みクラスが使用されます。

名前

mainClass

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

開始

1.0.0

skip

実行をスキップします。

名前

skip

タイプ

boolean

デフォルト値

false

ユーザープロパティ

spring-boot.build-image.skip

開始

2.3.0

sourceDirectory

ソースアーカイブを含むディレクトリ。

名前

sourceDirectory

タイプ

java.io.File

デフォルト値

${project.build.directory}

ユーザープロパティ

開始

2.3.0

サンプル

カスタムイメージビルダー

イメージの作成に使用されるビルダーまたはビルドされたイメージの起動に使用される実行イメージをカスタマイズする必要がある場合は、次の例に示すようにプラグインを構成します。

<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 buildpacks によって使用される 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 デーモンと buildpacks がアーティファクトをダウンロードするネットワークの場所の間にネットワークプロキシがある場合は、プロキシを使用するようにビルダーを構成する必要があります。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 buildpacks は、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>

カスタムイメージ名

デフォルトでは、イメージ名はプロジェクトの 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

Buildpacks

デフォルトでは、ビルダーはビルダーイメージに含まれている buildpacks を使用し、事前定義された順序で適用します。buildpacks の代替セットを提供して、ビルダーに含まれていない buildpacks を適用したり、含まれている buildpacks の順序を変更したりできます。1 つ以上の buildpacks が提供されている場合、指定された buildpacks のみが適用されます。

次の例では、.tgz ファイルにパッケージ化されたカスタム buildpack を使用し、その後にビルダーに含まれる 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>

Buildpacks は、以下に示す任意の形式で指定できます。

CNB ビルダーにある buildpack(ビルダーに buildpack-id に一致する buildpack が 1 つしかない場合は、バージョンを省略できます):

buildpack コンテンツを含むディレクトリへのパス(Windows ではサポートされていません):

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

  • /path/to/buildpack/

buildpack コンテンツを含む gzip 圧縮された tar ファイルへのパス:

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

  • /path/to/buildpack.tgz

  • 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 デーモンに名前付きボリュームとして保存されます。プロジェクトのバージョンがイメージ名のタグとして使用されている場合など、イメージ名が頻繁に変更される場合、キャッシュが頻繁に無効化される可能性があります。

次の例に示すように、キャッシュボリュームは、代替名を使用してキャッシュライフサイクルをより細かく制御できるように構成できます。

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

ビルダーと buildpacks には、イメージのビルド中に一時ファイルを保存する場所が必要です。デフォルトでは、この一時ビルドワークスペースは名前付きボリュームに保存されます。

次の例に示すように、名前付きボリュームの代わりにバインドマウントを使用するようにキャッシュとビルドワークスペースを構成できます。

<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>
colima CLI がインストールされている場合、コマンド podman info --format='{{.Host.RemoteSocket.Path}}' を使用して、この例に示されている docker.host 構成プロパティの値を取得できます。

Colima 用の Docker 構成

プラグインは、コリマ [GitHub] (英語) が提供する 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>