Swarm とコンテナのネットワーク¶
Docker Swarm は Docker のネットワーク機能と完全な互換性があります。互換性の中には複数のホストに対するマルチホスト・ネットワーク機能も含まれます。これは複数の Docker ホストを横断するカスタム・コンテナ・ネットワークを作成する機能です。
Swarm をカスタム・ネットワークで使う前に、Docker コンテナ・ネットワーク の概念に関する情報をお読みください。また、 マルチホスト・ネットワーク機能を始める のサンプルも試すべきでしょう。
Swarm クラスタにカスタム・ネットワークを作成¶
マルチホスト・ネットワーク機能を使うにはキーバリュー・ストアが必要です。キーバリュー・ストアはネットワークの情報を保持する場所です。ここにはディスカバリ情報、ネットワーク、エンドポイント、 IP アドレス等が含まれます。Docker の libkv プロジェクトの成果により、Docker は Consul 、Etcd 、ZooKeeper の各キーバリュー・ストア・バックエンドをサポートします。詳細は libkv プロジェクト をご覧ください。
カスタム・ネットワークを作成するには、キーバリュー・ストア・バックエンドを選択し、自分のネットワーク上に実装する必要があります。それから、Docker Engine デーモンの設定を変更し、キーバリュー・ストアにデータを保管できるようにします。キーバリュー・ストア用のサーバを参照するには --cluster-store
と --cluster-advertise
という2つのパラメータが必要です。
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
ここで表示されているように、2つのノード上に node-0/swarm_network
と node-1/swarm_network
という同じ ID を持つネットワークがあります。これはクラスタに作成したネットワークであり、全てのノード上でアクセス可能なものです。
ローカルな範囲でネットワークを作成したい場合は(例えば、ブリッジ・ドライバを使いたい時)、 <ノード名>/<名前>
の形式でなければ、ランダムに選んだノード上でネットワークを作成します。
$ 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
ネットワークの削除¶
ネットワークの削除は、ネットワーク ID か ネットワーク名を使えます。異なる2つのネットワークが同じ名前の場合は、 <ノード名>/<名前>
を使えます。
$ 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/