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 構成ファイル (英語) の場所 (デフォルトは |
DOCKER_CONTEXT | Docker CLI 構成ファイルからホスト情報を取得するために使用するコンテキスト (英語) の名前 ( |
DOCKER_HOST | Docker デーモンのホストとポートを含む URL- 例: |
DOCKER_TLS_VERIFY |
|
DOCKER_CERT_PATH | HTTPS の証明書とキーファイルへのパス ( |
Docker デーモン接続情報は、プラグイン構成の docker
パラメーターを使用して提供することもできます。次の表は、使用可能なパラメーターをまとめたものです。
パラメーター | 説明 |
---|---|
| Docker CLI 構成ファイル (英語) からホスト情報を取得するために使用するコンテキスト (英語) の名前 |
| Docker デーモンのホストとポートを含む URL- 例: |
|
|
| HTTPS の証明書とキーファイルへのパス ( |
|
|
詳細については、例も参照してください。
Docker レジストリ
builder
または runImage
パラメーターで指定された Docker イメージが、認証を必要とするプライベート Docker イメージレジストリに保管されている場合、認証資格情報は docker.builderRegistry
パラメーターを使用して提供できます。
生成された Docker イメージを Docker イメージレジストリに公開する場合は、docker.publishRegistry
パラメーターを使用して認証資格情報を提供できます。
ユーザー認証または ID トークン認証用のパラメーターが提供されます。サポートされている認証方法の詳細については、イメージの保存に使用されている Docker レジストリのドキュメントを参照してください。
次の表は、docker.builderRegistry
および docker.publishRegistry
で使用可能なパラメーターを要約したものです。
パラメーター | 説明 |
---|---|
| Docker イメージレジストリユーザーのユーザー名。ユーザー認証に必要です。 |
| Docker イメージレジストリユーザーのパスワード。ユーザー認証に必要です。 |
| Docker イメージレジストリのアドレス。ユーザー認証のオプション。 |
| Docker イメージレジストリユーザーのメールアドレス。ユーザー認証のオプション。 |
| Docker イメージレジストリユーザーの ID トークン。トークン認証に必要です。 |
詳細については、例も参照してください。
イメージのカスタマイズ
プラグインはビルダー (英語) を呼び出して、イメージの生成を調整します。ビルダーには、生成されたイメージに影響を与えるためにアプリケーションをインスペクションできる複数の buildpacks が含 (英語) まれています。デフォルトでは、プラグインはビルダーイメージを選択します。生成されたイメージの名前は、プロジェクトのプロパティから推測されます。
image
パラメーターを使用すると、ビルダーの構成と、プロジェクトでの動作方法を設定できます。次の表は、使用可能なパラメーターとそのデフォルト値をまとめたものです。
パラメーター / (ユーザープロパティ) | 説明 | デフォルト値 |
---|---|---|
|
Name of the builder image to use. |
|
|
Whether to treat the builder as trusted (英語) . |
|
|
The platform (operating system and architecture) of any builder, run, and buildpack images that are pulled.
Must be in the form of |
No default value, indicating that the platform of the host machine should be used. |
|
Name of the run image to use. |
No default value, indicating the run image specified in Builder metadata should be used. |
|
Image name (Javadoc) for the generated image. |
|
|
Policy (Javadoc) used to determine when to pull the builder and run images from the registry.
Acceptable values are |
|
| ビルダーに渡す必要のある環境変数。 | |
| ビルダーがイメージをビルドするときに使用する必要がある Buildpacks。指定された buildpacks のみが使用され、ビルダーに含まれているデフォルトの buildpacks がオーバーライドされます。Buildpack 参照は、次のいずれかの形式である必要があります。
| なし。ビルダーがそれに含まれる buildpacks を使用する必要があることを示します。 |
| イメージをビルドするときにビルダーコンテナーにマウントする必要があるボリュームバインドマウント (英語) 。バインディングは、ビルダーコンテナーの作成時に、解析されず、検証されずに Docker に渡されます。バインディングは、次のいずれかの形式である必要があります。
| |
|
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. |
|
|
Whether to clean the cache before building. |
|
| ビルダー操作の詳細ログを有効にします。 |
|
|
Whether to publish the generated image to a Docker registry. |
|
| 生成されたイメージに適用する 1 つ以上の追加タグ。 | |
| ビルダーと buildpacks がイメージの構築中にファイルを保存するために使用する一時ワークスペース。値には、名前付きボリュームまたはバインドマウントの場所を指定できます。 | イメージ名から派生した名前を持つ、Docker デーモン内の名前付きボリューム。 |
| buildpacks によって作成され、イメージ構築プロセスによって使用されるレイヤーを含むキャッシュ。値には、名前付きボリュームまたはバインドマウントの場所を指定できます。 | イメージ名から派生した名前を持つ、Docker デーモン内の名前付きボリューム。 |
| buildpacks によって作成され、イメージ起動プロセスによって使用されるレイヤーを含むキャッシュ。値には、名前付きボリュームまたはバインドマウントの場所を指定できます。 | イメージ名から派生した名前を持つ、Docker デーモン内の名前付きボリューム。 |
|
A date that will be used to set the |
A fixed date that enables build reproducibility (英語) . |
|
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. |
|
| 文字列値の配列として提供される、ビルダーコンテナーに適用されるセキュリティオプション (英語) |
|
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 referencedocker.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
を使用してください。
オプションのパラメーター
名前 | タイプ | デフォルト |
---|---|---|
| ||
|
| |
|
| |
| ||
| ||
|
| |
|
| |
| ||
| ||
|
|
パラメーターの詳細
excludeDevtools
再パッケージ化されたアーカイブから Spring Boot devtools を除外します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
excludeDockerCompose
再パッケージ化されたアーカイブから Spring Boot 開発サービスを除外します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
excludeGroupIds
除外する groupId 名のカンマ区切りリスト (完全一致)。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
excludes
除外するアーティファクト定義のコレクション。Exclude
要素は、必須の groupId
および artifactId
コンポーネントとオプションの classifier
コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
image
builder
、runImage
、name
、env
、cleanCache
、verboseLogging
、pullPolicy
、publish
オプションを使用したイメージ構成。
名前 |
|
---|---|
タイプ | |
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
includeSystemScope
システムスコープの依存関係を含めます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
|
includes
含めるアーティファクト定義のコレクション。Include
要素は、必須の groupId
および artifactId
コンポーネントとオプションの classifier
コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
layers
レイヤーの作成を無効にし、レイヤーツール jar を除外し、カスタムレイヤー構成ファイルを提供するオプションを備えたレイヤー構成。
名前 |
|
---|---|
タイプ | |
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
layout
アーカイブの型(依存関係がアーカイブ内にどのように配置されているかに対応します)。可能な値は JAR
、WAR
、ZIP
、DIR
、NONE
です。デフォルトは、アーカイブ型に基づく推測です。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
layoutFactory
明示的なレイアウトが設定されていない場合に実行可能アーカイブを作成するために使用されるレイアウトファクトリ。サードパーティが代替レイアウトの実装を提供できます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
loaderImplementation
使用する必要があるローダー実装。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
spring-boot:build-image-no-fork
org.springframework.boot:spring-boot-maven-plugin:3.4.1
buildpack を使用してアプリケーションを OCI イメージにパッケージ化しますが、ライフサイクルはフォークしません。このゴールは、ビルドでゴール execution
を構成するときに使用する必要があります。コマンドラインでゴールを呼び出すには、代わりに build-image
を使用します。
オプションのパラメーター
名前 | タイプ | デフォルト |
---|---|---|
| ||
|
| |
|
| |
| ||
| ||
|
| |
|
| |
| ||
| ||
|
|
パラメーターの詳細
excludeDevtools
再パッケージ化されたアーカイブから Spring Boot devtools を除外します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
excludeDockerCompose
再パッケージ化されたアーカイブから Spring Boot 開発サービスを除外します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
excludeGroupIds
除外する groupId 名のカンマ区切りリスト (完全一致)。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
excludes
除外するアーティファクト定義のコレクション。Exclude
要素は、必須の groupId
および artifactId
コンポーネントとオプションの classifier
コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
image
builder
、runImage
、name
、env
、cleanCache
、verboseLogging
、pullPolicy
、publish
オプションを使用したイメージ構成。
名前 |
|
---|---|
タイプ | |
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
includeSystemScope
システムスコープの依存関係を含めます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
|
includes
含めるアーティファクト定義のコレクション。Include
要素は、必須の groupId
および artifactId
コンポーネントとオプションの classifier
コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
layers
レイヤーの作成を無効にし、レイヤーツール jar を除外し、カスタムレイヤー構成ファイルを提供するオプションを備えたレイヤー構成。
名前 |
|
---|---|
タイプ | |
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
layout
アーカイブの型(依存関係がアーカイブ内にどのように配置されているかに対応します)。可能な値は JAR
、WAR
、ZIP
、DIR
、NONE
です。デフォルトは、アーカイブ型に基づく推測です。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
layoutFactory
明示的なレイアウトが設定されていない場合に実行可能アーカイブを作成するために使用されるレイアウトファクトリ。サードパーティが代替レイアウトの実装を提供できます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
loaderImplementation
使用する必要があるローダー実装。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
サンプル
カスタムイメージビルダー
イメージの作成に使用されるビルダーまたはビルドされたイメージの起動に使用される実行イメージをカスタマイズする必要がある場合は、次の例に示すようにプラグインを構成します。
<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 つしかない場合は、バージョンを省略できます):
urn:cnb:builder:buildpack-id
urn:cnb:builder:[email protected] (英語)
buildpack-id
buildpack コンテンツを含むディレクトリへのパス(Windows ではサポートされていません):
file:///path/to/buildpack/
/path/to/buildpack/
buildpack コンテンツを含む gzip 圧縮された tar ファイルへのパス:
file:///path/to/buildpack.tgz
/path/to/buildpack.tgz
パッケージ化された buildpack (英語) を含む 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 デーモンに名前付きボリュームとして保存されます。プロジェクトのバージョンがイメージ名のタグとして使用されている場合など、イメージ名が頻繁に変更される場合、キャッシュが頻繁に無効化される可能性があります。
次の例に示すように、キャッシュボリュームは、代替名を使用してキャッシュライフサイクルをより細かく制御できるように構成できます。
<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>