2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SpringBoot 向けのMySQLセットアップ覚え書き

Posted at

SpringBoot向けのMySQLサーバーのセットアップの手順を整理

目的

SpringBoot向けのMySQLサーバーをDockerを使ってセットアップ覚え書き
永続化設定済みでMySQLコンテナ起動確認まで

環境

WSL バージョン: 2.3.26.0
カーネル バージョン: 5.15.167.4-1
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.22631.4460
Rancher Desktop V1.16.0
MySQL 8.0

プロジェクト作成

まずはSpringInitializrを使用してプロジェクトのひな形を生成。
今回はDBの起動までなので依存ライブラリの設定などはシンプルに無しで進める。

image.png

demoプロジェクト内は以下の構成になっている。

.
├── .mvn
│   └── wrapper
│       └── maven-wrapper.properties
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── demo
│   │   │               └── DemoApplication.java
│   │   └── resources
│   │       └── application.properties
│   └── test
│       └── java
│           └── com
│               └── example
│                   └── demo
│                       └── DemoApplicationTests.java
├── .gitattributes
├── .gitignore
├── HELP.md
├── mvnw
├── mvnw.cmd
└── pom.xml

srcと同じ階層にinfraフォルダを作成し、さらにdbフォルダを追加。
image.png

MySQLコンテナ作成

コンテナの設定とMySQLの設定のために次の2つのファイルを作成する。

  • Dockerfile
  • my.cnf

my.cnfファイルはMySQLの設定ファイル。
格納先は複数あり、読み込み優先度が異なる。

Dockerfile作成

demo\infra\db\DockerfileDockerfileを作成する。

FROM mysql:8.0

COPY ./conf.d/my.cnf /etc/mysql/conf.d/my.cnf

RUN chmod 644 etc/mysql/conf.d/my.cnf

RUN mkdir -p /var/log/mysql \
    && chown -hR mysql:mysql /var/log/mysql

Dockerfileの内容

  1. MySQLのバージョンを指定
  2. MySQLの設定ファイルをコンテナ内に複製
  3. 設定ファイルの権限変更
  4. サブディレクトリを含めて/var/log/mysqlを作成
  5. ディレクトリとシンボリックリンクの両方の所有者をmysqlに変更

MySQL設定ファイルmy.cnf作成

dbフォルダにconf.dフォルダを作成する。
conf.dフォルダにmy.cnfファイルを作成する。
my.cnfのパスはdemo\infra\db\conf.d\my.cnfとなる。

my.cnfの中身は次のように設定する。
[mysqld]はMySQLサーバーが対象の設定を表す。

他に[client]などがあり、[client]の場合はコンテナで使用するMySQLクライアントの設定を表す。

my.cnf
[mysqld]
#error log
log-error = /var/log/mysql/mysql-error.log

#slow query log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1.0

#general log
general_log = 1
general_log_file = /var/log/mysql/mysql-general.log

今回はログの出力先等を設定している。

composeコマンド準備

docker composeのコマンドを使用するための準備。
infraフォルダに次の2つのファイルを作成する。

  • compose.yml
  • .env

compose.yml

services:
  db:
    build: ./db
    restart: always
    container_name: mysql-container
    ports:
      - "${FORWARD_DB_PORT:-3306}:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
      MYSQL_ROOT_HOST: "%"
      MYSQL_DATABASE: "${DB_DATABASE}"
      MYSQL_USER: "${DB_USER}"
      MYSQL_PASSWORD: "${DB_PASSWORD}"
    volumes:
      - db_store:/var/lib/mysql
      - ./db/logs:/var/log/mysql
volumes:
  db_store:

build:の部分で指定したディレクトリをのDockerfileを使用してコンテナを作成できる。
restart: alwaysでコンテナが停止したときに自動で再起動するように設定。
ports:"${FORWARD_DB_PORT:-3306}:3306"は環境変数FORWARD_DB_PORTが設定されていない場合デフォルトで3306ポートを使用することを表す。

トップレベルのvolumes:は複数のコンテナを横断してボリュームを利用する場合必要となる。

.envファイル

.env
FORWARD_DB_PORT= 3306

DB_DATABASE= demoMySQL
DB_USER= demouser
DB_PASSWORD= demopassword

さらにdemoプロジェクト内の.gitignoreファイルに .envファイルとdbのログフォルダを追加する。

.gitignore
#env
.env
#db logs
demo/infra/db/logs/

イメージ作成

RancherDesktopが起動していることを確認。
image.png
次のコマンドを
demo\infraの階層で実行する。

docker compose build

image.png

エラーにならず完了すればOK。

demo\infra\dbdocker imagesのコマンドを打つとビルドされたイメージを確認することができる。

コンテナ起動

作成したイメージをもとにコンテナを作成して起動する。
demo\infraの階層で次のコマンドを実行することで起動まで行える。

docker compose up

image.png
(timezoneを設定していないためtimezone周りの設定をskipするメッセージが出る。)

image.png
既にコンテナは起動済み。
次の画像のようにlogsのフォルダが自動で生成されログが格納される。
image.png

Ctrl+Cで次のようなメッセージを表示してコンテナを停止できる。
image.png

同じコンソールで作業を続けたい場合はdocker compose up -dでバックグラウンド起動を行う。

コンテナを起動した状態でdemo\infradocker compose ps -a
image.png

docker compose ps-aオプションをつけると停止中のコンテナも一覧に表示することができる。(つけていない場合は起動中のコンテナのみ表示される。)

STATUSがUp 27 secondsとなっていて無事コンテナが起動していることが確認できた。

補足

  • イメージとコンテナを削除する
docker compose down

image.png

  • イメージ、コンテナ、ボリュームをまとめて削除する
docker compose down -v

image.png

参考

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?