manage - Swarm マネージャの作成¶
動作条件:Swarm マネージャで manage を使う前に、 こちらのディスカバリのドキュメント に書かれているディスカバリ・バックエンドを構築します。
manage コマンドは Swarm マネージャを作成します。マネージャはクラスタに対するコマンド受信と、Swarm ノードにコンテナを割り当てる役割があります。高可用性クラスタ用に複数の Swarm マネージャの作成も可能です。
Swarm マネージャを作成するには、以下の構文を使います。
$ docker run swarm manage [OPTIONS] <discovery>
例えば、Swarm マネージャを manage で作成時に、他のマネージャと高可用性クラスタを形成するには、次のように実行します。
$ docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise 172.30.0.161:4000 consul://172.30.0.165:8500
あるいは、Swarm マネージャ作成時、Docker クライアントと Swarm ノード間で TLS 認証を有効にするには、次のように実行します。
$ docker run -d -p 3376:3376 -v /home/ubuntu/.certs:/certs:ro swarm manage --tlsverify --tlscacert=/certs/ca.pem --tlscert=/certs/cert.pem --tlskey=/certs/key.pem --host=0.0.0.0:3376 token://$TOKEN
引数¶
manage コマンドは引数を1つだけ指定できます。
<discovery> - ディスカバリ・バックエンド¶
Swarm マネージャを作成する前に、 ディスカバリ・トークンの作成 と ディスカバリ・バックエンドのセットアップ が必要です。
Swarm ノードの作成時、 <discovery> を使って以下のバックエンドを指定可能です。
- token://<token>
- consul://<ip1>/<path>
- etcd://<ip1>,<ip2>,<ip2>/<path>
- file://<path/to/file>
- zk://<ip1>,<ip2>/<path>
- [nodes://]<iprange>,<iprange>
それぞれの項目は:
- <token>はDocker Hub のホステッド・ディスカバリ・サービスによって生成されるトークンです。このトークンを作成するには- createコマンドを使います。
- ip1、- ip2、- ip3はディスカバリ・バックエンド用ノードの IP アドレスとポート番号を指定します。
- path(オプション)はディスカバリ・バックエンドのキーバリュー・ストアのパスを指定します。複数のクラスタを1つのバックエンドで管理する場合は、各クラスタごとにキーバリューのペアを記述する必要があります。
- path/to/fileはSwarm マネージャとクラスタのメンバであるノード情報の一覧と、それぞれの静的な IP アドレスのリストを指定したファイルのパスを指定します。
- iprangeは特定のポート番号を利用する IP アドレスの範囲を指定します。
以下は <discovery> 引数の指定例です:
- ディスカバリ・トークン: - token://0ac50ef75c9739f5bfeeaf00503d4e6e
- Consul ノード: - consul://172.30.0.165:8500
<discovery> は環境変数 $SWARM_DISCOVERY でも指定可能です。
より詳しい情報やサンプルについては、 Docker Swarm ディスカバリ をご覧ください。
オプション¶
manage コマンドには以下のオプションがあります:
strategy - スケジュール先のストラテジ¶
--strategy "<値>" を使い、 Docker Swarm スケジューラに対して何のストラテジを使うか指定します。
"値" の場所には:
- spread- 最も利用可能なリソースが多い Swarm ノードに対し、各コンテナを割り当てます。
- binpack- 割り当てられた Swarm ノードのリソースが溢れる前に、別のノードに割り当てます。
- random- ランダムな Swarm ノードにコンテナを割り当てます。
デフォルトでは、スケジューラは spread ストラテジを使います。
より詳しい情報はや例は Docker Swarm ストラテジ をご覧ください。
--filter 、 -f - スケジューラ・フィルタ¶
--filter <値> もしくは -f <値> で、コンテナを作成・実行時、どのノードを使うかを Docker Swarm スケジューラに対して指定します。
<値> の場所には:
- health- ディスカバリ・バックエンドと通信可能な実行中ノードを使います。
- port- コンテナにポートを割り当てるために、適切なポート番号が利用可能なノード(つまり、他のコンテナやプロセスにポートが専有されていない環境)を使います。
- dependency- 依存関係を宣言しているコンテナの場合、依存関係のあるコンテナが起動しているノードを使います。
- affinity- アフィニティが宣言されたコンテナの場合は、アフィニティが同一のノードを使います。
- constraint- 制約(constraint)が宣言されたコンテナの場合は、同一の制約を持つノードを使います。
複数のスケジューラ・フィルタを使うには、次のようにします。
--filter <value> --filter <value>
より詳しい情報や例は Swarm フィルタ をご覧ください。
--host , -H - リッスンする IP/ポート¶
--host <IP>:<ポート> もしくは -H <ip>:<ポート> を使い、マネージャがメッセージを受信するための IP アドレスとポート番号を指定します。 ip の部分に 0 を使うか省略したら、manager はデフォルトのホスト IP を使います。例: --host=0.0.0.0:3376 または -H :4000 。
--host は環境変数 $SWARM_HOST でも指定できます。
--replication - Swarm マネージャ複製の有効化¶
高可用性クラスタでは、プライマリとセカンダリ・マネージャ間で、Swarm マネージャの複製(レプリケーション)を可能にします。プライマリからセカンダリにクラスタ情報のミラーを複製します。つまりプライマリ・マネージャで障害が起これば、セカンダリがプライマリ・マネージャになれます。
--replication-ttl - リーダー障害発生時のロック解除時間¶
--replication-ttl "<遅延>s" を使い、遅延時間を秒で指定します。これはセカンダリ・マネージャがプライマリ・マネージャがダウンまたは到達可能と通知する時間です。この通知をトリガとして、セカンダリ・マネージャの誰がプライマリ・マネージャになるのか選出されます。デフォルトの遅延は 15 秒です。
--advertise , --addr - Docker Engine のアドバタイズ用 IP とポート番号¶
--advertise <ip>:<ポート> か --addr <ip>:<ポート> を使い Docker Engine のアドバタイズ(Advertise; 周知用) IP アドレスとポート番号を指定します。例: --advertise 172.30.0.161:4000  。他の Swarm マネージャは、対象の Swarm マネージャに接続するため、ここで指定した IP アドレスとポート番号を使う必要があります。
--advertise は環境変数 $SWARM_ADVERTISE でも指定できます。
--tls - TLS の有効化¶
--tls を使い TLS(トランスポート・レイヤ・セキュリティ)を有効化します。 --tlsverify を使う場合は --tls の使用は不要です。
--tlscacert - 証明局(CA) の公開鍵ファイルのパス¶
--tlscacert=<path/file> を使い証明局(CA)用の公開鍵(証明書)のパスとファイル名を指定します。例: --tlscacert=/certs/ca.pem 。指定したら、マネージャが信頼するのは、同じ証明局で署名された証明書を使っているリモート環境のみです。
--tlscert - ノードの TLS 証明書ファイルのパス¶
--tlskey を使い、マネージャの証明書(CAによって署名済み)のファイル名とパスを指定します。例: --tlskey=/certs/key.pem 。
--tlskey - ノードの TLS 鍵ファイルのパス¶
--tlskey を使いマネージャの秘密鍵(CAによって署名済み)のファイル名とパスを指定します。例: --tlskey=/certs/key.pem 。
--tlsverify - TLS を使いリモート環境を確認¶
--tlsverify を使いTLS 通信を有効化し、同一の証明局(CA)で署名された証明書を持っているマネージャ、ノード、クライアントのみ通信を許可します。 --tlsverify を使えば、 --tls を使う必要はありません。
--engine-refresh-min-interval  - Engine の最小リフレッシュ間隔を指定¶
--engine-refresh-min-interval "<間隔>s" を使い、Engine を例フレッシュするまでの最小間隔を秒単位で指定します。デフォルトでは、この間隔は 30 秒です。
注釈
プライマリ・マネージャが Engine をリフレッシュするというのは、クラスタ上にある Engine の情報を更新することです。マネージャはこの情報を Engine が正常(healthy)かどうか決めるために使います。接続できなければ、マネージャは対象ノードを障害(unhealthy)とみなします。マネージャは指定した間隔ごとに再度 Engine 情報の更新を試みます。規定回数の再試行して Engine が応答するのであれば、再び Engine を正常(healthy)とみなします。もしそうでなければ、マネージャは再試行を停止し、対象の Engine を無視します。
--engine-refresh-max-interval - Engine の最大リフレッシュ間隔を指定¶
--engine-refresh-max-interval "<間隔>秒" を使い、リフレッシュまでの最大間隔を秒単位で指定します。デフォルトでは、この間隔は 60 秒です。
--engine-failure-retry - Engine のリトライ失敗回数¶
--engine-failure-retry "数値" を使い、Engine が障害とみなすまでの再試行の回数を指定します。デフォルトでは、3回再試行します。
--engine-refresh-retry - 廃止予定¶
廃止予定; --engine-failure-retry "数値" の代わりに --engine-failure-retry を使います。デフォルトは 3 です。
--heartbeat - ハートビート間隔¶
--heartbeat "<間隔>s" を使い、マネージャとプライマリ・マネージャ間のハードビート間隔を秒単位で指定します。ハードビートとはマネージャが正常で到達可能であるかを確認します。デフォルトでは、この間隔は 60 秒です。
--api-enable-cors , --cors - リモート API の CORS ヘッダを有効化¶
--api-remote-cors か --cors を使い CORS (cross-origin resource sharing) ヘッダをリモート API に入れます。
--cluster-driver , -c - 使用するクラスタ・ドライバ¶
--cluster-driver "ドライバ" か -c "<ドライバ>" を使い、使用するクラスタ・ドライバを指定します。 <ドライバ> に指定できるのは、以下のどちらかです。
- swarmは Docker Swarm ドライバです。
- mesos-experimentalは Mesos クラスタ・ドライバです。
デフォルトは swarm ドライバです。
Mesos ドライバの利用に関する詳しい情報は、 Using Docker Swarm and Mesos をご覧ください。
--cluster-opt - クラスタ・ドライバのオプション¶
複数のクラスタ・ドライバのオプションを --cluster-opt <値> --cluster-opt <値> のような形式で指定できます。
<値> の場所に入る項目は以下の通りです:
- swarm.overcommit=0.05- リソースをオーバー・コミットする割合(パーセント)を指定します。デフォルト値は- 0.05であり、5パーセントを意味します。
- swarm.createretry=0- コンテナ作成に何度失敗すると障害とみなすかを指定します。デフォルトの値は- 0回の再試行です。
- mesos.address=- バインドする Mesos のアドレスを指定します。このオプションは環境変数- $SWARM_MESOS_ADDRESSでも指定できます。
- mesos.checkpointfailover=false- Mesos のチェックポインティング(checkpointing)を有効化します。これは、以前まで使っていたエクゼキュータの状態が復旧したら、スレーブが再接続できるようにします。この時、ディスク I/O を消費します。このオプションは環境変数- $SWARM_MESOS_CHECKPOINT_FAILOVERでも指定できます。デフォルト値は- false(無効)です。
- mesos.port=- Mesos がバインドするポートを指定します。このオプションは環境変数- $SWARM_MESOS_PORTでも指定できます。
- mesos.offertimeout=30s- Mesos がタイムアウトと判断する秒を指定します。このオプションは環境変数- $SWARM_MESOS_OFFER_TIMEOUTでも指定できます。デフォルトの値は- 30sです。
- mesos.offerrefusetimeout=5s- Mesos がリソースの再利用ができないと判断する秒を指定します。このオプションは環境変数- $SWARM_MESOS_OFFER_REFUSE_TIMEOUTでも指定できます。デフォルトの値は- 5sです。
- mesos.tasktimeout=5s- Mesos のタスク作成までのタイムアウトを秒で指定します。このオプションは環境変数- $SWARM_MESOS_TASK_TIMEOUTでも指定できます。デフォルトの値は- 5sです。
- mesos.user=- Mesos フレームワークのユーザ名を指定します。このオプションは環境変数- $SWARM_MESOS_USERでも指定できます。
--discovery-opt - ディスカバリ・オプション¶
--discovery-opt <値> を使いディスカバリオプションを指定します。これには Consul や etcd ディスカバリ・サービスが使用する TLS ファイル(CA 公開鍵証明書、証明書、プライベート鍵)の指定も含みます。ディスカバリ・オプションは何度も指定できます。例:
--discovery-opt kv.cacertfile=/path/to/mycacert.pem \
--discovery-opt kv.certfile=/path/to/mycert.pem \
--discovery-opt kv.keyfile=/path/to/mykey.pem \
より詳しい情報は Docker Swarm ディスカバリ をご覧ください。
参考
- manage — Create a Swarm manager