DokcerコンテナでMySQLを動かしてみる

Nov 1, 2015 · 338 words · 2 minutes read Docker MySQL

前回の記事でDocker Machineを触ったところで、次はMySQLに挑戦してみました。

Docker Hubの公式のMySQLリポジトリがあって、詳細に一通りの説明がありました。

Docker Hub - mysql

MySQLのバージョン

2015/11/01現在では3つのバージョンがあり、最新は5.7です。

  • 5.5.46, 5.5
  • 5.6.27, 5.6
  • 5.7.9, 5.7, 5, latest

MySQLイメージをロードして起動する

$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest

オプション

  • --name mysql
    • コンテナ名
  • MYSQL_ROOT_PASSWORD=my-secret-pw
    • rootパスワードを指定する
  • mysql:latest
    • MySQLとそのバージョンを指定
  • ’-d’
    • バックグラウンドで実行

他にも

  • MYSQL_DATABASE
    • イメージの起動時にデータベースを作成する
  • MYSQL_USER, MYSQL_PASSWORD
    • 同じく起動時にユーザを作成
    • MYSQL_DATABASEと併用?
  • MYSQL_ALLOW_EMPTY_PASSWORD

が指定できる

ロードの確認

$ docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
c3026c2da6c3        mysql:latest        "/entrypoint.sh mysql"   29 seconds ago      Up 28 seconds       3306/tcp            mysql

MySQLの起動確認

$ docker exec -it mysql bash # mysqlは作成したコンテナ名

$ mysql --version                                            
mysql  Ver 14.14 Distrib 5.7.9, for Linux (x86_64) using  EditLine wrapper

$ mysql -u root -p      
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.9 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

ローカルマシンからコンテナのMySQLに接続

# ローカルから
$ echo $(docker-machine ip dev)
192.168.99.101
$ mysql -h 192.168.99.101 -uroot -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.99.101' (61)

接続できないのVMの3306ポートで動いているわけじゃなく、コンテナのポートで起動しているからだと思う。こういうときはポートフォワードしてやれば良さそう

docker runで作成したポートの変更方法がわからなかったので一旦削除して作りなおしました。

# 一旦停止してコンテナを削除
$ docker stop mysql
$ docker rmi -f mysql #依存コンテナを全て削除

# ポートを設定して再度作成
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 13306:3306 -d mysql:latest

# ローカルからポートを指定して接続
$ mysql -h 192.168.99.101 -uroot -P 13306 -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.9 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

今度は接続できました。

これでMySQLへの接続ができたので、次は最大の目的のコンテナで起動した2つのMy SQLのレプリケーションを試してみようと思います。