378
334

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

docker-compose でMySQL環境簡単構築

Last updated at Posted at 2018-12-02

はじめに

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_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ファイルを実行します。

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で確認してみましょう。

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

スクリーンショット 2018-11-28 11.28.31.png

最後に

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

378
334
2

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
378
334

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?