Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍Docker CLI 中 docker service update 常用命令。

1、docker service update 简介

docker service update 命令是用于更新 Docker Swarm 中的服务配置。它允许你修改服务的各种属性,如镜像、环境变量、副本数等。

该命令与Swarm编排器一起工作。

更新一个服务,根据指定的参数进行描述。这些参数与 docker service create 相同。进一步的信息请参考 docker service create 的描述。

通常情况下,更新一个服务只会在需要重新创建任务以使更改生效时,才会导致服务的任务被替换为新的任务。例如,仅更改 --update-parallelism 设置不会重新创建任务,因为这个设置不会影响到各个任务。然而,使用 --force 标志将无论如何导致任务被重新创建。这可以用于执行滚动重启而不对服务参数进行任何更改。

注意:

此命令是一个集群管理命令,必须在 Swarm 管理节点上执行。有关管理节点和工作节点的详细信息,请参阅文档中的 Swarm 模式部分。

参考文档https://docs.docker.com/engine/reference/commandline/service_update/

2、docker service update 语法

docker service update [OPTIONS] SERVICE

3、docker service update 命令

1)更新服务

docker service update --limit-cpu 2 redis

2)使用没有参数变化的滚动重启

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

在此示例中,--force 标志导致服务的任务被关闭并替换为新任务,即使其他参数通常不会导致发生这种情况。--update-parallelism 1 设置确保每次只替换一个任务(这是默认行为)。--update-delay 30s 设置在任务之间引入30秒的延迟,以便进行逐步的滚动重启。

3)添加或移除挂载 (--mount-add,--mount-rm)

使用 --mount-add--mount-rm 选项添加或移除服务的绑定挂载或卷。

以下示例创建一个服务,将 test-data 卷挂载到 /somewhere。下一步更新服务,将 other-volume 卷也挂载到 /somewhere-else。最后一步卸载 /somewhere 挂载点,从而有效地移除 test-data 卷。每个命令都返回服务名称。

--mount-add 标志接受与服务创建参考中的 --mount 标志相同的参数。有关详细信息,请参阅服务创建参考中的卷和绑定挂载部分。

--mount-rm 标志接受挂载的目标路径。

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

4)添加或移除已发布的服务端口 (--publish-add,--publish-rm)

使用 --publish-add--publish-rm 标志为服务添加或移除已发布的端口。您可以使用 docker service create 参考中讨论的短语法或长语法。

以下示例向现有服务添加已发布的服务端口。

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

5)添加或移除网络 (--network-add,--network-rm)

使用 --network-add--network-rm 标志为服务添加或移除网络。您可以使用 docker service create 参考中讨论的短语法或长语法。

以下示例为已连接到 my-network 网络的现有服务添加一个新的别名名称。

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

6)回滚到服务的上一个版本 (--rollback)

使用 --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 设置的服务在正常更新期间一次更新一个任务,但在回滚期间,一次回滚 3 个任务。这些回滚参数在自动回滚和使用 --rollback 手动发起的回滚中都会被尊重。

7)添加或移除密钥信息 (--secret-add, --secret-rm)

使用 --secret-add 或 --secret-rm 选项添加或移除服务的机密信息。

以下示例添加一个名为 ssh-2 的机密信息并移除 ssh-1:

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

8)使用模板更新服务

某些服务更新的标志支持使用模板。有关详情,请参阅服务创建参考。

9)在 Windows 上指定隔离模式 (--isolation)

service update 支持与 service create 相同的 --isolation 标志。有关详情,请参阅服务创建参考。

10)更新作业

当将服务作为作业创建时,通过在 service create 中将其模式设置为 replicated-job 或 global-job,其更新选项会受到限制。

更新作业会立即停止所有正在进行中的任务。该操作会为作业创建一组新任务,并有效地重置其完成状态。如果更新之前有任何任务正在运行,它们将被停止,并创建新的任务。

作业无法进行滚动升级或回滚。在作业模式下,无法使用任何配置更新或回滚设置的标志。

要以与之前运行作业时相同的参数再次运行作业,可以使用 --force 标志进行强制更新。

4、命令选项

名称

默认值

描述

--args

服务命令参数

--cap-add

API 1.41+

添加 Linux 权限

--cap-drop

API 1.41+

移除 Linux 权限

--config-add

API 1.41+

添加或更新服务的配置文件

--config-rm

API 1.41+

移除配置文件

--constraint-add

添加或更新放置约束

--constraint-rm

移除约束

--container-label-add

添加或更新容器标签

--container-label-rm

移除容器标签

--credential-spec

托管服务账户的凭证规范(仅适用于 Windows)

--detach, -d

立即退出而不等待服务完成

--dns-add

添加或更新自定义 DNS 服务器

--dns-option-add

添加或更新 DNS 选项

--dns-option-rm

移除 DNS 选项

--dns-rm

移除自定义 DNS 服务器

--dns-search-add

添加或更新自定义 DNS 搜索域

--dns-search-rm

移除 DNS 搜索域

--endpoint-mode

端点模式(vip 或 dnsrr)

--entrypoint

覆盖镜像的默认 ENTRYPOINT

--env-add

添加或更新环境变量

--env-rm

移除环境变量

--force

强制更新即使没有变更

--generic-resource-add

添加通用资源

--generic-resource-rm

移除通用资源

--group-add

向容器添加附加的补充用户组

--group-rm

从容器中移除先前添加的附加用户组

--health-cmd

用于检查健康状态的命令

--health-interval

运行检查的时间间隔(毫秒

--health-retries

连续失败次数报告为不健康

--health-start-period

容器启动后在计算不稳定的重试次数之前的启动周期(毫秒

--health-timeout

允许单个检查运行的最长时间(毫秒

--host-add

添加自定义主机到 IP 映射(主机:IP)

--host-rm

移除自定义主机到 IP 映射(主机:IP)

--hostname

容器主机名

--image

服务镜像标签

--init

在每个服务容器中使用 init 进程转发信号和回收进程

--isolation

服务容器的隔离模式

--label-add

添加或更新服务标签

--label-rm

移除标签通过其键

--limit-cpu

限制 CPU

--limit-memory

限制内存

--limit-pids

API 1.41+

限制进程的最大数量(默认为 0,表示无限制)

--log-driver

服务的日志驱动程序

--log-opt

日志驱动程序选项

--max-concurrent

API 1.41+

并行运行的作业任务数(默认等于 --replicas)

--mount-add

添加或更新服务上的挂载

--mount-rm

移除挂载通过其目标路径

--network-add

添加网络

--network-rm

移除网络

--no-healthcheck

禁用容器指定的任何健康检查

--no-resolve-image

不查询注册表以解析镜像摘要和支持的平台

--placement-pref-add

添加偏好放置

--placement-pref-rm

移除偏好放置

--publish-add

添加或更新发布的端口

--publish-rm

移除发布的端口通过其目标端口

--quiet, -q

禁止输出进度信息

--read-only

将容器的根文件系统挂载为只读

--replicas

任务数量

--replicas-max-per-node

API 1.40+

每个节点的最大任务数量(默认为 0,表示无限制)

--reserve-cpu

保留的 CPU

--reserve-memory

保留的内存

--restart-condition

满足条件时重新启动服务(none、on-failure、any)

--restart-delay

重新启动尝试之间的延迟时间(纳秒、微秒、毫秒、秒、分钟、小时)

--restart-max-attempts

在放弃之前的最大重新启动次数

--restart-window

用于评估重新启动策略的时间窗口(纳秒、微秒、毫秒、秒、分钟、小时)

--rollback

回滚到先前的规范

--rollback-delay

任务回滚之间的延迟时间(纳秒、微秒、毫秒、秒、分钟、小时)

--rollback-failure-action

回滚失败时的操作(暂停、继续)

--rollback-max-failure-ratio

回滚期间可容忍的失败率

--rollback-monitor

每个任务回滚后监视失败的持续时间(纳秒、微秒、毫秒、秒、分钟、小时)

--rollback-order

回滚顺序(先启动、先停止)

--rollback-parallelism

同时回滚的最大任务数(0 表示一次性回滚全部任务)

--secret-add

在服务上添加或更新密钥

--secret-rm

移除密钥

--stop-grace-period

强制停止容器前等待的时间(纳秒、微秒、毫秒、秒、分钟、小时)

--stop-signal

停止容器的信号

--sysctl-add

API 1.40+

添加或更新 Sysctl 选项

--sysctl-rm

API 1.40+

移除 Sysctl 选项

--tty, -t

API 1.40+

分配伪终端

--ulimit-add

API 1.41+

添加或更新 ulimit 选项

--ulimit-rm

API 1.41+

移除 ulimit 选项

--update-delay

更新之间的延迟时间(纳秒、微秒、毫秒、秒、分钟、小时)

--update-failure-action

更新失败时的操作(暂停、继续、回滚)

--update-max-failure-ratio

更新期间可容忍的失败率

--update-monitor

每个任务更新后监视失败的持续时间(纳秒、微秒、毫秒、秒、分钟、小时)

--update-order

更新顺序(先启动、先停止)

--update-parallelism

同时更新的最大任务数(0 表示一次性更新全部任务)

--user, -u

用户名或 UID(格式:

--with-registry-auth

将注册表身份验证详细信息发送给 Swarm 代理

--workdir, -w

容器内的工作目录

5、子命令

命令

描述

docker service create

创建新的服务

docker service inspect

显示一个或多个服务的详细信息

docker service logs

获取一个服务或任务的日志

docker service ls

列出服务

docker service ps

列出一个或多个服务的任务

docker service rm

删除一个或多个服务

docker service rollback

恢复服务配置的更改

docker service scale

缩放一个或多个复制的服务

docker service update

更新一个服务的配置

推荐文档

相关文档

大家感兴趣的内容

随机列表