Spring BootアプリをDockerコンテナ化する方法:「Dockerfile」の書き方とは
Spring BootアプリケーションをDockerコンテナ化すると、テストからデプロイメントまで、ソフトウェア開発ライフサイクルの多くの側面を大幅に簡素化できる。
Spring Bootは、マイクロサービスや「Twelve-Factor App」(12のベストプラクティスに沿ったクラウドネイティブなアプリケーション)の構築に特化した独自のクラウドネイティブソフトウェア開発フレームワークだ。
一方、コンテナ管理ツールは「Podman」や「containerd」など多数存在するが、最もよく使われているのは「Docker」だ。従って、クラウドネイティブ開発者は、Spring BootアプリケーションをDockerコンテナとしてデプロイする方法を理解しておく必要がある。
Spring BootアプリケーションをDockerコンテナ化する方法
Spring Bootアプリケーションは以下の手順に従ってDockerコンテナ化する。
- Spring Bootプロジェクトのパッケージのタイプを「Jar」に設定する
- 「Maven」または「Gradle」を使用してSpring Bootアプリケーションをビルドする
- プロジェクトのルートにSpring Boot用のDockerfileを追加する
- 「docker build」コマンドを実行してSpring BootのDockerイメージを作成する
- 「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.
関連記事
- WasmerでJavaScriptやブラウザからCプログラムをコンパイル可能に ローカルで試せるデモも公開
Wasmerは、同社のWebAssemblyランタイム「Wasmer」とJavaScript SDKの最新リリースにより、JavaScriptとブラウザでC/C++コンパイラ「clang」が実行可能になったと発表した。 - Rust and WebAssemblyでSPAに一覧表示と追加機能を実装しよう
第13回では、第12回の続きとして、TODO投稿アプリSPAの機能を拡張していきます。第13回では、タスク表示、追加といった機能の実装を通じて、WebAssemblyにおけるDOMの操作やイベントハンドラの記法、Web Storageの利用方法について理解します。 - オープンマルチモーダルAI「Molmo」リリース 公開された4つのモデルのパフォーマンス、既存モデルとの違いとは?
アレン人工知能研究所は、オープンマルチモーダルAI「Molmo」を発表した。最初のリリースとして、4つのモデルを公開した。