Swarm とコンテナのネットワーク¶
Docker Swarm は Docker のネットワーク機能と完全に互換性があります。 マルチホストによるネットワーク機能も含みます。 これは複数の Docker ホストにわたっての独自のコンテナ・ネットワークを生成できるものです。
独自のネットワークに対して Swarm を使うには、Docker コンテナのネットワーク についての概念を一通り読んでおいてください。 また マルチホストネットワークをはじめよう の例を試しておくことも必要でしょう。
Swarm クラスタにおける独自ネットワークの生成¶
マルチホストネットワークでは、キーバリューを保存するストア(store)が必要になります。 このキーバリューストアは、ネットワークの状態を表わす情報を保持するものであり、ネットワーク検出、ネットワーク自体の情報、エンドポイント、IP アドレスなどの情報があります。 Docker の libkv プロジェクトを通じて、Docker では Consul、Etcd、ZooKeeper といったキーバリューストアバックエンドがサポートされます。 サポートしているこのバックエンドの詳細は libkv プロジェクト を参照してください。
独自のネットワークを生成するには、キーバリューストアバックエンドを 1 つ選んで、ネットワーク上に実装する必要があります。
そして Docker Engine デーモンにおいて、このストアを利用する設定を行います。
設定の際には 2 つのパラメータ、--cluster-store
, --cluster-advertise
を使って、キーバリューストアの存在するサーバを指定します。
Swarm の各ノード上にてデーモンの設定と再起動を行えば、ネットワークを生成できるようになります。
ネットワークの一覧確認¶
以下の例では、クラスタ内に 2 つのノード node-0
、node-1
があるとします。
Swarm ノードからネットワーク一覧を確認します。
$ docker network ls
NETWORK ID NAME DRIVER
3dd50db9706d node-0/host host
09138343e80e node-0/bridge bridge
8834dbd552e5 node-0/none null
45782acfe427 node-1/host host
8926accb25fd node-1/bridge bridge
6382abccd23d node-1/none null
上に示すように、各ネットワーク名の先頭にはノード名がつきます。
ネットワークの作成¶
デフォルトで Swarm は、グローバルなスコープを持つネットワークドライバ overlay
を用います。
グローバルスコープのネットワークドライバは、Swarm クラスタ全体にわたるネットワークを生成します。
Swarm のもとで overlay
ネットワークを生成する場合、-d
オプションは省略できます。
$ docker network create swarm_network
42131321acab3233ba342443Ba4312
$ docker network ls
NETWORK ID NAME DRIVER
3dd50db9706d node-0/host host
09138343e80e node-0/bridge bridge
8834dbd552e5 node-0/none null
42131321acab node-0/swarm_network overlay
45782acfe427 node-1/host host
8926accb25fd node-1/bridge bridge
6382abccd23d node-1/none null
42131321acab node-1/swarm_network overlay
上に示されるように node-0/swarm_network
と node-1/swarm_network
は同じ ID を持ちます。
クラスタ上にネットワークを生成すると、ノードすべてがアクセス可能になるわけです。
ローカルなスコープのネットワークを(たとえば bridge
ネットワークドライバを利用して)生成する場合は、<node>/<name>
という記述を行う必要があります。
こうしないと、ネットワークがランダムに選び出されたノード上に生成されてしまいます。
$ docker network create node-0/bridge2 -b bridge
921817fefea521673217123abab223
$ docker network create node-1/bridge2 -b bridge
5262bbfe5616fef6627771289aacc2
$ docker network ls
NETWORK ID NAME DRIVER
3dd50db9706d node-0/host host
09138343e80e node-0/bridge bridge
8834dbd552e5 node-0/none null
42131321acab node-0/swarm_network overlay
921817fefea5 node-0/bridge2 bridge
45782acfe427 node-1/host host
8926accb25fd node-1/bridge bridge
6382abccd23d node-1/none null
42131321acab node-1/swarm_network overlay
5262bbfe5616 node-1/bridge2 bridge
--opt encrypted
は Docker Swarm モードにおいてのみ利用可能な機能です。
これはスタンドアロンの Swarm ではサポートされていません。
ネットワークの暗号化には鍵の管理機能が必要で、これは Swarm の機能範囲には含まれません。
ネットワークの削除¶
ネットワークを削除するときは、ネットワーク ID かネットワーク名を用いた指定を行います。
2 つの異なるネットワークが同一名である場合は、<node>
の記述を含めてください。
$ docker network rm swarm_network
42131321acab3233ba342443Ba4312
$ docker network rm node-0/bridge2
921817fefea521673217123abab223
$ docker network ls
NETWORK ID NAME DRIVER
3dd50db9706d node-0/host host
09138343e80e node-0/bridge bridge
8834dbd552e5 node-0/none null
45782acfe427 node-1/host host
8926accb25fd node-1/bridge bridge
6382abccd23d node-1/none null
5262bbfe5616 node-1/bridge2 bridge
swarm_network
が全ノードから削除されました。
また bridge2
は node-0
からのみ削除されました。
Docker Swarm ドキュメントの例¶
参考
- Swarm and container networks
- https://docs.docker.com/swarm/networking/