やりたいこと
ローカルで開発するときに簡単にMySQL環境を作りたい。
docker-composeでMySQLコンテナとアプリケーションコンテナを立てて接続する。
MySQLは初期データを入れられるようにしておく。
環境
- OSX El Capitan 10.11.5
- Docker version 1.13.1
- docker-compose version 1.11.1
本題
MySQLの公式リポジトリは以下です。
https://hub.docker.com/_/mysql/
色々オプションをつけて起動することができるので、今回はdocker-composeを用いて、
- データの永続化
- rootパスワードの設定
- 初期データの挿入
- 日本語使いやすいように文字コードの設定
までを行うようにしています。
構成
dir
├ docker-compose.yml
├ mysql/
│ ├ Dockerfile
│ ├ my.cnf
│ └ sqls/
│ └ initialize.sql
└ app/ # 今回は省略
docker-compose.yml
version: '2'
services:
mysql:
build: ./mysql/
volumes:
- ./mysql/mysql_data:/var/lib/mysql # データの永続化
- ./mysql/sqls:/docker-entrypoint-initdb.d # 初期データ投入
environment:
- MYSQL_ROOT_PASSWORD=好きなパスワード #rootパスワードの設定
appserver:
build:
context: ./app/
links:
- mysql
mysql/Dockerfile
FROM mysql:5.7
EXPOSE 3306
ADD ./my.cnf /etc/mysql/conf.d/my.cnf # 文字コード設定のためconf追加
CMD ["mysqld"]
mysql/my.cnf
[mysqld]
character-set-server=utf8
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
mysql/sqls/initialize.sql
CREATE DATABASE app;
use app;
CREATE TABLE users (
id int(11) unsigned not null auto_increment,
name varchar(255) not null,
created_at datetime not null default current_timestamp,
updated_at datetime not null default current_timestamp on update current_timestamp,
primary key (id)
);
$ docker-compose build
$ docker-compose up -d
app側からは ホスト: mysql, ポート: 3306 で繋がります。
初期データに関しては新規立ち上げの時のみSQLが実行されるので、再実行する際はデータを破棄する必要があります。構築段階では永続化せずに使う方がやりやすいかもしれません。