昨年から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