Edited at

docker-compose でMySQL環境簡単構築


はじめに

docker-composeを使って、MySQL環境を構築します。サンプルとしてtestテーブル作成〜phpMyAdminで確認できるまでの手順をご紹介します。なるべく、シンプルにという事で、MySQLとphpMyAdmin用のコンテナのみの構築となっております。


環境

MySQL 5.7


構成

以下のような構成になります。

なお、dataはディレクトリになります。MySQL起動しSQLを叩いた際に、data以下に各種ファイルなどが自動的に作成されるようになります。

├── docker

│   └── db
│   ├── data
│   ├── my.cnf
│   └── sql
│   ├── 001-create-tables.sql
│   └── init-database.sh
├── docker-compose.yml
└── init-mysql.sh


構築


1. docker-compose.yml 作成

MySQLとphpMyAdmin用のコンテナをそれぞれ構築します。


docker-compose.yml

version: '3'

services:
# MySQL
db:
image: mysql:5.7
container_name: mysql_host
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_database
MYSQL_USER: docker
MYSQL_PASSWORD: docker
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db/sql:/docker-entrypoint-initdb.d
ports:
- 3306:3306

# phpMyAdmin
phpmyadmin:
container_name: test_phpmyadmin
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=mysql_host
- PMA_USER=root
- PMA_PASSWORD=root
ports:
- 8080:80



2. SQL 作成


MySQLの設定ファイル

お好みに合わせてご変更ください。


mycnf

[mysqld]

character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4



サンプルテーブル構築用のcreate文


001-create-tables.sql

---- drop ----

DROP TABLE IF EXISTS `test_tqable`;

---- create ----
create table IF not exists `test_table`
(
`id` INT(20) AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL,
`created_at` Datetime DEFAULT NULL,
`updated_at` Datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;



3. 初期化用シェルスクリプト


コンテナ内に配備するinit-database.sh

こちらのシェルスクリプトでsqlファイルを実行します。


init-database.sh

#!/usr/bin/env bash

#wait for the MySQL Server to come up
#sleep 90s

#run the setup script to create the DB and the schema in the DB
mysql -u docker -pdocker test_database < "/docker-entrypoint-initdb.d/001-create-tables.sql"



コンテナにわざわざ入るのが面倒(笑)なのでinit-mysql.sh

注: 実行権限を付与していないとエラーになる場合があるので1行目で権限変更しています。


init-mysql.sh

#!/bin/sh

docker-compose exec db bash -c "chmod 0775 docker-entrypoint-initdb.d/init-database.sh"
docker-compose exec db bash -c "./docker-entrypoint-initdb.d/init-database.sh"


実行


docker起動

docker-compose up -d


docker起動確認

注: 起動に失敗していたら上記のdocker起動コマンドを再度叩いてください。

docker-compose ps


DB初期化(シェル実行)

./init-mysql.sh


確認

phpMyAdminで確認してみましょう。

http://localhost:8080

下記のようになって入れば成功です。


最後に

docker-composeを使用しての、MySQL環境の構築でした。実際には、PHPやRubyなど他のコンテナと組み合わせて使用する事になるかと思います。今回はなるべくシンプルにMySQLのコンテナに絞ってご紹介させていただいたので、ぜひ他のコンテナと組み合わせて使用してみてください。