
MavenアプリのDocker化
勉強がてらに個人で利用する家計簿アプリを作成しています。
アプリをDockerで動くようにしました。
本記事はMavenプロジェクトのDockerイメージを作成する手順を整理しました。
プロジェクト構成
Spring Bootの一般的なプロジェクト構成をベースにしています。プロジェクトのルートディレクトリに、Dockerfileとdocker-compose.ymlを配置するシンプルな構成です。
プロジェクトルート/ ├─ src/ ├─ .mvn/ ├─ mvnw ├─ pom.xml ├─ Dockerfile └─ docker-compose.yml
マルチステージビルド
1つのDockerfileの中で複数のFROM命令を使用して、コンテナの役割を分割する。
-
ビルド環境(Builder)
maven:3.9-eclipse-temurin-21を使用。
ソースコードをコンパイルし、.jarファイルを作成する役割をします。 -
実行環境(Runner)
eclipse-temurin:21-jre-alpineを使用。
Builder環境で作成された成果物だけをCOPY --rom=builderコマンドで受け取り、実際にアプリを動かす役割をします。
マルチステージビルドの強み
- イメージサイズの削減
最終的なイメージには、数百MBもあるMavenやJDK、ソースコードが含まれない。動かすためだけの軽量な「JRE(Java実行環境)」と最小減のOSのみになるため、イメージのダウンロード時間やストレージ容量を節約できる。
ビルドの高速化
毎回のビルド時間を短縮するために、Dockerのキャッシュマウント機能と、Maven Wrappeer(mvnw)を使用します。これによりローカル環境で事前にビルドしておく必要がなくなります。
# Maven Wrapperをコピー COPY .mvn/ .mvn COPY mvnw pom.xml ./ # キャッシュをマウントして依存関係をダウンロード RUN --mount=type=cache,target=/root/.m2 \ ./mvnw dependency:go-offline -B