複数サービスを運用していると、ひとつのMysqlサーバーだとデータがごちゃごちゃになったり、別のサービスのためにMysqlサーバーを再起動したら、他のサービスにまで影響してしまうなど、面倒なことが多いですが、Dockerを使えば、それぞれのサービスごとにMysqlを用意することができます。
今回は、仮想マシン上で、Dockerで複数のMysqlコンテナを稼働させてみます。
Docker用の仮想マシンの用意(必要な場合)
今回は、純粋にDockerだけの環境でテストしたかったので、Docker専用軽量OS「barge OS」を使用しました。Vagarntで仮想マシンを用意します。
セットアップ
[bash] mkdir barge cd barge vagrant box add ailispaw/barge vagrant init -m ailispaw/barge [/bash]
仮想マシンにIPを付与する
[bash] vi Vagrantfile <追加> config.vm.network "private_network", ip: "192.168.33.200" [/bash]
仮想マシンを起動
[bash] vagrant up [/bash]
Dockerを最新版にする
barge OSはdockerのバージョンを手軽に切り替えることができます。今回は、最新版のものを使いたいので、「lastest」フラグを立てて、dockerを再起動します。それだけで、最新版Dockerがインストールされます。
[bash] sudo /etc/init.d/docker restart latest docker -v Docker version 17.06.0-ce, build 02c1d87 [/bash]
Dockerでmysqlコンテナを起動する
続いて、Mysqlコンテナを起動します。今回は、テストとして3つのコンテナを用意します。ホスト側のポートが被ってしまうので、3306番は使わずに、13306番、23306番、33306番を使います。
[bash] sudo docker run --name test-db-01 -e MYSQL_ROOT_PASSWORD=mysql -d -p 13306:3306 mysql sudo docker run --name test-db-02 -e MYSQL_ROOT_PASSWORD=mysql -d -p 23306:3306 mysql sudo docker run --name test-db-03 -e MYSQL_ROOT_PASSWORD=mysql -d -p 33306:3306 mysql [/bash]
アクセスしてみる
barge OSにはmysqlクライアントが入っていないので、他の仮想マシンからログインしてみます。
[bash] mysql -h 192.168.33.200 -u root --port=13306 -p [/bash]
mysqlに入れていれば完了です。
dockerのmysqlコンテナは、止まるとデータが消えてしまうので、ローカルに置くなど対策が必要ですが、そちらはまた別途。