概要
docker を使ったSpring Boot + MySQL の環境構築方法をまとめます。
前提
事前にdockerとgradleをインストール済みとします。
サンプルコード
ディレクトリ構成
$ tree -L 2
.
├── Dockerfile
├── README.md
├── app # 作成したプロジェクト
│ ├── HELP.md
│ ├── bin
│ ├── build.gradle
│ ├── docker-compose.yml
│ ├── gradle
│ ├── gradlew
│ ├── gradlew.bat
│ ├── settings.gradle
│ └── src
├── docker-compose.yml
└── mysql # mysqlの設定ファイル
├── init
├── my.conf
└── mysql.cnf
9 directories, 11 files
docker-compose.ymlとDockerfileを作成し、同じディレクトリ内のapp配下に作成したプロジェクトを配置します。
mysqlは以下にはdockerで作成するmysqlサーバーの設定ファイルを配置します。
docker-compose.ymlの作成
version: "3"
services:
# SQLのサービス
db:
image: mysql:8.0
container_name: "spring_db"
ports:
- "3306:3306"
volumes:
- ./mysql/init/:/docker-entrypoint-initdb.d # テーブル作成やデータの初期化
- ./mysql/mysql.cnf:/etc/mysql/conf.d/my.cnf
environment:
MYSQL_DATABASE: "spring_test"
MYSQL_ROOT_USER: "root"
MYSQL_ROOT_PASSWORD: "root"
TZ: "Asia/Tokyo"
# springアプリケーションのサービス
spring:
container_name: "spring"
ports:
- "8080:8080"
tty: true
depends_on:
- db
volumes:
- ./:/app:cached
working_dir: /app
build: .
上記ymlファイルを作成し配置します。
DockerFileの作成
FROM eclipse-temurin:17-jdk-alpine
ENTRYPOINT ["java","-jar","/app/build/libs/TaskList-0.0.1-SNAPSHOT.jar"]
上記Dockerfileファイルを作成し配置します。
docker-compose.yml内で記述することも出来ますが、今後個別に設定を追加することを想定してDockerfileを定義しています。
アプロケーションの起動
gradle buildでjarファイル作成後、docker composeで起動させます。
# アプリケーションのビルド
gradle clean build
# 起動
docker compose up -d
最後に
あらかじめgradle buildをしないといけないのが気持ち悪いので、docker composeと同時にビルドするよう設定したいのですが、上手く出来ずやり方を模索中です。
参考