Weaveでコンテナ間通信を試してみる

とりあえず2台の仮想マシンを用意します。下記のようなVagrantfileでサクッと実行環境を構築。

# -*- mode: ruby -*-
# -*- encoding: utf-8 -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"

  config.vm.define :co1 do | co1 |
    co1.vm.hostname = "co1"
    co1.vm.network :private_network, ip:"192.168.33.11"
  end


  config.vm.define :co2 do | co2 |
    co2.vm.hostname = "co2"
    co2.vm.network :private_network, ip:"192.168.33.12"
  end
end

サーバをco1とco2の2台構成にしてプライベートネットワークでノード間を通信できるようにしておきます。
vagrant upでOSが起動したらそれぞれにSSHで接続してdocker-ceをインストールします。
docker-ceインストール後、両サーバで下記コマンドを実行しCentOS7のコンテナイメージを取得してください。


docker pull centos:centos7

weaveのインストール。

dockerのインストールが完了したら下記コマンドでweaveをインストールします。ホストco1とco2それぞれで実施してください。


su -
curl -L git.io/weave -o /usr/local/bin/weave
sudo chmod a+x /usr/local/bin/weave
exit

weaveの起動

まずco1でweaveを起動します。


vagrant ssh co1
weave launch
docker ps -a

docker ps -aコマンドでweaveのプロセスが確認できれば次にco2でも起動します。


vagrant ssh co2
weave launch 192.168.33.11
docker ps -a

co2ではco1のIPアドレスを設定して起動します。co2でもdocker ps -aでweaveプロセスの起動が確認できればOK。

dockerコンテナ起動

co1、co2それぞれでdockerコンテナを起動します。centos7のイメージを利用しますが、展開した直後だとipコマンドが使えないのでiprouteパッケージをインストールします。


vagrant ssh co1
docker run --net=weave -it -d --name c7d1 centos:centos7
docker exec -it c7d1 /bin/bash
yum -y install iproute
ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
...
inet 127.0.0.1/8 scope host lo
...
17: ethwe0@if18: mtu 1376 qdisc noqueue state UP group default
...
inet 10.32.0.1/12 brd 10.47.255.255 scope global ethwe0
...
20: eth0@if21: mtu 1500 qdisc noqueue state UP group default
...
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
...
ethwe0@if18の10.32.0.1がホストco1のIPアドレスです。

co2も同様に作業します。


vagrant ssh co2
docker run --net=weave -it -d --name c7d2 centos:centos7
docker exec -it c7d2 /bin/bash
yum -y install iproute
ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
...
inet 127.0.0.1/8 scope host lo
...
16: ethwe0@if17: mtu 1376 qdisc noqueue state UP group default
...
inet 10.44.0.0/12 brd 10.47.255.255 scope global ethwe0
...
19: eth0@if20: mtu 1500 qdisc noqueue state UP group default
...
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
...
co2のIPアドレスは10.44.0.0のようです。

接続確認

co2のc7d2コンテナに接続して10.32.0.1(co1)にpingを実行してレスポンスが帰ってくればOKっぽい。
同様にco1から10.44.0.0に対してpingを行いこちらもレスポンスが帰ってくればOKっぽいです。