Docker Swarm: ディスカバリ

# ディスカバリ
原文：https://docs.docker.com/swarm/discovery/

Docker Swam は複数のディスカバリ・バックエンドと連携します。

## バックエンド

### Docker Hub によるホステッド・ディスカバリ

始めにクラスタを作成します。

```
# クラスタの作成
$ 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>
```

最後に、Swam Manager を起動します。これは自分のノート PC だけでなく、あらゆるマシン上で実行できます。

```
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 アドレスは Swam Manager がアクセス可能であれば、パブリックである必要はありません。

```
echo <node_ip1:2375> >> /tmp/my_cluster
echo <node_ip2:2375> >> /tmp/my_cluster
echo <node_ip3:2375> >> /tmp/my_cluster
```

それから Swam Manager をマシン上で起動します。

```
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 を使う

各ノードで Swam エージェントを起動します。ノード IP アドレスは Swam Manager がアクセス可能であれば、パブリックである必要はありません。

```
swarm join --advertise=<node_ip:2375> etcd://<etcd_addr1>,<etcd_addr2>/<optional path prefix>
```

マシンやノート PC 上で Manager を起動します。

```
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 を使う

各ノードで Swam エージェントを起動します。ノード IP アドレスは Swam Manager がアクセス可能であれば、パブリックである必要はありません。

```
swarm join --advertise=<node_ip:2375> consul://<consul_addr>/<optional path prefix>
```

マシンやノート PC 上で Manager を起動します。

```
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 を使う

各ノードで Swam エージェントを起動します。ノード IP アドレスは Swam Manager がアクセス可能であれば、パブリックである必要はありません。

```
swarm join --advertise=<node_ip:2375> zk://<zookeeper_addr1>,<zookeeper_addr2>/<optional path prefix>
```

マシンやノート PC 上で Manager を起動します。

```
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 上で Manager を起動します。

```
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` と `nodes` は、特定の 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
```

それから Manager を起動します。

```
swarm manage -H tcp://<swarm_ip:swarm_port> file:///tmp/my_cluster
```

そして `nodes` ディスカバリ・メソッドを追加します。

```
warm manage -H <swarm_ip:swarm_port> "nodes://10.0.0.[10:200]:2375,10.0.1.[2:250]:2375"
```

## 新しいディスカバリ・バックエンドに貢献する

あなたは Swam 向けに新しいディスカバリ・バックエンドに貢献できます。どのようにするかは、[Docker Swarm レポジトリにある discovery README](https://docs.docker.com/swarm/https://github.com/docker/swarm/blob/master/discovery/README) をお読みください。