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