DockerでMySQLを動かしてみる

MySQLコンテナの起動

VagrantでCentOS7を起動。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.provision :docker
end
> vagrant up
> vagrant ssh

MySQLのコンテナを起動。

$ docker run -d --name hoge -e MYSQL_ROOT_PASSWORD=hogehoge -p 3306:3306 --rm mysql
$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                               NAMES
b6024f04d6b7   mysql     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp   hoge

mysqlのコマンドを実行してみる。

$ docker exec -it hoge /bin/bash

# mysql -u root -p
Enter password: hogehoge

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

A5:SQLでの接続

A5:SQLで接続してみる。
f:id:yk5656:20210130181336j:plain

接続できた。
f:id:yk5656:20210130181538j:plain

※ちなみに、docker runした後、起動まで多少時間がかかるみたいで、すぐに接続しようとするとエラーになる。
f:id:yk5656:20210130181359j:plain

ボリュームの設定

DBに変更を加えても、

mysql> CREATE DATABASE hoge_db;
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| hoge_db            |
・・・

mysql> \q
# exit

run時に「--rm」をオプションを設定した場合は、
停止時にコンテナが削除されるので、

$ docker stop hoge
$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

再度、runしても、DBへの更新は消えている。

$ docker run -d --name hoge -e MYSQL_ROOT_PASSWORD=hogehoge -p 3306:3306 --rm mysql

$ docker exec -it hoge /bin/bash
# mysql -u root -p
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

mysql> \q
# exit
$ docker stop hoge

ボリュームを作成して、

$ docker volume create hoge_vol
$ docker volume ls
DRIVER    VOLUME NAME
・・・
local     hoge_vol

run時にボリュームを指定して、

$ docker run -d --name hoge -e MYSQL_ROOT_PASSWORD=hogehoge -p 3306:3306 -v hoge_vol:/var/lib/mysql --rm mysql

DBに更新を加えると、

$ docker exec -it hoge /bin/bash
# mysql -u root -p
mysql> CREATE DATABASE hoge_db;
mysql> \q
# exit

コンテナが削除され、

$ docker stop hoge
$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

再作成しても、

$ docker run -d --name hoge -e MYSQL_ROOT_PASSWORD=hogehoge -p 3306:3306 -v hoge_vol:/var/lib/mysql --rm mysql

DBに加えた変更が残っている。

$ docker exec -it hoge /bin/bash
# mysql -u root -p
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| hoge_db            |
・・・

補足

$ docker exec -it hoge /bin/bash
$ mysql -u root -p  

$ docker exec -it hoge mysql -u root -p

でもOK。

あと、事前に「docker volume create ボリューム名」で ボリュームを作らなくても、 run時に指定したボリュームが 存在しない場合は、自動で作られるみたい。