本記事では、Mavenを使ってSpringBootアプリケーションをDockerイメージにビルドする3つの手法を紹介する。
(1)spring-boot-maven-pluginに組み込まれた build-image.
(2)Googleの jib-maven-plugin。
(3)使用 dockerfle-maven-plugin。
Spring Bootアプリケーション
実践しやすいように、Spring Bootプロジェクトを用意する必要があります。
デモプロジェクトのアドレス:
https://github.com/davelms/me...
プロジェクト環境:
Java 11
Maven 3.6.3
使用 mvn package jar パッケージを正常にビルドできます。
も正常に動作します:
java -jar target/demo-application-0.0.1-SNAPSHOT.jar
テストページ:
http://localhost:8080/hello

Demoプロジェクトの準備ができたので、ここからイメージをビルドする3つの方法を実践していきます。
一、Spring Boot mavenプラグインのbuild-image
Spring Boot には Docker イメージをビルドするための独自のプラグインがあらかじめ用意されているため、何も変更する必要はありません。pom.xml の spring-boot-starter-parent に含まれているからです。
Dockerfileを書く必要も、ほかのことを気にする必要もない。Springが推奨するセキュリティ、メモリ、パフォーマンスなどへの対処も、すべてプラグインが行ってくれる。
次を実行するだけです:
mvn spring-boot:build-image
実行が完了すると、成功を知らせるメッセージが表示されます:

コンテナのテストを実行:
docker run -p 9090:8080 -t demo-application:0.0.1-SNAPSHOT
注意:ここでマッピングするローカルポートは9090。

二、jib-maven-plugin
Jib は Docker イメージを作成するための Maven および Gradle プラグインです。
このプラグインには、非常に顕著な特徴があります:ローカルに Docker をインストールする必要はありません、これは継続的インテグレーションに非常に便利で、Jibは指定したDockerリポジトリへ直接プッシュできる。
Jibも同様にDockerfileを書く必要がありません。
使い方も非常に簡単で、コードを変更する必要がなく、pom.xml も変更せずに済みます。
次を実行するだけ:
mvn compile com.google.cloud.tools:jib-maven-plugin:2.3.0:dockerBuild
mvn compile
は、おなじみの maven コンパイルコマンドだ。
com.google.cloud.tools:jib-maven-plugin:2.3.0
Jibプラグインを使用するよう指定しています
dockerBuild
は Jib プラグインの実行ゴールであり、dockerBuild JibがローカルにインストールされたDockerを使用するよう指定しています。
実行が完了すると、成功を知らせるメッセージが表示されます:

コンテナを起動してテストする:
docker run -p 9091:8080 -t demo-application:0.0.1-SNAPSHOT
注意:ここでマッピングするローカルポートは9091。

三、dockerfile-maven-plugin
このプラグインでは Dockerfile を書く必要がありますが、Domo プロジェクトにはすでに用意されています。
Dockerfileはプロジェクトのルートディレクトリに、pom.xmlと一緒に置く必要があります。

次に、リポジトリ、tagタグ、そして上記のDockerfileで定義したものを指定するため、pom.xmlにいくつかの設定を追加する必要がある JAR_FILE。

実行 mvn package の際に自動的にイメージがビルドされます。実行が完了すると、次のメッセージが表示されます:

コンテナを起動:
docker run -p 9092:8080 -t demo-application:0.0.1-SNAPSHOT
注意:マッピング先のローカルポートは 9092。

まとめ

この3つの中で最も手軽なのは SpringBoot 標準の方式で、自分で何も用意せず、そのまま使える。
最も特徴的なのは Jib です。ローカルに Docker をインストールする必要がなく、指定したリポジトリに直接プッシュでき、使い方もとても簡単です。
最も面倒に見えるのは dockerfile-maven-plugin というプラグインで、Dockerfileを書いたうえで設定も追加する必要があり、しかし、実際にはこれが最も使いやすいです。というのも、最初の2つはネットワーク環境に関係しており(お察しのとおり)、Docker イメージを設定してもエラーが出るからです。試してみてください。
