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
- https://docs.docker.com/swarm/reference/manage/