検索
ニュース

Spring BootアプリをDockerコンテナ化する方法「Dockerfile」の書き方とは

Spring BootアプリケーションをDockerコンテナ化すると、テストからデプロイメントまで、ソフトウェア開発ライフサイクルの多くの側面を大幅に簡素化できる。

Share
Tweet
LINE
Hatena

 Spring Bootは、マイクロサービスや「Twelve-Factor App」(12のベストプラクティスに沿ったクラウドネイティブなアプリケーション)の構築に特化した独自のクラウドネイティブソフトウェア開発フレームワークだ。

 一方、コンテナ管理ツールは「Podman」や「containerd」など多数存在するが、最もよく使われているのは「Docker」だ。従って、クラウドネイティブ開発者は、Spring BootアプリケーションをDockerコンテナとしてデプロイする方法を理解しておく必要がある。

Spring BootアプリケーションをDockerコンテナ化する方法

 Spring Bootアプリケーションは以下の手順に従ってDockerコンテナ化する。

  1. Spring Bootプロジェクトのパッケージのタイプを「Jar」に設定する
  2. 「Maven」または「Gradle」を使用してSpring Bootアプリケーションをビルドする
  3. プロジェクトのルートにSpring Boot用のDockerfileを追加する
  4. 「docker build」コマンドを実行してSpring BootのDockerイメージを作成する
  5. 「docker push」コマンドを実行して作成したイメージをコンテナレジストリにプッシュする

プロジェクトのパッケージタイプとしてJarを選択する

 Spring Bootプロジェクトのパッケージ タイプがJarに設定されていることを確認する。「War」ファイルをコンテナ化する場合は、追加の構成が必要になる。

 Spring BootアプリケーションをJarファイルとしてパッケージ化すると、ビルド時に「Tomcat」サーバが組み込まれるため、アプリケーションサーバを追加でプロビジョニングする必要がなくなる。

Spring Bootアプリケーションをビルドしてパッケージ化する

 MavenにもGradleにもSpring Bootアプリケーションをコンパイル、テスト、パッケージ化するビルド手順が用意されている。Mavenでは、以下のコマンドを実行するだけで済む。

mvn package

 このコマンド実行後、プロジェクトの「target」フォルダ内に、Spring BootのJarファイルが作成されていることを確認する。このJarファイルの名前は、Spring Boot Dockerfileを作成する次の手順で使用するため、記録しておく。

作成したSpring Boot Jarファイルを実行する

 コンテナ化する前にアプリケーションをテストするには、以下のコマンドを実行する。その際、Jarファイルの名前を記録した名前に置き換える。

java -jar target/roshambo-1.0.jar

Spring Boot Dockerfileを作成する

 Dockerfileは、アプリケーションのサポートに必要なランタイムリソースと、Spring BootアプリケーションをDockerイメージにコピーする方法を記述する。少なくとも、Spring Boot Dockerfileには次の情報を含める。

  • 使用するJavaディストリビューションとJDKのバージョン
  • Spring Boot JarファイルをDockerイメージにコピーする方法
  • Spring Bootプリケーションを起動するために実行するエントリポイント

 以下に、Spring Boot Dockerfileのサンプルを示す。ここでは、アプリションのメンテナー(maintainer)を示すLABELコマンドを追加している。

FROM openjdk:17-jdk-alpine
LABEL maintainer=mcnz.com
COPY target/roshambo.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

 作成したDockerfileは、Spring Bootプロジェクトのルートに保存する。Dockerfileにはファイル拡張子がないため、利用しているIDE(統合開発環境)によって「.txt」や「.html」といった拡張子が付加されないよう注意する。

Spring Boot Dockerイメージをビルドする

 Dockerfileを保存したフォルダで「docker build」コマンドを実行する。

 ターゲットコンテナレジストリをDocker Hubにしている場合は、Docker Hubアカウントを参照するタグを含める。そうすれば、イメージをクラウドにプッシュする際に、Docker Hubはそのイメージをアカウントと関連付けることができる。

 一般的な「docker build」コマンドを以下に示す。

docker build –tag=<dockerhubname>/<imagename>:<revision> .

 Spring BootアプリケーションをDocker Hubにプッシュするには、以下のコマンドを使用する。

docker build --tag=cameronmcnz/roshambo:latest .

 末尾のピリオド(.)は、現在のフォルダでDockerfileを探すように指示している。

Dockerコンテナ化したSpring BootアプリケーションをDocker Hubにプッシュする

 大半のDockerイメージのプッシュ先はDocker Hubだが、イメージのホスト先として任意のアーティファクトレジストリを構成してホストすることもできる。

 Dockerコンテナ化したSpring BootアプリケーションをDocker Hubにプッシュするには、ログインしてプッシュを実行するだけだ。以下の2つのコマンドを実行して、Spring Bootイメージを Docker Hubアカウントにプッシュする。

docker login
docker push cameronmcnz/roshambo:latest

 コマンド実行後、Docker Hubの自身の個人アカウントに移動すると、最近プッシュされたイメージの一覧に新しいイメージが表示される。

コンテナ化したSpring Bootアプリケーションを実行する

 Dockerコンテナ化したSpring Bootアプリケーションを実行するには、以下のようにポートマッピングを指定して「docker run」コマンドを実行する。

docker run –p 80:8080 cameronmcnz/roshambo

 このコマンドによって公開したDockerコンテナがローカルPCで実行され、ブラウザからアプリケーションにアクセスできるようになる。

 コンテナベースのパッケージングは、マイクロサービスとクラウドネイティブアプリケーションのデプロイメントとランタイム管理において、極めて重要な役割を果たす。Spring BootアプリケーションをDockerコンテナ化すると、テストからデプロイメントまで、ソフトウェア開発ライフサイクルの多くの側面を大幅に簡素化できる。

Copyright © ITmedia, Inc. All Rights Reserved.

[an error occurred while processing this directive]
ページトップに戻る