この記事何?
- Docker Official Imageの補足的な記事
- DockerでMySQL構築を初めてやってみたので、色々と調べてみました。
- 一度理解してしまえば、MySQLのインストールもバージョン変更も数分で終わってしまうので非常に便利だなーと感じました。
Dockerのダウンロード
Docker Desktop (Mac)をここからインストールする
https://docs.docker.com/docker-for-mac/install/
config-file.cnfの作成
config-file.cnfに設定を記載しておくことで、コンテナの起動時にこの設定通りに起動してくれます。
config-file.cnf
$ mkdir -p ~/docker/mysql/custom
$ mkdir ~/docker/mysql/data
$ vi ~/docker/mysql/custom/config-file.cnf
[mysqld]
sql_mode= STRICT_TRANS_TABLES
character_set_server=utf8mb4
collation_server=utf8mb4_bin
table_open_cache=400
skip_character_set_client_handshake
[client]
default_character_set=utf8mb4
- sql_mode=STRICT_TRANS_TABLES
- この設定は厳密モードとも呼ばれInsertやUpdateをした値がテーブルの指定に従っていない場合に,SQLの実行を中止します。MySQL5.6からはdefault設定とのことですが明示しておきます
- 文字コードを
utf8mb4
で統一しておきます。
コンテナの起動
起動コマンド
$ docker run --name test_mysql -v ~/docker/mysql/custom:/etc/mysql/conf.d -v ~/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=test -e MYSQL_PASSWORD=test -e MYSQL_DATABASE=test -d -p 3306:3306 mysql:8.0.14
-
--name
: コンテナ名称(test_mysql) -
-v
:- conf.d指定(~/docker/mysql/custom/config-file.cnf)
- データ格納ディレクトリ指定(~/docker/mysql/data:/var/lib/mysql)
-
-e
: 環境変数- MYSQL_ROOT_PASSWORD: rootユーザーのパスワード
- MYSQL_USER: 初期ユーザー
- MYSQL_PASSWORD: 初期ユーザーのパスワード
- MYSQL_DATABASE: 初期DB
-
-d
: バックグラウンドでコンテナを起動 -
-p
: ポートフォワード(ホスト側ポート:コンテナ側ポート)
コンテナ内のbashに接続する
コンテナの起動が終わったら、コンテナ内のbashに接続して正しく起動できたか確認します。
-it test_mysql bash
は、test_mysql
のコンテナでbashプロセスを新規で立ち上げ、それをホスト側から操作するという意味
環境変数の確認
$ docker exec -it test_mysql bash
# env
MYSQL_PASSWORD=test
HOSTNAME=af03bdcbfba9
MYSQL_DATABASE=test
MYSQL_ROOT_PASSWORD=root
PWD=/
HOME=/root
MYSQL_MAJOR=8.0
GOSU_VERSION=1.7
MYSQL_USER=test
MYSQL_VERSION=8.0.14-1debian9
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
文字コードの確認
# mysql -u root -p
mysql> show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)
mysql> show variables like '%coll%';
+-------------------------------+--------------------+
| Variable_name | Value |
+-------------------------------+--------------------+
| collation_connection | utf8mb4_bin |
| collation_database | utf8mb4_bin |
| collation_server | utf8mb4_bin |
| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci |
+-------------------------------+--------------------+
4 rows in set (0.00 sec)
mysql> exit
Bye
# exit
疎通確認
-p 3306:3306
の通りにコンテナへアクセスできるか確認します。
ここまで出来てれば、MySQLの準備完了です。
$ nc 127.0.0.1 -z 3306
Connection to 127.0.0.1 port 3306 [tcp/mysql] succeeded!
MySQL接続する方法
-h 127.0.0.1
を付ける必要があるので注意
$ mysql -u root -p -h 127.0.0.1
$ mysql -u test -p -h 127.0.0.1
MySQLコンテナの停止
$ docker stop test_mysql
起動するときは、startコマンドで起動します
$ docker start test_mysql