Docker swarm で Docker Overlay Network を試してみる
はじめに
Docker、とっても便利ですね。
コンテナ間の通信も Docker network を使用しコンテナ名でアクセスできたりして
とっても夢がひろがりんぐ。
ただ、コンテナをどんどん起動していくと Dockerホストを増やしていく必要があります。
Dockerホストをまたいだ通信は大変そうだなと思っていたら
Dockerには Overlay Network なんてすごいものが使えるみたいです。
なんと Dockerホストをまたいだコンテナ間のネットワークが作れるようです。
これは試してみないといけませんね!
というわけで試してみました。
環境情報
VirtualBox内に Ubuntu 15.10 × 3台 でDockerSwarmを構築し、
Overlayネットワークをその中に作ってみます。
各ホストはこんな感じです。
- 192.168.56.102 consulコンテナ起動用
- 192.168.56.103 swarm master, node
- 192.168.56.104 swarm node
- 192.168.56.105 swarm node
なお、ホストはすべてUbuntu15.10 で Docker1.11.0 をインストール済み。
また、RemoteAPIを有効にしてます。
root@ubuntu:~# uname -a Linux ubuntu 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
初期環境設定
Docker SwarmクラスタのNode(192.168.56.104〜192.168.56.105 のホスト)に対して以下の設定をします。
これをしないと オーバレイネットワーク作成時に エラーが発生し作れません。
mkdir /etc/systemd/system/docker.service.d/ vi /etc/systemd/system/docker.service.d/docker.conf[Service] ExecStart= ExecStart=/usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:2375 –cluster-store consul://192.168.56.102:8500/nodes –cluster-advertise=enp0s8:2375
systemctl daemon-reload systemctl restart docker.service systemctl status docker.service
注意!
ここではまったのは cluster-advertise の設定でした。
NIC と port を設定する必要があるのですが ここで使用するNICは
SwarmNode として認識されたネットワーク(ここでは 192.168.56.0)を使用するNICを使う必要があります。要注意です。
環境の掃除
Swarmクラスタ構築前に全てのコンテナを消しておきます。
docker -H tcp://192.168.56.103:2375 rm $(docker -H tcp://192.168.56.103:2375 stopdocker -H tcp://192.168.56.103:2375 ps -a -q
) docker -H tcp://192.168.56.104:2375 rm $(docker -H tcp://192.168.56.104:2375 stopdocker -H tcp://192.168.56.104:2375 ps -a -q
) docker -H tcp://192.168.56.105:2375 rm $(docker -H tcp://192.168.56.105:2375 stopdocker -H tcp://192.168.56.105:2375 ps -a -q
)
Consulの起動
Consulホスト(192.168.56.102)にConsulを立ち上げます。
docker -H tcp://192.168.56.102:2375 pull progrium/consul docker -H tcp://192.168.56.102:2375 run –name consul -d -p "8500:8500" -h "consul" –restart=always progrium/consul -server -bootstrap
Swarm の最新化
Swarmクラスタ構築前にSwarmの最新イメージをpullしておきます
docker -H tcp://192.168.56.103:2375 pull swarm docker -H tcp://192.168.56.104:2375 pull swarm docker -H tcp://192.168.56.105:2375 pull swarm
Swarm クラスタの構築
Swarm Managerを 192.168.56.103 で起動。
順次 Swarm Agentを起動し クラスタを構築します。
docker -H tcp://192.168.56.103:2375 run -d -p 12375:2375 swarm manage –replication –advertise 192.168.56.103:12375 consul://192.168.56.102:8500/nodes docker -H tcp://192.168.56.103:2375 run -d swarm join –advertise=192.168.56.103:2375 consul://192.168.56.102:8500/nodes docker -H tcp://192.168.56.104:2375 run -d swarm join –advertise=192.168.56.104:2375 consul://192.168.56.102:8500/nodes docker -H tcp://192.168.56.105:2375 run -d swarm join –advertise=192.168.56.105:2375 consul://192.168.56.102:8500/nodes
Overlayネットワークの作成
本日のメインイベント、Overlayネットワークを作成します。
ここまでのオペレーションに問題が無ければ以下のコマンドで Overlay ネットワークが作成できます
docker -H 192.168.56.103:12375 network create –driver overlay mynet
Overlayネットワーク のテスト
Overlayネットワーク内に コンテナを順次起動していきます。
Swarm の設定がうまくいっていれば 以下で作成する各コンテナ(con1 〜 con3)はSwarmNode に分散されて起動します。
docker -H localhost:12375 run -dP –name con1 -h con1 –net mynet moremagic/ubuntu-sshd docker -H localhost:12375 run -dP –name con2 -h con2 –net mynet moremagic/ubuntu-sshd docker -H localhost:12375 run -dP –name con3 -h con3 –net mynet moremagic/ubuntu-sshd
ここでどこかのコンテナにはいってみて別のコンテナに SSHしてみましょう。
Overlayネットワークがうまくできていれば コンテナのホスト名で
Dockerホストをまたいだアクセスができるようになります。
docker -H localhost:12375 exec -ti con1 /bin/bashssh con2 → ログインできる ssh con3 → ログインできる
すごいっ!
参考資料
http://qiita.com/nmatsui/items/2811f2297343e1d50739
http://qiita.com/nmatsui/items/3ed2f21f7ee61d0827ea
https://thinkit.co.jp/article/8414
moremagic
2016-04-16