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で接続してみる。
接続できた。
※ちなみに、docker runした後、起動まで多少時間がかかるみたいで、すぐに接続しようとするとエラーになる。
ボリュームの設定
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時に指定したボリュームが 存在しない場合は、自動で作られるみたい。