Docker Multi-Host Networking (1)

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“によって回避できる。

■ 構成

イメージ的には下図のようになる。

multihost-docker-001

DockerのドキュメントではKVSに”Consul“を使用しているが、自身は”ZooKeeper“の方が知見があるのでこちらを採用する。また既にMacにはインストールして稼働させているものがあるのでそれを利用する。

最終的に、”docker1“のVMで稼働させているMongoDBに対して、”docker2“のVM上に稼働させた”MongoDBのクライアント“で接続できるかを確認しようと思う。

■ 順序

Dockerのドキュメントでは下記の順序の通り。

  1. Set up a key-value store
  2. Create a Swarm cluster
  3. Create the overlay Network
  4. Run an application on your Network
  5. 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“の内容から始める。

以上。

■ 関連

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください