はじめに
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用のコンテナをそれぞれ構築します。
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の設定ファイル
お好みに合わせてご変更ください。
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
サンプルテーブル構築用のcreate文
---- drop ----
DROP TABLE IF EXISTS `test_table`;
---- 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ファイルを実行します。
#!/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行目で権限変更しています。
#!/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で確認してみましょう。
下記のようになって入れば成功です。
最後に
docker-composeを使用しての、MySQL環境の構築でした。実際には、PHPやRubyなど他のコンテナと組み合わせて使用する事になるかと思います。今回はなるべくシンプルにMySQLのコンテナに絞ってご紹介させていただいたので、ぜひ他のコンテナと組み合わせて使用してみてください。