ディスカバリ¶
バックエンド¶
Docker Swarm は複数のディスカバリ・バックエンドと連携します。
Docker Swarm はホステッド・ディスカバリ・サービスを利用できます。このサービスは、自分の Swarm クラスタの IP アドレス一覧を保持します。 etcd
、 consul
、 zookeeper
のような複数のサービスが利用可能です。自分の環境にあわせて何がベストかによって選べます。静的なファイルも利用できます。Docker Hub もホステッド・ディスカバリ・サービスを提供しており、こちらも利用可能です。
Docker Hub のホステッド・ディスカバリ¶
この例は Docker Hub のホステッド・ディスカバリ・サービスを使います。Docker Hub のホステッド・ディスカバリ・サービスを使うには、インターネットに接続している必要があります。次のようにして Swarm クラスタを作成します。
まずクラスタを作成します。
# クラスタを作成
$ swarm create
6856663cdefdec325839a4b7e1de38e8 # <- this is your unique <cluster_id>
次に、各ノードを作成し、クラスタに追加します。
# 各ノードで Swam エージェントを起動します。
# Swam Manager がアクセス可能であれば、
# <node_ip> はパブリックである必要はありません(例:192.168.0.x)。
$ swarm join --advertise=<node_ip:2375> token://<cluster_id>
最後に、Swarm マネージャ(manager)を起動します。これはあらゆるマシンだけでなく、自分のノート PC 上でも実行できます。
$ swarm manage -H tcp://<swarm_ip:swarm_port> token://<cluster_id>
通常の Docker コマンドを使い、Swarm と通信できます。
docker -H tcp://<swarm_ip:swarm_port> info
docker -H tcp://<swarm_ip:swarm_port> run ...
docker -H tcp://<swarm_ip:swarm_port> ps
docker -H tcp://<swarm_ip:swarm_port> logs ...
...
クラスタのノード情報一覧も表示できます。
swarm list token://<cluster_id>
<node_ip:2375>
静的なファイルでクラスタを指定¶
ファイルに各ノードの情報を追加します。ノードの IP アドレスは、Swarm マネージャがアクセス可能であればパブリックである必要はありません。
echo <node_ip1:2375> >> /tmp/my_cluster
echo <node_ip2:2375> >> /tmp/my_cluster
echo <node_ip3:2375> >> /tmp/my_cluster
それから、いずれかのマシン上で Swarm マネージャを起動します。
swarm manage -H tcp://<swarm_ip:swarm_port> file:///tmp/my_cluster
あとは、通常の Docker コマンドを使います。
docker -H tcp://<swarm_ip:swarm_port> info
docker -H tcp://<swarm_ip:swarm_port> run ...
docker -H tcp://<swarm_ip:swarm_port> ps
docker -H tcp://<swarm_ip:swarm_port> logs ...
...
クラスタのノード情報一覧も表示できます。
$ swarm list file:///tmp/my_cluster
<node_ip1:2375>
<node_ip2:2375>
<node_ip3:2375>
etcd の使用¶
各ノードで Swarm エージェントを起動します。ノードの IP アドレスは、Swarm マネージャがアクセス可能であればパブリックである必要はありません。
swarm join --advertise=<node_ip:2375> etcd://<etcd_addr1>,<etcd_addr2>/<optional path prefix>
いずれかのマシン上かノート PC 上で Swarm マネージャを起動します。
swarm manage -H tcp://<swarm_ip:swarm_port> etcd://<etcd_addr1>,<etcd_addr2>/<optional path prefix>
あとは、通常の Docker コマンドを使います。
docker -H tcp://<swarm_ip:swarm_port> info
docker -H tcp://<swarm_ip:swarm_port> run ...
docker -H tcp://<swarm_ip:swarm_port> ps
docker -H tcp://<swarm_ip:swarm_port> logs ...
...
クラスタのノード情報一覧も表示できます。
swarm list etcd://<etcd_addr1>,<etcd_addr2>/<optional path prefix>
<node_ip:2375>
consul の使用¶
各ノードで Swarm エージェントを起動します。ノードの IP アドレスは、Swarm マネージャがアクセス可能であればパブリックである必要はありません。
swarm join --advertise=<node_ip:2375> consul://<consul_addr>/<optional path prefix>
いずれかのマシン上かノート PC 上で Swarm マネージャを起動します。
swarm manage -H tcp://<swarm_ip:swarm_port> consul://<consul_addr>/<optional path prefix>
あとは、通常の Docker コマンドを使います。
docker -H tcp://<swarm_ip:swarm_port> info
docker -H tcp://<swarm_ip:swarm_port> run ...
docker -H tcp://<swarm_ip:swarm_port> ps
docker -H tcp://<swarm_ip:swarm_port> logs ...
...
クラスタのノード情報一覧も表示できます。
swarm list consul://<consul_addr>/<optional path prefix>
<node_ip:2375>
zookeeper の使用¶
各ノードで Swarm エージェントを起動します。ノードの IP アドレスは、Swarm マネージャがアクセス可能であればパブリックである必要はありません。
swarm join --advertise=<node_ip:2375> zk://<zookeeper_addr1>,<zookeeper_addr2>/<optional path prefix>
いずれかのマシン上かノート PC 上で Swarm マネージャを起動します。
swarm manage -H tcp://<swarm_ip:swarm_port> zk://<zookeeper_addr1>,<zookeeper_addr2>/<optional path prefix>
あとは、通常の Docker コマンドを使えます。
docker -H tcp://<swarm_ip:swarm_port> info
docker -H tcp://<swarm_ip:swarm_port> run ...
docker -H tcp://<swarm_ip:swarm_port> ps
docker -H tcp://<swarm_ip:swarm_port> logs ...
...
クラスタのノード情報一覧も表示できます。
swarm list zk://<zookeeper_addr1>,<zookeeper_addr2>/<optional path prefix>
<node_ip:2375>
固定した IP アドレスのリストを使用¶
いずれかのマシン上かノート PC 上で Swarm マネージャを起動します。
swarm manage -H <swarm_ip:swarm_port> nodes://<node_ip1:2375>,<node_ip2:2375>
または
swarm manage -H <swarm_ip:swarm_port> <node_ip1:2375>,<node_ip2:2375
あとは、通常の Docker コマンドを使えます。
docker -H <swarm_ip:swarm_port> info
docker -H <swarm_ip:swarm_port> run ...
docker -H <swarm_ip:swarm_port> ps
docker -H <swarm_ip:swarm_port> logs ...
IP アドレスの範囲をパターンで指定
file
と node
あ、特定の IP アドレスの範囲をパターンで指定することで、ディスカバリをサポートします。例えば 10.0.0.[10:200]
は 10.0.0.10
から 10.0.0.200
の範囲にあるノードを使います。
次の例は、 file
ディスカバリ・メソッドを使います。
$ echo "10.0.0.[11:100]:2375" >> /tmp/my_cluster
$ echo "10.0.1.[15:20]:2375" >> /tmp/my_cluster
$ echo "192.168.1.2:[2:20]375" >> /tmp/my_cluster
それからマネージャを起動します。
swarm manage -H tcp://<swarm_ip:swarm_port> file:///tmp/my_cluster
そして、 node
ディスカバリ・メソッドを使います。
swarm manage -H <swarm_ip:swarm_port> "nodes://10.0.0.[10:200]:2375,10.0.1.[2:250]:2375"
新しいディスカバリ・バックエンドに貢献¶
あなたは Swam 向けに新しいディスカバリ・バックエンドに貢献できます。どのようにするかは、 Docker Swarm レポジトリにある discovery README をお読みください。