Dockerコンテナで仮想ネットワークを構築する
Dockerのブログでunionizeを参照していたけど、unionizeはpipelineを使えば良いっていってる。 なので、pipelineを使用してDockerコンテナのvirtual networkを構築して見る。
1.コンソールを2つ開いて、コンテナを2つ立ち上げる
Console A
vagrant@precise64:~$ docker run -t -i centos bash-4.1#
Console B
vagrant@precise64:~$ docker run -t -i centos bash-4.1#
2.もう1つコンソールを開いて状態を確認
Console C
dockervagrant@precise64:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4503a71d488c centos:6.4 bash 4 minutes ago Up 4 minutes stoic_lovelace 800700b4677b centos:6.4 bash 4 minutes ago Up 4 minutes silly_euclide
3.ここでpipelineを落としてくる
Console C
git clone https://github.com/jpetazzo/pipework.git sudo cp pipeline /usr/local/bin/
4.これで,pipelineは使えるようになったので、コンテナのネットワークを繋げる
Console C
sudo pipework br1 4503a 192.168.1.1/24 sudo pipework br1 80070 192.168.1.2/24
5.繋がっているかどうか確認
Console A
ping 192.168.1.2
Console B
ping 192.168.1.1
で、上手く繋がっていることを確認。 試しにNginxを起動したコンテナにアクセスして見る。 以前作ったコンテナを使用。
https://github.com/yss44/docker_nginx
ここにおいてあります。
docker run -d -p 80:80 yoshiso/nginx sudo pipework br a34fe 192.168.1.3/24
Console A
curl http://192.168.1.3:80 >Hello,Nginx!
と、意図した通りの通信が完了。無事コンテナ同士の通信が成立しているようです。
この状態だと、ホスト側から、先ほど指定したIPアドレスでコンテナにアクセスできません。 なのでpipelineでも
Peeking inside the private network
といって行なっているように次のようにコマンドを打ちます
Host Console
ip addr add 192.168.1.254/24 dev br1
ここらへんの知識薄いなあ。仮想IPを動的に割り振っているようです。 ちょっと勉強したいけど、どこらへん漁れば良いんだろう。
それはおいておいて、これでHostもコンテナネットワークに接続することが出来ました。 確認してみます。
Host Console
curl http://192.168.1.3:80 >Hello,Nginx! ping 192.168.1.1 ping 192.168.1.2
上手く動いてるのが確認できました。 これで、Dockerコンテナ同士でネットワークを構築することが出来そうです。 おつぎはプロキシサーバー=Nginx,アプリケーションサーバー=Rails,DBサーバー=Mysqlの3つのコンテナを起動して、そこにデプロイして流し込む!みたいなことをしたいですね。