LoginSignup
1
1

More than 3 years have passed since last update.

[チートシート風]Dockerでmysqlを起動、my.cnfをホスト側にマウントして起動

Last updated at Posted at 2020-05-04

Dockerコンテナとホストでconfigファイルを同期するための事前準備

ホスト側のcnfファイル(どこでもいい)

vim ~/tmp/mysql/my.cnf

中身

[mysqld]

# explicit_defaults_for_timestamp = true

sql_mode = 'STRICT_ALL_TABLES'

log-bin-trust-function-creators=1

character-set-server = utf8mb4
collation-server = utf8mb4_bin

slow_query_log=1
long_query_time = 1.2

max_connections = 10000
max_connect_errors = 10

default-time-zone='+09:00'

コンテナで読み込まれるcnfファイル

/etc/mysql/conf.d/*.conf

起動時のオプションに下記を追加

-v ~/tmp/mysql:/etc/mysql/conf.d

イメージのインストールと起動(同時に実行可能)

  • encoding, collationは上記cnfファイルでも設定可能
  • -p ホスト側ポート:コンテナ側ポート
  • -v ホスト側ボリューム:Docker側Dir

Ver. 8.0

docker run -v ~/tmp/mysql:/etc/mysql/conf.d --name mysql-8.0 -p 3308:3306 -e MYSQL_USER=root -e MYSQL_ROOT_PASSWORD=password -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin

Ver. 5.7

docker run -v ~/tmp/mysql:/etc/mysql/conf.d --name mysql-5.7 -p 3307:3306 -e MYSQL_USER=root -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin

DockerコンテナにSSH

docker exec -it mysql-8.0 /bin/bash
# mysql
mysql -uroot -p

ホスト側からmysqlアクセス

(もちろん事前にクライアントのmysqlはインストール必要)

mysql -uroot -p -h 0.0.0.0 -P3308

timezone確認

show variables like '%time_zone%';

照合順序確認

show variables like '%collation%';

文字コード確認

show variables like '%char%';

出来上がったコンテナをイメージ化

> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
fa3c86d075e1        mysql:8.0           "docker-entrypoint.s…"   10 minutes ago      Up About a minute   33060/tcp, 0.0.0.0:3308->3306/tcp   mysql-8.0

上記のnameをとって

> docker commit mysql-8.0 mysql:8.0_configured
> docker images
REPOSITORY                              TAG                   IMAGE ID            CREATED             SIZE
mysql                                   8.0_configured        8dd1b8c65b37        12 minutes ago      546MB
mysql                                   5.7                   5d9483f9a7b2        11 days ago         455MB
mysql                                   8.0                   0c27e8e5fcfa        11 days ago         546MB

とはいえ、volumeのマウントはしないといけない。

Dockerコマンド集

# 動いてるコンテナ確認
docker ps 

# 止まってるコンテナも含める
docker ps -a

# イメージを確認
docker images

# コンテナをstart/stop
docker start/stop {container_id}

# イメージからコンテナを起動

-d デーモン起動
> docker run --name {コンテナ名} -p {host_port}:{container_port} -e {env_key}:{env_value} -d {イメージ名

# コンテナ削除
docker rm {container_id}

# イメージを削除
docker rmi {image_id}

自分用だけど、意外と使えるってばよ。

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