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-jobかglobal-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 | サービスを更新します。 |