Less is Best

rubyが好き。技術の話とスタートアップに興味があります。

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つのコンテナを起動して、そこにデプロイして流し込む!みたいなことをしたいですね。