docker

サーバー

Docker on Vagrantで複数のMysqlコンテナを稼働させる

複数サービスを運用していると、ひとつの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コンテナは、止まるとデータが消えてしまうので、ローカルに置くなど対策が必要ですが、そちらはまた別途。