Docker Swarm: 開発用の Swam クラスタの作成

# 開発用の Swam クラスタの作成
原文：https://docs.docker.com/swarm/install-manual/

この章では、自分のネットワーク上に Docker Swam を作成し、デバッグやテストや開発目的への使い方を紹介します。今回の構築手順は、Docker Swam 向けの何らかのアプリケーション開発や、貢献のためにも使えます。

注意：セットアップは、ファイアーウォールや他の手法により、安全にされたネットワーク環境上で行ってください。

## 必要条件

Docker Swarm manager という単一システムへ Docker Swarm をインストールします。そしてネットワーク上で、クラスタや Swam や追加ノードを生成します。Swam クラスタの各ノードが必要なのは：

* Swarm Manager に自分のネットワークからアクセス可能
* Docker エンジン 1.6.0 以上のインストール
* Manager 向けに TCP ポートがオープン

Docker Swam を Linux の 64bit アーキテクチャで実行できます。また、64bit の Windows や Mac OS X でもインストールできますが、ベータ段階においては互換性のテストを定常的に行っていません。

使えるようになるまで、ネットワーク上でシステムが認識されるまで時間がかかります。各ノードにおいても、上記リスト項目の必要条件を確認します。

## Swam イメージの取得とクラスタの作成

Swam を使い始めるのに最も簡単なのは、[公式 Docker イメージ](https://registry.hub.docker.com/_/swarm/) を使う方法です。

1. Swam イメージの取得

```
$ docker pull swarm
```
2. `docker` コマンドで Swarm クラスタの作成

```
$ docker run --rm swarm create
6856663cdefdec325839a4b7e1de38e8 # 
```

`create` コマンドを実行すると、ユニークなクラスタ ID （`cluster_id`） を返します。Docker Swam エージェントをノード上で起動するとき、この ID が必要になります。

## Swam ノードの作成

各 Swam ノードでは Swam ノードのエージェントを実行します。エージェントは Docker デーモンや監視のために登録され、ノードの状態とディスカバリ・バックエンドを更新します。

この例では、Docker Hub ベースの `token` ディスカバリ・サービスを使います。**各ノード**にログインし、同じ作業を行います。

1. Docker デーモンを `-H` フラグで起動します。Swarm エージェントの Docker リモート API が 、TCP を通して Swam Manager と通信できるようにします。

```
$ docker -H tcp://0.0.0.0:2375 -d
```
2. ディスカバリ・サービスに Swam エージェントを登録します。このノードの IP アドレスは、Swam Manager からアクセスできる必要があります。次のコマンドを実行するときは、`node_ip` と `cluster_id` を置き換えてエージェントを起動します：

docker run -d swarm join --addr=<node_ip:2375> token://<cluster_id>

実行例：

```
$ docker run -d swarm join --addr=172.31.40.100:2375 token://6856663cdefdec325839a4b7e1de38e8
```

3. マシンや自分のノート PC 上で Swarm Manager を開始します。

次のコマンドは、どのように行うかです。

```
docker run -d -p <swarm_port>:2375 swarm manage token://<cluster_id>
```

4. Manager を実行したあとは、次のように `docker info` を実行して設定情報を確認します：

```
docker -H tcp://<manager_ip:manager_port> info
```

例えば、自分のマシン上でローカルに Manager を実行すると：

```
$ docker -H tcp://0.0.0.0:2375 info
Containers: 0
Nodes: 3
 agent-2: 172.31.40.102:2375
    └ Containers: 0
    └ Reserved CPUs: 0 / 1
    └ Reserved Memory: 0 B / 514.5 MiB
 agent-1: 172.31.40.101:2375
    └ Containers: 0
    └ Reserved CPUs: 0 / 1
    └ Reserved Memory: 0 B / 514.5 MiB
 agent-0: 172.31.40.100:2375
    └ Containers: 0
    └ Reserved CPUs: 0 / 1
    └ Reserved Memory: 0 B / 514.5 MiB
```

TLS を有効にしないでテスト用のクラスタを実行しようとしても、エラーが起こります。このような場合は、環境変数 `DOCKER_TLS_VERIFY` を次のように無効化します：

```
$ unset DOCKER_TLS_VERIFY
```

## Docker CLI を使う

通常の Docker CLI を使ってノードにアクセスできるようになります：

```
docker -H tcp://<manager_ip:manager_port> info
docker -H tcp://<manager_ip:manager_port> run ...
docker -H tcp://<manager_ip:manager_port> ps
docker -H tcp://<manager_ip:manager_port> logs ...
```

## クラスタ上のノード一覧を表示

稼働中のノード全てのリストを取得するには `swam list` コマンドを使います：

```
docker run --rm swarm list token://<cluster_id>
<node_ip:2375>
```

実行例：

```
$ docker run --rm swarm list token://6856663cdefdec325839a4b7e1de38e8
172.31.40.100:2375
172.31.40.101:2375
172.31.40.102:2375
```

## TLS

Swam は CLI と Swam 間の TLS 認証をサポートしているだけでなく、Swam と Docker ノード間でもサポートしています。***しかしながら***、全ての Docker デーモンと Docker ノードが同じ CA 証明書を使って認証されている**必要があります**。

クライアントとサーバいずれも TLS を有効にするには、Docker で指定したときのように同様のコマンドライン・オプションを指定します：

```
swarm manage --tlsverify --tlscacert=<CACERT> --tlscert=<CERT> --tlskey=<KEY> [...]
```

Docker の TLS 認証設定や証明書の生成に関する詳細情報は、[Docker のドキュメント](https://docs.docker.com/articles/https/)を参照ください。


メモ：Swam 証明書は`extendedKeyUsage = clientAuth,serverAuth`を使って生成する必要があります。