昨年からMySQLチームがオフィシャルレポジトリーをDockerに公開し、
最近少しずつ利用している方も増えてきて、
開発環境などでは簡単にDBが準備出来て工数削減も出来、
大活躍出来る仕組みなので簡単にレビューしておきます。
[Dockerレポジトリ]
https://hub.docker.com/_/mysql/ (Docker Team)
https://hub.docker.com/r/mysql/mysql-server/ (MySQL team at Oracle)
Tagに関しては、此方を確認下さい。(指定しない場合は、最新のイメージがダウンロードされます)
https://hub.docker.com/r/mysql/mysql-server/tags/
レポジトリーにはDockerのオフィシャルレポジトリーとMySQLチームが公開しているオフィシャルレポジトリーがあります。
イメージをPULLすると以下のような感じになります。
既に、docker pull mysql:5.7.10コマンドでDockerオフィシャルレポジトリからイメージをダウンロード済みの状態です。
追加で、MySQL@OracleのオフィシャルレポジトリーからDockerのイメージをダウンロードしてみます。
サイズだけ見ると、MySQL@Oracleのオフィシャルレポジトリーからダウンロードしたイメージの方がサイズは小さいです。
[root@DockerHost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mysql 5.7.10 ea0aca21950d 3 weeks ago 360.3 MB
[root@DockerHost docker]# docker pull mysql/mysql-server:5.7.10
5.7.10: Pulling from mysql/mysql-server
f359075ce4d8: Pull complete
df9c05f5df07: Pull complete
bea04efc3319: Pull complete
14204cc431b4: Pull complete
249d5b7b31c1: Pull complete
70a368114c59: Pull complete
c5b90de0636a: Pull complete
59e355dc43f6: Pull complete
f03e996fb5a3: Pull complete
69497ffa3023: Pull complete
e472f1765697: Pull complete
Digest: sha256:c9266386460cfb302d21615bbe8f6a16166b2376eb371095df7cc9a1c9cf6da1
Status: Downloaded newer image for mysql/mysql-server:5.7.10
[root@DockerHost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mysql 5.7.10 ea0aca21950d 3 weeks ago 360.3 MB
mysql/mysql-server 5.7.10 e472f1765697 4 weeks ago 294.6 MB
[root@DockerHost docker]#
Dockerオフィシャルイメージを利用してMySQLを構築してみます。
インスタンス作成時に、データディレクトリーを指定、オプションファイルを指定、インスタンス作成と同時に
データベース作成する為に以下のスクリプトを配置してあります。ソースを確認すると*.sqlか*.shを配置しておくと、
DB作成時に読み込んでSQL文を実行してくれます。(初期共通アカウントやDB作成に使えます)

[root@DockerHost docker]# ls -l /docker/init_script/sakila-db/init-docker-sakila.sql
-rw-r--r-- 1 root root 3421501 Jan 8 01:01 /docker/init_script/sakila-db/init-docker-sakila.sql
[root@DockerHost docker]#
[root@DockerHost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@DockerHost docker]# docker run --name my_docker01 -v /docker/docker01:/var/lib/mysql -v /docker/option1:/etc/mysql/conf.d -v /docker/init_script/sakila-db:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=mysql -d mysql:5.7.10
5152a22b2aa0c724bd260552205ebf566a21b9d854a54921f02a96e40817a930
[root@DockerHost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5152a22b2aa0 mysql:5.7.10 "/entrypoint.sh mysql" 11 seconds ago Up 9 seconds 3306/tcp my_docker01
[root@DockerHost docker]#
Docker Inspectコマンドでパスのマッピングを確認
[root@DockerHost docker]# docker inspect my_docker01 | egrep 'Source|Destination'
"Source": "/docker/docker01",
"Destination": "/var/lib/mysql",
"Source": "/docker/option1",
"Destination": "/etc/mysql/conf.d",
"Source": "/docker/init_script/sakila-db",
"Destination": "/docker-entrypoint-initdb.d",
[root@DockerHost docker]#
作成したインスタンスに接続して、初期設定状態を確認してみます。
確認: インスタンス接続、オプションファイルの読み込み、初期DBの作成状態。
[root@DockerHost docker]# docker exec -it my_docker01 mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.10-log 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.
root@localhost [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
+--------------------+
5 rows in set (0.00 sec)
root@localhost [(none)]> show tables from sakila;
+----------------------------+
| Tables_in_sakila |
+----------------------------+
| actor |
| actor_info |
| address |
| category |
| city |
| country |
| customer |
| customer_list |
| film |
| film_actor |
| film_category |
| film_list |
| film_text |
| inventory |
| language |
| nicer_but_slower_film_list |
| payment |
| rental |
| sales_by_film_category |
| sales_by_store |
| staff |
| staff_list |
| store |
+----------------------------+
23 rows in set (0.07 sec)
root@localhost [(none)]> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.04 sec)
root@localhost [(none)]>
次に、MySQL@Oracleチームがオフィシャルに提供しているオフィシャルイメージを利用してインスタンスを作成してみます。
※こちらのイメージを利用する場合は、オプションファイルの指定方法が少し異なります。(/etc/my.cnf)
[root@DockerHost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5152a22b2aa0 mysql:5.7.10 "/entrypoint.sh mysql" 53 minutes ago Up 53 minutes 3306/tcp my_docker01
[root@DockerHost docker]# docker run --name my_docker02 -v /docker/docker02:/var/lib/mysql -v /docker/init_script/sakila-db:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=mysql -d mysql/mysql-server:5.7.10
f59d1fd222d7b15ff0f0dfa3879254730734e17451fde56aeb402279f355941e
[root@DockerHost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f59d1fd222d7 mysql/mysql-server:5.7.10 "/entrypoint.sh mysql" 2 seconds ago Up 1 seconds 3306/tcp my_docker02
5152a22b2aa0 mysql:5.7.10 "/entrypoint.sh mysql" 53 minutes ago Up 53 minutes 3306/tcp my_docker01
[root@DockerHost docker]#
作成したインスタンスとDBの確認。(こちらは、OptionファイルはしていないのでDefaultです)
[root@DockerHost docker]# docker exec -it my_docker02 mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.10 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 |
| sakila |
| sys |
+--------------------+
5 rows in set (0.02 sec)
mysql> show tables from sakila;
+----------------------------+
| Tables_in_sakila |
+----------------------------+
| actor |
| actor_info |
| address |
| category |
| city |
| country |
| customer |
| customer_list |
| film |
| film_actor |
| film_category |
| film_list |
| film_text |
| inventory |
| language |
| nicer_but_slower_film_list |
| payment |
| rental |
| sales_by_film_category |
| sales_by_store |
| staff |
| staff_list |
| store |
+----------------------------+
23 rows in set (0.00 sec)
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.02 sec)
mysql>
イメージは停止しても、削除(rm)しなければ継続利用出来るので以下のようにサービスを停止して再開しても、
作成したデータなどは無くならず利用する事が可能です。
[root@DockerHost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f59d1fd222d7 mysql/mysql-server:5.7.10 "/entrypoint.sh mysql" 10 minutes ago Up 10 minutes 3306/tcp my_docker02
5152a22b2aa0 mysql:5.7.10 "/entrypoint.sh mysql" About an hour ago Up About an hour 3306/tcp my_docker01
[root@DockerHost docker]# docker stop f59d1fd222d7
f59d1fd222d7
[root@DockerHost docker]# docker stop 5152a22b2aa0
5152a22b2aa0
[root@DockerHost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f59d1fd222d7 mysql/mysql-server:5.7.10 "/entrypoint.sh mysql" 11 minutes ago Exited (0) 13 seconds ago my_docker02
5152a22b2aa0 mysql:5.7.10 "/entrypoint.sh mysql" About an hour ago Exited (0) 3 seconds ago my_docker01
[root@DockerHost docker]# docker start f59d1fd222d7
f59d1fd222d7
[root@DockerHost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f59d1fd222d7 mysql/mysql-server:5.7.10 "/entrypoint.sh mysql" 11 minutes ago Up 2 seconds 3306/tcp my_docker02
5152a22b2aa0 mysql:5.7.10 "/entrypoint.sh mysql" About an hour ago Exited (0) 20 seconds ago my_docker01
[root@DockerHost docker]# docker exec -it my_docker02 mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.10 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 |
| sakila |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql>
補足: MySql@oracleチームのオフィシャルイメージの場合にオプションファイルを指定する場合は、以下のように実行します。
[root@DockerHost docker]# docker run --name my_docker02 -v /docker/docker02:/var/lib/mysql -v /docker/option2/my.cnf:/etc/my.cnf -v /docker/init_script/sakila-db:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=mysql -d mysql/mysql-server:5.7.10
4fde03dc4cb5966bbfee79de92c2351f2b04812df77bf763b0e14755c3d51261
[root@DockerHost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4fde03dc4cb5 mysql/mysql-server:5.7.10 "/entrypoint.sh mysql" 22 seconds ago Up 21 seconds 3306/tcp my_docker02
5152a22b2aa0 mysql:5.7.10 "/entrypoint.sh mysql" About an hour ago Exited (0) 24 minutes ago my_docker01
[root@DockerHost docker]#
[root@DockerHost docker]# docker inspect my_docker02 | egrep 'Source|Destination'
"Source": "/docker/docker02",
"Destination": "/var/lib/mysql",
"Source": "/docker/option2/my.cnf",
"Destination": "/etc/my.cnf",
"Source": "/docker/init_script/sakila-db",
"Destination": "/docker-entrypoint-initdb.d",
[root@DockerHost docker]#
参考:
https://hub.docker.com/r/mysql/mysql-server/
http://datacharmer.blogspot.jp/2015/10/mysql-docker-operations-part-1-getting.html