Jibを使用したJavaアプリのDocker化
1. 概要
このチュートリアルでは、Jibと、それがJavaアプリケーションのコンテナー化をどのように簡素化するかを見ていきます。
単純なSpring Bootアプリケーションを使用して、Jibを使用してDockerイメージをビルドします。 次に、イメージをリモートレジストリに公開します。
また、dockerfileとdockerツールを使用したSpringBootアプリケーションのドッキングに関するチュートリアルも参照してください。
2. ジブ入門
Jib は、JavaアプリケーションのDockerイメージを構築するためにGoogleが管理しているオープンソースのJavaツールです。 Dockerfileを作成する必要がないため、コンテナ化が簡素化されます。
実際、Dockerイメージを自分で作成して公開するためにをインストールする必要はありません。
Googleは、JibをMavenプラグインとGradleプラグインの両方として公開しています。 これは、ビルドするたびにJibがアプリケーションに加えた変更をキャッチすることを意味するので便利です。 これにより、Dockerのビルド/プッシュコマンドを個別に節約でき、CIパイプラインへの追加が簡単になります。
Spotifyのdocker-maven-pluginプラグインやdockerfile-mavenプラグインなど、他にもいくつかのツールがありますが、前者は非推奨になり、後者にはdockerfile。
3. シンプルなあいさつアプリ
簡単なspring-bootアプリケーションを使用して、Jibを使用してドッキングします。 単純なGETエンドポイントを公開します。
http://localhost:8080/greeting
これは、SpringMVCコントローラーを使用して非常に簡単に実行できます。
@RestController
public class GreetingController {
private static final String template = "Hello Docker, %s!";
private final AtomicLong counter = new AtomicLong();
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value="name",
defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
4. 展開の準備
また、デプロイ先のDockerリポジトリで認証するようにローカルで設定する必要があります。
この例では、DockerHubクレデンシャルを.m2 /settings.xmlに提供します。
<servers>
<server>
<id>registry.hub.docker.com</id>
<username><DockerHub Username></username>
<password><DockerHub Password></password>
</server>
</servers>
クレデンシャルを提供する方法は他にもあります。
5. Jibを使用したDockerHubへのデプロイ
これで、 jib-maven-plugin 、またはGradleと同等の、から を使用して、簡単なコマンドでアプリケーションをコンテナ化できます。
mvn compile com.google.cloud.tools:jib-maven-plugin:2.5.0:build -Dimage=$IMAGE_PATH
ここで、IMAGE_PATHは、コンテナレジストリのターゲットパスです。
たとえば、画像 baeldungjib / spring-jib-appをDockerHubにアップロードするには、次のようにします。
export IMAGE_PATH=registry.hub.docker.com/baeldungjib/spring-jib-app
以上です! これにより、アプリケーションのDockerイメージがビルドされ、DockerHubにプッシュされます。
もちろん、同様の方法で画像をGoogleContainerRegistryまたはAmazonElasticContainerRegistryにアップロードできます。
6. Mavenコマンドの簡素化
また、他のMavenプラグインと同様に、代わりに pom でプラグインを構成することで、最初のコマンドを短縮できます。
<project>
...
<build>
<plugins>
...
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<to>
<image>${image.path}</image>
</to>
</configuration>
</plugin>
...
</plugins>
</build>
...
</project>
この変更により、Mavenコマンドを簡略化できます。
mvn compile jib:build
7. Dockerアスペクトのカスタマイズ
デフォルトでは、 Jibは、FROMやENTRYPOINTなど、必要なものについて多くの合理的な推測を行います。
私たちのニーズに固有のアプリケーションにいくつかの変更を加えましょう。
まず、SpringBootはデフォルトでポート8080を公開します。
ただし、たとえば、アプリケーションをポート8082で実行し、コンテナーを介して公開できるようにしたいとします。
もちろん、Bootで適切な変更を加えます。 そして、その後、Jibを使用して画像で公開できるようにすることができます。
<configuration>
...
<container>
<ports>
<port>8082</port>
</ports>
</container>
</configuration>
または、別のFROMが必要だとしましょう。 デフォルトでは、JibはディストリビューションのないJavaイメージを使用します。
alpine-java などの別のベースイメージでアプリケーションを実行する場合は、同様の方法でアプリケーションを構成できます。
<configuration>
...
<from>
<image>openjdk:alpine</image>
</from>
...
</configuration>
タグ、ボリューム、および他のいくつかのDockerディレクティブを同じ方法で構成します。
8. Javaアスペクトのカスタマイズ
また、関連付けにより、Jibは多数のJavaランタイム構成もサポートします。
- jvmFlags は、JVMに渡す起動フラグを示すためのものです。
- mainClass メインクラスを示すためのものです。
ジブはデフォルトで自動的に推測を試みます。 - args は、mainメソッドに渡されるプログラム引数を指定する場所です。
もちろん、Jibのドキュメントをチェックして、利用可能なすべての構成プロパティを確認してください。
9. 結論
このチュートリアルでは、Mavenを介してDockerディレクティブとJavaランタイム構成にアクセスする方法など、GoogleのJibを使用してDockerイメージを構築および公開する方法を説明しました。
いつものように、この例のソースコードはGithubでから入手できます。