Spring BootアプリケーションをDockerコンテナ化すると、テストからデプロイメントまで、ソフトウェア開発ライフサイクルの多くの側面を大幅に簡素化できる。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Spring Bootは、マイクロサービスや「Twelve-Factor App」(12のベストプラクティスに沿ったクラウドネイティブなアプリケーション)の構築に特化した独自のクラウドネイティブソフトウェア開発フレームワークだ。
一方、コンテナ管理ツールは「Podman」や「containerd」など多数存在するが、最もよく使われているのは「Docker」だ。従って、クラウドネイティブ開発者は、Spring BootアプリケーションをDockerコンテナとしてデプロイする方法を理解しておく必要がある。
Spring Bootアプリケーションは以下の手順に従ってDockerコンテナ化する。
Spring Bootプロジェクトのパッケージ タイプがJarに設定されていることを確認する。「War」ファイルをコンテナ化する場合は、追加の構成が必要になる。
Spring BootアプリケーションをJarファイルとしてパッケージ化すると、ビルド時に「Tomcat」サーバが組み込まれるため、アプリケーションサーバを追加でプロビジョニングする必要がなくなる。
MavenにもGradleにもSpring Bootアプリケーションをコンパイル、テスト、パッケージ化するビルド手順が用意されている。Mavenでは、以下のコマンドを実行するだけで済む。
mvn package
このコマンド実行後、プロジェクトの「target」フォルダ内に、Spring BootのJarファイルが作成されていることを確認する。このJarファイルの名前は、Spring Boot Dockerfileを作成する次の手順で使用するため、記録しておく。
コンテナ化する前にアプリケーションをテストするには、以下のコマンドを実行する。その際、Jarファイルの名前を記録した名前に置き換える。
java -jar target/roshambo-1.0.jar
Dockerfileは、アプリケーションのサポートに必要なランタイムリソースと、Spring BootアプリケーションをDockerイメージにコピーする方法を記述する。少なくとも、Spring Boot Dockerfileには次の情報を含める。
以下に、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」といった拡張子が付加されないよう注意する。
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イメージのプッシュ先はDocker Hubだが、イメージのホスト先として任意のアーティファクトレジストリを構成してホストすることもできる。
Dockerコンテナ化したSpring BootアプリケーションをDocker Hubにプッシュするには、ログインしてプッシュを実行するだけだ。以下の2つのコマンドを実行して、Spring Bootイメージを Docker Hubアカウントにプッシュする。
docker login docker push cameronmcnz/roshambo:latest
コマンド実行後、Docker Hubの自身の個人アカウントに移動すると、最近プッシュされたイメージの一覧に新しいイメージが表示される。
Dockerコンテナ化したSpring Bootアプリケーションを実行するには、以下のようにポートマッピングを指定して「docker run」コマンドを実行する。
docker run –p 80:8080 cameronmcnz/roshambo
このコマンドによって公開したDockerコンテナがローカルPCで実行され、ブラウザからアプリケーションにアクセスできるようになる。
コンテナベースのパッケージングは、マイクロサービスとクラウドネイティブアプリケーションのデプロイメントとランタイム管理において、極めて重要な役割を果たす。Spring BootアプリケーションをDockerコンテナ化すると、テストからデプロイメントまで、ソフトウェア開発ライフサイクルの多くの側面を大幅に簡素化できる。
Copyright © ITmedia, Inc. All Rights Reserved.