はじめに
Docker Compose で Spring Boot のアプリと MySQL を動かす環境を構築していきます。
構築する環境
今回動かすコンテナは下記の 2 つになります。
- Spring Boot のアプリケーション
- MySQL
用意するファイルとディレクトリ構造は下記の通りです。今回は Spring Boot のソースコードについての紹介は省略させていただきます。
.
├── docker-compose.yaml
├── mysql # MySQLのデータ
└── spring-boot-sample-api # Spring Bootのアプリケーション
Spring Boot アプリのイメージ作成
Spring Boot のアプリケーションのイメージは Cloud Native Buildpacks で作成します。
Cloud Native Buildpacks については下記を参考にしてください。

Cloud Native Buildpacksについてざっくり理解する
はじめにCloud Native Buildpacksについてざっくり解説し、実際に使ってどんなことができるか試してみたいと思います。Cloud Native BuildpacksとはCloud Native Buildpacksとは、アプ...

【Cloud Native Buildpacks】Paketoでjavaアプリをビルドしてみる
はじめにCloud Native Buildpacksを実現する一つであるPaketo Buildpacksを使ってjavaアプリのビルドをしてみます。Cloud Native Buildpacksについては、下記でざっくり解説しています。...
下記のコマンドでイメージのビルドをします。
pack build {image name} -p {path} --builder paketobuildpacks/builder:base
pack build spring-boot-sample-api -p spring-boot-sample-api --builder paketobuildpacks/builder:base
docker-compose.yaml 作成
docker-compose.yaml
を作成します。spring-boot コンテナと mysql コンテナを定義します。また、MySQL のユーザーやパスワードは環境変数で定義しています。
version: "3"
services:
spring-boot:
image: spring-boot-sample-api
ports:
- "8080:8080"
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: db
MYSQL_USER: spring-boot-user
MYSQL_PASSWORD: password
volumes:
- ./mysql/db:/var/lib/mysql
restart: always
コンテナ起動
Spring Boot のイメージとdocker-compose.yaml
が作成できたら、Docker Compose でコンテナを起動します。
docker compose up -d
起動したコンテナを確認してみます。
docker container ls
❯ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ea8c571b2fc mysql:8.0 "docker-entrypoint.s…" 13 seconds ago Up 11 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp spring-boot-sample-api-mysql-1
94deae710248 spring-boot-sample-api "/cnb/process/web" 13 seconds ago Up 11 seconds 0.0.0.0:8080->8080/tcp spring-boot-sample-api-spring-boot-1
MySQL の接続確認
とりあえず、MySQL のコンテナに入ってみます。
docker container exec -it {container name} bash
❯ docker container exec -it spring-boot-sample-api-mysql-1 bash
bash-4.4#
環境変数で定義したユーザーで MySQL に接続できます。
mysql -u spring-boot-user -p