Dockerにおいて表題の通り。いくつかのエントリに分けて実現する。
■ 環境
- Mac OSX (10.10.5)
- VirtualBox
■ やりたいこと
Get started with multi-host networking
https://docs.docker.com/engine/userguide/networking/get-started-overlay/
上記で書かれている複数のDockerホスト間でのネットワーク接続を試したい。上記では`docker-machine`を利用しているが、最終的には自身で構築したホストで稼働させている複数のDockerで実現させたいので、Mac上にVirtualBoxでVMを複数稼働させ、そこにDockerをインストールし”Multi-Host Networking“を実現させたい。
これができると何が良いかというと、複数のDockerホストによる”Dockerクラスタ“を、”Swarm“でアクセス先を一つにする事で、あたかも1つの”Dockerホスト“に対して操作を行っているように扱える事かと思う。また、コンテナが各ホストに分散されて実行されても、コンテナ間のアクセスが可能となる。
以前のversionでは、”Swarm“で分散自体はできてもコンテナ間のアクセスは、同じ”Dockerホスト“で稼働しているコンテナ間でのみであったと記憶している。その為、”–link“オプションを使用したコンテナは全て同じ”Dockerホスト“上で実行されていた。もちろんネットワーク的には同じ”Dockerホスト“上で実行される方が良いのではあるが、1つの”Dockerホスト“で実行可能以上のコンテナが”–link“で接続しようとした場合、破綻するような気がする。今回の”Multi-Host Networking“によって回避できる。
■ 構成
イメージ的には下図のようになる。

DockerのドキュメントではKVSに”Consul“を使用しているが、自身は”ZooKeeper“の方が知見があるのでこちらを採用する。また既にMacにはインストールして稼働させているものがあるのでそれを利用する。
最終的に、”docker1“のVMで稼働させているMongoDBに対して、”docker2“のVM上に稼働させた”MongoDBのクライアント“で接続できるかを確認しようと思う。
■ 順序
Dockerのドキュメントでは下記の順序の通り。
- Set up a key-value store
- Create a Swarm cluster
- Create the overlay Network
- Run an application on your Network
- Check external connectivity
“Step6“は`docker-compose`での利用方法なので割愛する。
これを自身の環境では順にやっていくつもりである。今回のエントリでは、まずは環境構築編として”Step1“の前の事を行う。
■ Step 0
Dockerのドキュメントにある通り、kernelが”3.16“以上である必要がある。自身が普段よく使っているVagrantの”centos/7“のboxではkernelのversionが”3.10“であるので、今回は”ubuntu/vivid64“を利用する事にした。
$ vagrant box add ubuntu/vivid64
$ vagrant init ubuntu/vivid64
$ vagrant up
:
$ vagrant ssh
:
vagrant@vagrant-ubuntu-vivid-64:~$ uname -a
Linux vagrant-ubuntu-vivid-64 3.19.0-42-generic #48-Ubuntu SMP Thu Dec 17 22:54:45 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
vagrant@vagrant-ubuntu-vivid-64:~$ exit
logout
Connection to 127.0.0.1 closed.
$
$ vagrant destroy
:
前述のイメージの通り、Vagrantで稼働させるVMは2つ使用するのでVagrantfileも下記のように書き換えた。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/vivid64"
config.vm.define "docker1" do |node|
node.vm.network "private_network", ip: "192.168.33.11"
node.vm.hostname = "docker1"
end
config.vm.define "docker2" do |node|
node.vm.network "private_network", ip: "192.168.33.12"
node.vm.hostname = "docker2"
end
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
end
end
IPをそれぞれ振り、メモリもそれぞれ2GBにしている。
今回はここまで。次回は”Step1“の内容から始める。
以上。
■ 関連