🦔
【Docker】MySQLを簡単に構築
はじめに
dockerなら結構簡単にローカル環境にMySQLを構築できます。
公式で配布されているimageを利用してできるだけ手間かけずに構築していきます。
細かいところは公式ドキュメント参照
基本的に、ローカルで動かしてみたいとか、勉強用とかでとりあえず作成する用途です。少し時間がたつと、毎回忘れて毎回調べていたので、忘れてもコピペで行けるようにメモとして残しておきます。
目的
- dockerでMySQLの構築し、コンテナ作成で以下のことまで出来ること
- MySQLの設定を変更する
- root 以外のユーザを作成する
- 任意のDB接続ツールで、作成したユーザでログインできること
- create table まで実行できて、すぐにDBを使い始められるってことろまで確認
実行環境
- windows環境
- docker-desktop
- 任意のDB接続ツール
- 公式で配布してあるmysqlのイメージを利用
参考:https://github.com/docker-library/docs/tree/master/mysql
環境作成作業
ディレクトリ・ファイル構成
適当なディレクトリ(mysql)を作成して、下記のような感じでディレクトリとファイルを作成します。
ディレクトリ構成
mysql
∟ conf
∟ my.cnf
∟ .env
∟ docker-compose.yml
環境変数ファイル作成
.env
ROOT_PASS=root
DB_NAME=hoge-db
DB_USER=user
DB_PASS=p@ssw0rd
DB_PORT=3306
TZ=Asia/Tokyo
DB設定ファイル作成
my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
[client]
default-character-set=utf8mb4
- database単位での照合順序を変更したかったので作成
- すべてデフォルトでよい場合は、作成しなくても動く
docker-composeファイル作成(1)
(1)docker-compose.yml
version: '3'
services:
db:
image: mysql:8
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${ROOT_PASS}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASS}
TZ: ${TZ}
ports:
- ${DB_PORT}:3306
volumes:
- db-store:/var/lib/mysql
- ./conf/my.cnf:/etc/mysql/conf.d/my.cnf
volumes:
db-store:
基本的にコピペでOKです。簡単に説明すると、↓な感じです。
- db-storeという名前のvolume作成
-
/var/lib/mysql
をvolumeへマウントして永続化 - db設定ファイルの
/etc/mysql/conf.d/my.cnf
をローカルの./conf/my.cnf
へマウント - 構築時の変数を
.env
ファイルから読み込む
docker-composeファイル作成(2)※一時DB用
ちょっと変えて、コンテナを停止するたびにDB情報を破棄してくれる一時DBを作成することも可能です。
利用用途としては、unit testを自動で実行させる際のDBなどが考えられます。
(2)docker-compose.yml
version: '3'
services:
db:
image: mysql:8
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${ROOT_PASS}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASS}
TZ: ${TZ}
ports:
- ${DB_PORT}:3306
tmpfs:
- /var/lib/mysql
volumes:
- ./conf/my.cnf:/etc/mysql/conf.d/my.cnf
(1)のyamlとの違いは、/var/lib/mysql
へのマウント先のみです。
tmpfs
は、コンテナが停止するたびに破棄されるため、常にまっさらな状態のDBを利用できます。
# 停止させてから、起動したら初期化されます
docker-compose stop
docker-compose start
# 再起動でも初期化されてます
docker-compose restart
コンテナ作成・起動・確認
コンテナ作成&起動
docker-compose up -d
- DB接続ツールで接続できるか確認
- ホスト名 :localhost
- データベース名:hoge-db
- ユーザ名 :user
- パスワード :p@ssw0rd
- ポート番号 :3306
関連リンク
【Docker】【MySQL】コンテナ初回起動時にスクリプトを実行させる
【Docker】MySQL環境構築で嵌ったところ
Discussion