概要
MySQLのOFFICIAL REPOSITORYで公開されているMySQL 5.6.26イメージからコンテナを作成、実行するまでの手順です。
環境
下記の環境で動作確認を行いました。
- Windows7 (64bit)
- [docker] (https://www.docker.com/) 1.8.1
- MySQL 5.6.26
参考
下記のサイトを参考にさせて頂きました。
- [MySQL - OFFICIAL REPOSITORY] (https://hub.docker.com/_/mysql/)
MySQL 5.6.26イメージの取得
$ docker pull mysql:5.6.26
Pulling repository docker.io/library/mysql
...省略...
Status: Downloaded newer image for mysql:5.6.26
試しにイメージからコンテナを作成し実行します。
$ docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD=rootpw mysql:5.6.26
ログになにかエラーが出力されていないか確認します。
$ docker ps --format="{{.ID}}"
a49349c94f7d
$ docker logs a49349c94f7d
コンテナ内にある既存のmy.cnfの内容を確認します。
$ docker exec -it my-mysql bash
root@a49349c94f7d:/# cat /etc/mysql/my.cnf
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
skip-host-cache
skip-name-resolve
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address = 127.0.0.1
# log-error = /var/log/mysql/error.log
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
差分のmy.cnfの作成
差分の設定ファイルを作成します。
この設定ファイルは上記の既存my.cnfの!includedir
で指定するディレクトリへ配置することで反映されます。
[mysqld]
innodb_buffer_pool_size = 64M
innodb_file_per_table = 1
innodb-status-output = 1
innodb-status-output-locks = 1
default-storage-engine = innodb
log_bin = mysql-bin
port = 3306
server_id = 1
character-set-server = utf8
collation-server = utf8_general_ci
transaction-isolation = REPEATABLE-READ
# autocommit = 0
explicit_defaults_for_timestamp = true
lower_case_table_names = 1
# Logging
log_output = FILE
log_warnings = 1
log_error = /var/log/mysql/error.log
general_log = 1
general_log_file = /var/log/mysql/general_query_all.log
log-slow-admin-statements = 1
log-queries-not-using-indexes = 1
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /var/log/mysql/slow_query.log
[mysql]
default-character-set = utf8
show-warnings
差分設定ファイル
差分の設定ファイル(my.cnf)は、WindowsPCと仮想マシン(ホスト)の共有フォルダ(%USERPROFILE%)下ではなく、それ以外のディレクトリに配置し、パーミッションを644に設定します。
共有フォルダに置くとファイルのパーミッションが777になり、このパーミッションではMySQLが参照してくれないためです。
共有フォルダに置くとパーミッションが777になり変えられません。
-rwxrwxrwx 1 docker staff 747 Aug 31 14:30 my.cnf*
且つこの状態でMySQLを起動すると下記の警告メッセージがログに出力され差分の設定ファイルが反映されませんでした。
Warning: World-writable config file ‘/etc/my.cnf’ is ignored
この記事では仮想マシンの/home/docker/mysqlディレクトリにmy.cnfを置き、このディレクトリをコンテナとマッピングします。
- host :
/home/docker/mysql
- container :
/etc/mysql/conf.d
-v /home/docker/mysql:/etc/mysql/conf.d
データディレクトリ
データファイルを永続化するためデータディレクトリはWindowsPCとの共有フォルダ下に置きます。
- Windows :
%USERPROFILE%/dev/docker/mysql5.6.26/data
- host :
/c/Users/username/dev/docker/mysql5.6.26/data
- container :
/var/lib/mysql
-v /c/Users/username/dev/docker/mysql5.6.26/data:/var/lib/mysql
ログディレクトリ
ログファイルも一応永続化しておきます。
ログディレクトリはWindowsPCとの共有フォルダ下に置きます。
- Windows :
%USERPROFILE%/dev/docker/mysql5.6.26/logs
- host :
/c/Users/username/dev/docker/mysql5.6.26/logs
- container :
/var/log/mysql
-v /c/Users/username/dev/docker/mysql5.6.26/logs:/var/log/mysql
コンテナの実行
上記の設定を元にコンテナを作成し実行します。
(上記で作成していたコンテナは削除しておきます。)
$ docker run -d --name my-mysql -p 3306:3306 -v /home/docker/mysql:/etc/mysql/conf.d -v /c/Users/username/dev/docker/mysql5.6.26/data:/var/lib/mysql -v /c/Users/username/dev/docker/mysql5.6.26/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=rootpw mysql:5.6.26
なにか問題が発生していないかコンテナのログを確認します。
docker@default:~/mysql$ docker logs 140027f459b8
2015-08-31 16:00:15 0 [Note] mysqld (mysqld 5.6.26-log) starting as process 1...
MySQL Clientコンテナから接続
実行中のMySQLコンテナへMySQL Clientコンテナから接続できるか確認します。
$ docker run -it --link my-mysql:mysql -v /home/docker/mysql:/etc/mysql/conf.d --rm mysql:5.6.26 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.26-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.
mysql> 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.00 sec)
Windows版のMySQL Clientから接続
Windows版のMySQL Clientから接続できるか確認します。
> mysql.exe -h 192.168.99.100 -P 3306 -u root -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.26-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.
mysql> 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.01 sec)