Contents
Spring BootアプリケーションのJARファイル作成
Spring BootアプリケーションをDockerで実行するには、まず実行可能JARファイルの生成が必要です。この手順はローカルでの動作確認や本番環境へのデプロイに共通します。
Maven/Gradleによる実行可能JARの生成方法
Spring Bootプロジェクトでは、MavenまたはGradleを使用して実行可能JARを作成できます。
Mavenの場合、spring-boot-maven-pluginをpom.xmlに追加することで自動で実行ファイルが生成されます。
|
1 2 3 4 5 6 7 8 9 |
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> |
Gradleの場合、applicationプラグインを使用し、bootJarタスクを実行します。
|
1 2 3 |
apply plugin: 'application' mainClassName = 'com.example.Application' |
注意: Mavenのバージョンは3.8.7と記載されていますが、最新バージョン(例: 3.9.x)への移行が推奨されます。プロジェクトに合わせた適切なバージョン管理が必要です。
生成されたJARファイルは./target/(Maven)または./build/libs/(Gradle)に保存されます。このファイルをDockerイメージに組み込むことで、コンテナ内での実行が可能になります。
Dockerfileの作成と構成
Dockerfileは、Spring Bootアプリケーションを動作させるための「レシピ」です。適切なベースイメージの選定やマルチステージビルドの活用により、セキュリティとパフォーマンスが向上します。
ベースイメージ選定のポイント
ベースイメージはJavaバージョンに応じて選択します。以下の表で比較し、目的に合ったものを選ぶことが重要です。
| ベースイメージ | 特徴 | 使用シーン |
|---|---|---|
openjdk:17-jdk-alpine |
シンプルで軽量 | コンテナサイズを最小限にしたい場合 |
eclipse-temurin:17-jdk-focal |
頻繁なセキュリティパッチが適用される | 稳定性が重視される環境 |
補足:
eclipse-temurinはOpenJDKの実装で、企業やプロジェクト向けにメンテナンスされています。ベースイメージの選定時には、サポート終了日やライセンス条件を確認してください。
マルチステージビルドの活用
マルチステージビルドを使うことで、最終的なイメージサイズを抑えることができます。
|
1 2 3 4 5 6 7 8 9 10 11 |
# ビルドフェーズ FROM maven:3.9.0-openjdk-17 AS builder COPY . /app WORKDIR /app RUN mvn package # 運用フェーズ FROM openjdk:17-jdk-alpine COPY --from=builder /app/target/myapp.jar /app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] |
注意: ビルドフェーズで使用するMavenバージョン(例: 3.9.0)はプロジェクトの依存関係に合わせて最新版を指定してください。
この方法は、ビルドに必要なツール(Maven)を最終イメージに含まないため、セキュリティ面で有利です。
Dockerイメージのビルド・プッシュ手順
生成したDockerfileからイメージを作成し、レジストリへ公開することで、ローカル環境だけでなくクラウドでの利用も可能になります。
Docker Hubへの公開手順
-
ローカルでイメージをビルドする
bash
docker build -t my-springboot-app:latest . -
Docker Hubにログイン
bash
docker login -
イメージをプッシュ
bash
docker push my-springboot-app:latest
ベストプラクティス: タグ付けで
v1.0.0などのバージョン管理を行うと、CI/CDとの連携が容易になります。
AWS ECS/Fargateによるクラウドデプロイ
AWS ECS(Elastic Container Service)は、Dockerコンテナをクラウドで運用するためのサービスです。Fargateを選択することで、インフラ管理を簡略化できます。
Task Definitionの作成手順
- AWSコンソールからECSクラスタを作成
- Task Definitionでコンテナ定義を設定し、Dockerイメージ(公開済みまたはプライベートレジストリ)を指定
- Security Groupでネットワークアクセスを制御(必要に応じてHTTPSや特定ポートを開く)
ポイント: Fargateはノード管理不要なため、開発者はアプリケーションのデプロイに集中できます。ただし、セキュリティグループの設定には注意が必要です。
Docker Composeでのローカル環境構築
複数コンテナを連携させるローカル開発環境を構築する際には、Docker Composeが効果的です。
サービス間依存関係の定義方法
docker-compose.ymlファイルにサービスとネットワークの設定を記述します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
version: '3.8' services: app: image: my-springboot-app:latest ports: - "8080:8080" depends_on: - db db: image: postgres:14 environment: POSTGRES_USER: user POSTGRES_PASSWORD: password |
補足:
postgres:14は現在の安定版ですが、プロジェクトに応じて最新バージョン(例: 15)への移行も検討してください。
この設定で、アプリケーションとデータベースの連携が自動化され、ローカル環境での本番に近い構成が可能です。
まとめ
- JARファイル作成:MavenまたはGradleを使用し、実行可能な形式へビルド
- Dockerfile構成:軽量なベースイメージとマルチステージビルドでセキュリティ強化
- イメージの公開:Docker Hubやプライベートレジストリを活用したバージョン管理
- クラウドデプロイ:AWS ECS/Fargateでインフラ管理を簡略化
- ローカル環境構築:Docker Composeによりサービス連携とネットワーク設定を効率的に行う
本ガイドに従って、Spring BootアプリケーションのDockerデプロイをスムーズに実施してください。