docker service update

読む時間の目安: 11 分

説明

サービスを更新します。

API 1.24 以上  このコマンドを利用するには、クライアントとデーモンの API はともに、最低でも 1.24 である必要があります。 クライアント上においてdocker versionコマンドを実行して、クライアントとデーモンの API バージョンを確認してください。

Swarm このコマンドは Swarm オーケストレーターにおいて動作します。

利用方法

$ docker service update [オプション] SERVICE

追加説明

指定されたパラメーターによって表されるサービスのアップデートを行います。 このパラメーターは docker service create のものと同じです。 詳しい情報はそこでの説明を参照してください。

サービスへの変更がタスクの再生成を必要とする場合、普通はサービスのアップデートを行うと、それまでのタスクが新たなタスクに置き換わるだけです。 たとえば--update-parallelismの設定を変更しただけであれば、タスクは再生成されません。 個々のタスクはこの設定に影響されないためです。 一方--forceフラグであれば、タスクの再生成が発生します。 このフラグはローリングリスタート(rolling restart)を実施するために用いられるものなので、サービスパラメーターの変更の有無は関係がありません。

メモ

これはクラスター管理コマンドです。 したがって Swarm のマネージャーノード上で実行する必要があります。 マネージャーノードとワーカーノードについては Swarm モード の節を参照してください。

本コマンドの利用例については、以下に示す 利用例の節 を参照してください。

オプション

名前/省略形 デフォルト 説明
--args サービスに対するコマンド引数
--cap-add API 1.41 以上
Linux ケーパビリティーを追加します。
--cap-drop API 1.41 以上
Linux ケーパビリティーを削除します。
--config-add API 1.30 以上
サービスに対する設定ファイルを追加または更新します。
--config-rm API 1.30 以上
設定ファイルを削除します。
--constraint-add 配置に関する制約(placement constraint)を追加または更新します。
--constraint-rm 制約(constraint)を削除します。
--container-label-add コンテナーのラベルを追加または更新します。
--container-label-rm コンテナーのラベルをキーを使って削除します。
--credential-spec API 1.29 以上
管理サービスアカウントに対する資格情報スペック(Credential spec)。(Windows のみ)
--detach , -d API 1.29 以上
サービス処理を待たずに即座に戻ります。
--dns-add API 1.25 以上
カスタム DNS サーバーを追加または更新します。
--dns-option-add API 1.25 以上
DNS オプションを追加または更新します。
--dns-option-rm API 1.25 以上
DNS オプションを削除します。
--dns-rm API 1.25 以上
カスタム DNS サーバーを削除します。
--dns-search-add API 1.25 以上
カスタム DNS 検索ドメインを追加または削除します。
--dns-search-rm API 1.25 以上
DNS 検索ドメインを削除します。
--endpoint-mode エンドポイントモード(vip または dnsrr)。
--entrypoint イメージのデフォルト ENTRYPOINT をオーバーライドします。
--env-add 環境変数を追加または更新します。
--env-rm 環境変数を削除します。
--force API 1.25 以上
変更が不要であっても強制的に更新します。
--generic-resource-add ジェネリックリソース(Generic resource)を追加します。
--generic-resource-rm ジェネリックリソース(Generic resource)を削除します。
--group-add API 1.25 以上
新たに参加する補助ユーザーグループをコンテナーに追加します。
--group-rm API 1.25 以上
すでに追加されている補助ユーザーグループをコンテナーから削除します。
--health-cmd API 1.25 以上
ヘルスチェックを実行するコマンド。
--health-interval API 1.25 以上
ヘルスチェックの実行間隔。(ms|s|m|h)
--health-retries API 1.25 以上
不健康(unhealthy)であると報告するのに必要な連続失敗回数。
--health-start-period API 1.29 以上
ヘルスチェックのリトライを数え始める前の、コンテナー初期化を行う開始時間。(ms|s|m|h)
--health-timeout API 1.25 以上
1 つのチェック処理実行に許容する最大時間。(ms|s|m|h)
--host-add API 1.32 以上
カスタムのホスト-IP 間マッピングを追加します。(host:ip)
--host-rm API 1.25 以上
カスタムのホスト-IP 間マッピングを削除します。(host:ip)
--hostname API 1.25 以上
コンテナーホスト名。
--image サービスイメージタグ。
--init API 1.37 以上
各サービスコンテナー内部にて、シグナル送信と子プロセス管理を行う初期化処理を実行します。
--isolation API 1.35 以上
サービスの分離技術(isolation technology)モード。
--label-add サービスラベルを追加または更新します。
--label-rm ラベルをそのキーを用いて削除します。
--limit-cpu CPU 数を制限します。
--limit-memory メモリ容量を制限します。
--limit-pids API 1.41 以上Swarm
プロセスの最大数を制限します(デフォルトは 0 = 無制限)。
--log-driver サービスにおけるログドライバー。
--log-opt ログドライバーオプション。
--max-concurrent API 1.41 以上
同時に実行するジョブタスク数(デフォルトは --replicas に等しい)。
--mount-add サービス上のマウントを追加または更新します。
--mount-rm マウントをそのターゲットパスを使って削除します。
--network-add API 1.29 以上
ネットワークを追加します。
--network-rm API 1.29 以上
ネットワークを削除します。
--no-healthcheck API 1.25 以上
コンテナー固有の HEALTHCHECK を無効にします。
--no-resolve-image API 1.30 以上
レジストリに対してイメージダイジェスト値や対応プラットフォームを確認しません。
--placement-pref-add API 1.28 以上
配置設定(placement preference)を追加します。
--placement-pref-rm API 1.28 以上
配置設定(placement preference)を削除します。
--publish-add 公開ポートの追加または更新を行います。
--publish-rm 公開ポートをそのポート番号を指定して削除します。
--quiet , -q 経過出力を省略します。
--read-only API 1.28 以上
コンテナーのルートファイルシステムを読み込み専用としてマウントします。
--replicas タスク数。
--replicas-max-per-node API 1.40 以上
各ノードごとの最大タスク数(デフォルトは 0 =無制限)。
--reserve-cpu CPU の予約数。
--reserve-memory メモリの予約容量。
--restart-condition 条件を満たした際に再起動します。("none"|"on-failure"|"any")
--restart-delay 再起動実施の遅延時間(ns|us|ms|s|m|h)。
--restart-max-attempts 再起動の最大リトライ回数。
--restart-window 再起動ポリシーの評価に利用されるウィンドウ(ns|us|ms|s|m|h)。
--rollback API 1.25 以上
前回スペックへのロールバック。
--rollback-delay API 1.28 以上
タスクロールバック時の遅延時間(ns|us|ms|s|m|h)。
--rollback-failure-action API 1.28 以上
ロールバック失敗時の処理(「pause」|「continue」)。
--rollback-max-failure-ratio API 1.28 以上
ロールバック時に許容される失敗率。
--rollback-monitor API 1.28 以上
各タスクのロールバックが失敗しないかを監視する時間間隔(ns|us|ms|s|m|h)。
--rollback-order API 1.29 以上
ロールバック順(「start-first」|「stop-first」)。
--rollback-parallelism API 1.28 以上
同時にロールバックする最大タスク数(0 は全タスク同時)。
--secret-add API 1.25 以上
サービスに Secret(機密情報)を追加または更新します。
--secret-rm API 1.25 以上
Secret(機密情報)を削除します。
--stop-grace-period 強制的にコンテナーを kill する際の待機時間(ns|us|ms|s|m|h)。
--stop-signal API 1.28 以上
コンテナーを停止するためのシグナル。
--sysctl-add API 1.40 以上
sysctl オプションを追加または更新します。
--sysctl-rm API 1.40 以上
sysctl オプションを削除します。。
--tty , -t API 1.25 以上
擬似 TTY を割り当てます。
--ulimit-add API 1.41 以上
ulimit オプションを追加または更新します。
--ulimit-rm API 1.41 以上
ulimit オプションを削除します。
--update-delay 更新間の遅延時間(ns|us|ms|s|m|h)。
--update-failure-action 更新失敗時のアクション(「pause」|「continue」|「rollback」)。
--update-max-failure-ratio API 1.25 以上
更新時に許容される失敗率。
--update-monitor API 1.25 以上
各タスクの更新が失敗しないかを監視する時間間隔(ns|us|ms|s|m|h)。
--update-order API 1.29 以上
更新順(「start-first」|「stop-first」)。
--update-parallelism 同時に更新する最大タスク数(0 は全タスク同時)。
--user , -u ユーザー名または UID。(記述書式: <name|uid>[:<group|gid>])
--with-registry-auth レジストリ認証情報の詳細を Swarm エージェントに送信します。
--workdir , -w コンテナー内部のワーキングディレクトリ。

利用例

サービスのアップデート

$ docker service update --limit-cpu 2 redis

パラメーター変更が不要なローリングアップデート

$ docker service update --force --update-parallelism 1 --update-delay 30s redis

上のコマンド例では--forceフラグを利用することで、サービスタスクがいったん停止した上で、新たなものに置き換わります。 その他のパラメーターではこのようなことは発生しません。 --update-parallelism 1を指定すると、一度に置き換わるタスクはただ 1 つになります(これがデフォルトです)。 --update-delay 30sを指定すると、タスク処理間において 30 秒の遅延を生じさせます。 したがってローリングアップデートは徐々に行われることになります。

マウントの追加と削除

--mount-addまたは--mount-rmオプションは、サービスのバインドマウントやボリュームを追加または削除します。

以下の例では、test-dataボリュームを/somewhereにマウントしたサービスが生成されます。 次の処理によってother-volumeボリュームを/somewhere-elseボリュームにマウントすることも行います。 そして最後にマウントポイント/somewhereをアンマウントします。 こうしてtest-dataボリュームを実際に削除します。 各コマンドでは戻り値としてサービス名が返されます。

  • --mount-addフラグは、service createコマンドにおける--mountフラグと同じパラメーターを指定します。 詳しくはコマンドリファレンスservice createボリュームとバインドマウント の節を参照してください。

  • --mount-rmフラグはマウントのtargetパスを引数に指定します。

$ docker service create \
    --name=myservice \
    --mount type=volume,source=test-data,target=/somewhere \
    nginx:alpine

myservice

$ docker service update \
    --mount-add type=volume,source=other-volume,target=/somewhere-else \
    myservice

myservice

$ docker service update --mount-rm /somewhere myservice

myservice

サービス公開ポートの追加と削除

--publish-addまたは--publish-rmフラグは、サービスの公開ポートを追加または削除します。 docker service create において示しているように、このときには短い文法と長い文法が利用できます。

以下に示す例では、既存のサービスに対して公開ポートを追加します。

$ docker service update \
  --publish-add published=8080,target=80 \
  myservice

ネットワークの追加と削除

--network-addまたは--network-rmフラグは、サービスに対してネットワークを追加または削除します。 docker service create において示しているように、このときには短い文法と長い文法が利用できます。

以下の例では、すでに my-network というネットワークに接続済のサービスに対して、新たにエイリアス名を追加します。

$ docker service update \
  --network-rm my-network \
  --network-add name=my-network,alias=web1 \
  myservice

サービスの前バージョンへのロールバック

--rollbackオプションは、サービスの前バージョンへのロールバックを行います。

このコマンドの実行後は、最後にdocker service updateコマンドを実行した直前の設定状態に戻ります。

以下の例では、サービスのレプリカ数を 4 から 5 に変更します。 その次に元の設定状態にロールバックします。

$ docker service update --replicas=5 web

web

$ docker service ls

ID            NAME  MODE        REPLICAS  IMAGE
80bvrzp6vxf3  web   replicated  0/5       nginx:alpine

webサービスをロールバックします。

$ docker service update --rollback web

web

$ docker service ls

ID            NAME  MODE        REPLICAS  IMAGE
80bvrzp6vxf3  web   replicated  0/4       nginx:alpine

--rollbackオプションでは別のオプションを併用することができます。 たとえば--update-delay 0sを指定すると、タスクごとのロールバック処理を遅延なく実施します。

$ docker service update \
  --rollback \
  --update-delay 0s
  web

web

サービスが更新に失敗したときには、自動的に前バージョンにロールバックするように設定することもできます。 サービスを自動ロールバックするように設定するには--update-failure-action=rollbackを指定します。 タスクの一部に更新に失敗するものが発生した際に、その数が--update-max-failure-ratioにより指定した値を超えた場合には、ロールバック処理が起動します。

ロールバック処理においては発生率、並行処理などに関するパラメーターがあり、以下に示すフラグ値により制御されます。

  • --rollback-delay
  • --rollback-failure-action
  • --rollback-max-failure-ratio
  • --rollback-monitor
  • --rollback-parallelism

たとえば--update-parallelism 1 --rollback-parallelism 3として設定されたサービスでは、通常のアップデート間隔において一度に 1 つのタスクのみ更新され、ロールバック処理時には 3 つのタスクが同時にロールバックされます。 これらのパラメーターは、自動ロールバック時および--rollbackを指定した手動ロールバック時のいずれにおいても作用します。

Secret の追加と削除

--secret-addおよび--secret-rmオプションは、サービスの Secret(機密情報)の追加または削除を行います。

以下に示す例はssh-2という Secret を追加し、ssh-1という Secret を削除します。

$ docker service update \
    --secret-add source=ssh-2,target=ssh-2 \
    --secret-rm ssh-1 \
    myservice

テンプレート利用によるサービスアップデート

service updateのフラグの中にはテンプレートの利用をサポートするものがあります。 詳しくは service create を参照してください。

分離モードの設定(Windows)

service updateではservice createと同様に--isolationフラグをサポートしています。 その利用方法は service create を参照してください。

ジョブのアップデート

サービスがジョブとして生成されるのは、service createの実行時にサービスモードがreplicated-jobglobal-jobに設定されたときです。 このときにはサービス更新を行うオプションが制限されます。

ジョブを更新すると、実行中のタスクは即座に停止します。 この処理によってジョブに対する新たなタスクが生成され、各タスクの完了ステータスが初期化されます。 更新処理前に稼働していたタスクは停止され、新たなタスクとして再生成されます。

ジョブはロールアウトやロールバックを行うことはできません。 更新やロールバックを設定する各種設定は、ジョブモードにおいては無効となります。

それまで稼働していたジョブを同一パラメーターにより再起動するには、--forceフラグをつけて更新操作を行います。

上位コマンド

コマンド 説明
docker service サービスを管理します。
コマンド 説明
docker service create 新たなサービスを生成します。
docker service inspect サービスの詳細情報を表示します。
docker service logs サービスまたはタスクのログを取得します。
docker service ls サービス一覧を表示します。
docker service ps 1 つまたは複数サービスのタスクを一覧表示します。
docker service rm 1 つまたは複数のサービスを削除します。
docker service rollback サービス設定に対しての変更を元に戻します。
docker service scale 1 つまたは複数のレプリカサービスをスケール変更します。
docker service update サービスを更新します。