LoginSignup
12
12

More than 5 years have passed since last update.

DockerによるMySQL構築

Last updated at Posted at 2019-01-28

この記事何?

  • 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

runコマンドのリファレンスはこちら

  • --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

参考

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12