開発用の 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 イメージ を使う方法です。
- Swam イメージの取得
$ docker pull swarm
-
docker
コマンドで Swarm クラスタの作成
$ docker run --rm swarm create
6856663cdefdec325839a4b7e1de38e8 #
create
コマンドを実行すると、ユニークなクラスタ ID (cluster_id
) を返します。Docker Swam エージェントをノード上で起動するとき、この ID が必要になります。
Swam ノードの作成
各 Swam ノードでは Swam ノードのエージェントを実行します。エージェントは Docker デーモンや監視のために登録され、ノードの状態とディスカバリ・バックエンドを更新します。
この例では、Docker Hub ベースの token
ディスカバリ・サービスを使います。各ノードにログインし、同じ作業を行います。
- Docker デーモンを
-H
フラグで起動します。Swarm エージェントの Docker リモート API が 、TCP を通して Swam Manager と通信できるようにします。
$ docker -H tcp://0.0.0.0:2375 -d
- ディスカバリ・サービスに Swam エージェントを登録します。このノードの IP アドレスは、Swam Manager からアクセスできる必要があります。次のコマンドを実行するときは、
node_ip
とcluster_id
を置き換えてエージェントを起動します:
docker run -d swarm join --addr= token://
実行例:
$ docker run -d swarm join --addr=172.31.40.100:2375 token://6856663cdefdec325839a4b7e1de38e8
- マシンや自分のノート PC 上で Swarm Manager を開始します。
次のコマンドは、どのように行うかです。
docker run -d -p <swarm_port>:2375 swarm manage token://<cluster_id>
- 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 のドキュメントを参照ください。
メモ:Swam 証明書はextendedKeyUsage = clientAuth,serverAuth
を使って生成する必要があります。