開発用の Swarm クラスタ作成¶
このページでは、自分のネットワーク上に Docker Swam を作成する方法を紹介します。用途は、デバッグやテストや開発目的のみ対象です。この構築手順は、Docker Swam 向けの何らかのアプリケーション開発や、貢献のためにも使えます。
ご用心
セットアップは、ファイアーウォールや他の手法によって、安全なネットワーク環境上で行ってください。
事前準備¶
単一システム上に Docker Swarm をインストールします。インストールするのは Docker Swarm マネージャです。これを使い、クラスタの作成や、ネットワーク上の更なるノードを登録を行います。Swram クラスタの各ノードが必要になる環境は、次の通りです。
- Swarm Manager が自分のネットワークにアクセス可能
- Docker エンジン 1.6.0 以上のインストール
- Swarm Manager 向けに TCP ポートをオープン
Docker Swarm は Linux の 64 bit アーキテクチャ上で実行できます。64 bit の Windows や Mac OSX でもインストール・実行可能ですが、いくつかのアーキテクチャ上での互換性は十分に検証されていません。
ネットワーク上のシステムによって認識され、利用可能になるまでは、まだ少々の時間がかかります。上記の動作条件を満たしているかどうか、ご確認ください。
Swarm イメージの取得とクラスタ作成¶
Swarm を使い始めるには、 公式 Docker イメージ の利用が最も簡単です。
- Swarm イメージを取得します。
$ docker pull swarm
docker
コマンドを使用して Swarm クラスタを作成します。
$ docker run --rm swarm create
6856663cdefdec325839a4b7e1de38e8 #
create
コマンドを実行すると、ユニークなクラスタ ID ( cluster_id
)を返します。この ID は、ノード上で Docker Swarm エージェントの開始時に使います。
Swarm ノードの作成¶
各 Swam ノードでは Swam ノードのエージェントを実行します。エージェントは Docker デーモンや監視のために登録され、ノードの状態とディスカバリ・バックエンドを更新します。
この例では、Docker Hub を使う token
ディスカバリ・サービスを使います。 各ノード にログインし、同じ作業を行います。
- Docker デーモンに
-H
フラグを付けて起動します。これにより、 Swarm エージェント は Swarm マネージャ と TCP を通して通信可能になります。Docker リモート API と同様に、Docker 標準インストール時に利用可能な標準 UNIX ソケットも利用できます。
$ docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
注釈
Docker 1.8 よりも前のバージョンでは、 docker daemon
サブコマンドの代わりに、 -d
フラグを使います。
Swarm エージェントをディスカバリ・サービスに登録します。このノードの IP アドレスは、Swarm マネージャからアクセスできる必要があります。次のコマンドを実行する時は、 ノードID
と クラスタ ID
を適切なものに置き換えてください。
docker run -d swarm join --addr=<ノードIP:2375> token://<クラスタID>
実行例:
$ docker run -d swarm join --addr=172.31.40.100:2375 token://6856663cdefdec325839a4b7e1de38e8
マネージャの設定¶
ノードの準備が完了したら、Swarm を制御するマネージャをセットアップします。
- Swarm マネージャを、任意のマシンまたは自分の PC 上で起動します。実行するコマンドは、次の通りです。
docker run -d -p <管理用ポート>:2375 swarm manage token://<クラスタID>
マネージャは 管理用ポート
で指定したポートの公開とリッスンします。
- マネージャを起動後、次のように
docker info
を実行して、設定を確認します。
docker -H tcp://<manager_ip:manager_port> info
例えば、マネージャをローカルのマシン上で実行している場合は、次のように表示されます。
$ 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 ...
クラスタ上のノード一覧を表示¶
稼働中のノード一覧を取得するには、 swarm list
コマンドを使います。
docker run --rm swarm list token://<クラスタID>
<ノード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
を使う必要があります。