Contents
Spring Bootアプリケーションのビルド方法
Spring Bootマイクロサービスのデプロイ準備として、まずMavenまたはGradleでプロジェクトをビルドする必要があります。ビルド済みのJARファイルは後続のDocker化に不可欠です。
ビルドツール選定と基本手順
MavenとGradleの主な違い
| 項目 | Maven | Gradle |
|---|---|---|
| 構文スタイル | XMLベース | Groovy/Kotlinに基づくDSL |
| 学習曲線 | 伝統的で直感的 | より柔軟だが初期学習が必要 |
| コミュニティサポート | Spring公式推奨 | 活発なプラグインエコシステム |
注意: 最新バージョンのSpring Boot(3.2以降)ではGradleがより強く推奨されています。
実行手順例
-
Mavenの場合:
mvn clean package -
Gradleの場合:
./gradlew build
生成されたJARファイルはtarget/ディレクトリ内(Maven)またはbuild/libs/ディレクトリ(Gradle)に保存されます。このファイルがDockerイメージのベースとなるため、存在確認が重要です。
Dockerfile作成のベストプラクティス
Dockerfileを作成する際には、セキュリティとパフォーマンスを考慮した設計が必要です。特にマルチステージビルドや最小限のベースイメージ選定が推奨されます。
最小限のベースイメージ選択比較
|
1 2 3 4 5 6 |
| イメージ名 | バージョン | 大きさ | 推奨用途 | |---------------------------|--------------|------------|--------------------------| | openjdk:17-jre-slim | 17.0.8 | 約26MB | 生産環境の最終イメージ | | eclipse-temurin:17-jdk-alpine | 17.0.8 | 約59MB | ビルドステージ用 | | jenkins/jenkins:lts | N/A | 数百MB | CI/CD環境(避ける推奨) | |
重要ポイント:
-USER nobody:nobodyで非rootユーザーを指定
-multi-stage buildで不要なファイルを排除
- セキュリティリスク軽減のため、JDKはビルドステージのみで使用
以下が代表的なDockerfileテンプレートです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# マルチステージビルド FROM eclipse-temurin:17-jdk-alpine AS build COPY . /app WORKDIR /app RUN ./mvnw package -DskipTests FROM openjdk:17-jre-slim COPY --from=build /app/target/my-service.jar /app.jar EXPOSE 8080 USER nobody:nobody ENTRYPOINT ["java", "-jar", "/app.jar"] |
コンテナイメージの構築手順
Dockerfileが完成すれば、コンテナイメージをローカルに構築・保存し、必要に応じてレジストリにプッシュします。
イメージ作成ステップ
-
Dockerfileがあるディレクトリで実行:
docker build -t my-service:v1 . -
ローカルイメージ一覧の確認:
docker images -
Docker Hubへのプッシュ(認証が必要):
docker push my-username/my-service:v1
プライベートレジストリ対応手順
-
レジストリログイン:
docker login <レジストリURL> -
タグ変更:
docker tag my-service:v1 <レジストリURL>/my-service:v1 -
再プッシュ:
docker push <レジストリURL>/my-service:v1
Docker Composeによる複数サービスのデプロイ
Docker Composeは、複数コンテナを一括で管理できるツールです。マイクロサービスアーキテクチャでは必須スキルになります。
複数サービス構成例(PostgreSQL + Service)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
version: '3.8' services: my-service: image: my-username/my-service:v1 ports: - "8080:8080" depends_on: - db db: image: postgres:15-alpine environment: POSTGRES_USER: user POSTGRES_PASSWORD: password volumes: - db-data:/var/lib/postgresql/data volumes: db-data: |
実行コマンド:
- デプロイ:docker-compose up -d
- サービス停止:docker-compose down --remove-orphans
クラウド環境へのデプロイ例(汎用的アプローチ)
マイクロサービスのクラウドデプロイは、AWS ECSやGCP Cloud Runなど多数の選択肢があります。以下に共通手順を示します。
デプロイフロー
-
イメージビルド
docker build -t my-service:v1 . -
レジストリへのプッシュ
(AWS ECRなら):
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin <レポジトリURL>
docker tag my-service:v1 <レポジトリURL>/my-service:v1
docker push <レポジトリURL>/my-service:v1 -
クラウドサービス設定
- AWS ECS: タスク定義を作成し、
Fargate選択(インフラ管理不要) - GCP Cloud Run: 事前コンパイル済みイメージを指定
注意: プライベートレジストリ利用時は、クラウドサービスとの認証設定が必要です。
デプロイ後の監視・トラブルシューティング
デプロイが完了した後も、コンテナの状態をモニタリングし、問題発生時に迅速に対応することが重要です。
主な監視ツール比較
|
1 2 3 4 5 6 7 |
| ツール名 | 特長 | 有料/無料 | |----------------|-------------------------------|-----------| | **Prometheus** | メトリクス収集・アラーム設定 | 無料 | | **Grafana** | 可視化に優れたダッシュボード | 無料 | | **CloudWatch** | AWS専用の監視ツール | 有料 | | **ELKスタック** | ロギング・検索・分析に強 | 無料 | |
コモンエラーケースと対処法
- コンテナが起動しない
- Dockerイメージのバージョンを確認(
docker inspect) -
マルチステージビルドでJARファイルが正しくコピーされているか検証
-
ポート接続エラー
- セキュリティグループ/ファイアウォール設定を再確認
-
実際のコンテナログを
docker logs <コンテナID>で確認 -
メモリ不足
- イメージサイズを最適化(
apk del --no-confirm <パッケージ名>) - クラウドサービスのリソース制限設定を変更
デプロイ全体の流れと注意点
全体フロー
- Spring Bootアプリケーションビルド
- Dockerイメージ作成
- コンテナローカル動作確認
- レジストリへのプッシュ
- クラウド環境デプロイ
- モニタリングとトラブルシューティング
重要: 各ステップで
docker run --rm -it my-service:v1のようなローカルテストを実施し、予期せぬ挙動がないか確認してください。
まとめ
本記事では、2023年時点の最新情報に基づきSpring BootマイクロサービスのDockerデプロイについて体系的に解説しました。
技術選定や手順に加え、セキュリティ・パフォーマンス・運用安定性への配慮も含めて、実務で活用可能な知識を提供しています。
導入段階でしっかり理解することで、将来的なスケーリングやクラウド移行にも対応しやすくなります。