LoginSignup
25
31

More than 5 years have passed since last update.

docker-composeとMySQL公式イメージで簡単に開発環境用DBを作る

Posted at

やりたいこと

ローカルで開発するときに簡単に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が実行されるので、再実行する際はデータを破棄する必要があります。構築段階では永続化せずに使う方がやりやすいかもしれません。

25
31
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
25
31