はじめに
Webアプリを開発するとき、環境構築って結構大変ですよね?「動く環境を作るだけで疲れた…」なんてこと、よくあると思います。でも、Docker
を使えば簡単に開発環境を整えることができます!
今回は、Spring Boot のアプリを Docker で動かす方法を紹介します!
プロジェクト構成
今回のプロジェクトはこんな感じの構成になっています。今回は前回の記事にて作成したアプリケーションを基にコンテナを作成します。
前回の記事リンク
Javaって何から始める?Spring Bootで簡単なアプリ開発を体験!
.
├── demo
│ ├── src
│ │ ├── main
│ │ │ ├── java/com/example/demo
│ │ │ │ ├── controller/HelloController.java
│ │ │ │ ├── form/HelloForm.java
│ │ │ │ ├── DemoApplication.java
│ │ │ └── resources/templates/hello.html
│ ├── pom.xml
│ └── Dockerfile
└── docker-compose.yml
Spring Boot のプロジェクトを `demo` フォルダ内に作成し、Docker でコンテナ化して動かします!
必要なファイルの作成
1. `Dockerfile` の作成
まずは、Spring Boot のアプリをコンテナ化するための `Dockerfile` を作成します。
# ベースイメージとして OpenJDK 17 を使用
FROM openjdk:17-jdk-alpine
# Maven をインストール
RUN apk add --no-cache maven
# 作業ディレクトリを設定
WORKDIR /app
# 依存関係を事前にダウンロード(ビルド時間短縮のため)
COPY demo/pom.xml .
RUN mvn dependency:go-offline -B
# プロジェクトのソースコードをコピー
COPY demo/ .
# JAR ファイルを作成(テストはスキップ)
RUN mvn clean package -DskipTests
# ホットリロードを有効にする環境変数を設定
ENV JAVA_OPTS="-Dspring.devtools.restart.enabled=true -Dspring.devtools.livereload.enabled=true"
# アプリケーションの起動
ENTRYPOINT ["java", "-jar", "target/demo-0.0.1-SNAPSHOT.jar", "--spring.devtools.restart.enabled=true"]
この `Dockerfile` は、
-
OpenJDK 17 のコンテナをベースにして、Maven をインストール
-
依存関係を事前にダウンロードしてビルド時間を短縮
-
Spring Boot アプリをビルドして JAR ファイルを実行
-
ホットリロード(コード変更の即時反映)を有効化
という構成になっています!
Dockerfileとは?
Dockerfile は、Docker
コンテナを作成するための「設計図」のようなものです。家を建てるときの設計図に「ここにリビングを作る」「キッチンはここ」と書くのと同じように、Dockerfile
には「どんなソフトウェアを使うか」「どうやってアプリを動かすか」を記述します。
簡単に言えば、アプリを動かすために必要な手順や設定をまとめたファイルです。これがあれば、どこでも同じ環境を再現できます!
2. `docker-compose.yml` の作成
次に、`docker-compose.yml` を作成して、Docker コンテナの管理を楽にします。
version: '3.8'
services:
demo:
image: sb-app # 使用するDockerイメージの名前
build:
context: . # Dockerfile のあるディレクトリを指定
dockerfile: demo/Dockerfile # ビルドに使うDockerfileのパス
ports:
- "8081:8080" # ホストの8081ポートをコンテナの8080ポートにマッピング
volumes:
- ./demo:/app:cached # ローカルのソースコードをコンテナにマウント(ホットリロード対応)
- ~/.m2:/root/.m2 # Maven のキャッシュを共有(ビルド時間短縮。Mavenのキャッシュは以前のビルドで取得したライブラリを再利用するための仕組みです)
environment:
- JAVA_OPTS=-Dspring.devtools.restart.enabled=true -Dspring.devtools.livereload.enabled=true # ホットリロードを有効化
command: mvn spring-boot:run # Spring Boot の開発用サーバーを起動
この `docker-compose.yml` は、
-
`8081:8080` でローカルのポートをマッピング(Webブラウザで `localhost:8081` にアクセスすればアプリが見れる!)
-
ローカルのコードをコンテナと共有(コードを変更したらすぐ反映される!)
-
Maven のキャッシュを共有(ビルドの時間を短縮!)
-
`mvn spring-boot:run` で Spring Boot のアプリを起動!
という感じで、開発が快適になるように設定しています。
docker-compose.ymlとは?
docker-compose.yml は、複数のコンテナをまとめて管理するための「指揮者」のような存在です。もしコンテナが楽器だとしたら、docker-compose.yml
はそれらを一斉に演奏させる指揮者みたいなもの。
このファイルに「どのコンテナを動かすか」「どのポートで通信するか」「どのファイルを共有するか」などを設定します。これによって、複数のサービス(例:アプリ+データベース)を一括で起動・停止できます。
コンテナの起動方法
では、実際にコンテナを立ち上げてみましょう!
# Docker Compose でコンテナを起動
$ docker-compose up --build
これだけで、Spring Boot のアプリがコンテナ内で動きます!
ブラウザで `http://localhost:8081` にアクセスすると、Spring Boot のアプリが表示されるはずです!🎉
まとめ
今回は Spring Boot を Docker で動かす環境構築 を紹介しました!
-
Docker を使うことで、環境構築がラクになり、どこでも同じ環境で開発できるようになります。
-
Mavenのキャッシュ や ホットリロード などを活用することで、開発の効率が大幅に向上します。
次のステップとして、以下のことにチャレンジしてみましょう!
-
データベースの連携: Docker Compose で MySQL などのデータベースを追加してみる。
-
マルチコンテナ構成: フロントエンドとバックエンドを分離して、それぞれのコンテナを連携させる。
-
CI/CDの導入: Docker イメージを自動ビルド&デプロイするパイプラインを構築してみる。
最後に
「環境構築でハマるのもうイヤ!」って人は、ぜひこの方法を試してみてください!Docker をうまく使って、開発をもっと楽しくしましょう!🚀
Dockerの応用例として、こちらの記事では
MySQLの構築方法
について詳しく解説しています。Docker環境でのデータベース構築に興味のある方は、ぜひ参考にしてみてください!