文/Anoyi
► 前言介绍
Swarm 服务使用声明式模型,这意味着你定义了服务的期望状态,并依靠 Docker 来维护这个状态。该状态包括(但不限于)以下信息:
- 服务容器应该运行的 Image Name 和 Tag
- 有多少容器参与到这个服务
- 是否有任何端口暴露给 Swarm 集群外的 Client
- 当 Docker 启动时,服务是否自动启动
- 服务重启时发生的特定行为(例如是否使用平滑重启)
- 服务可以运行的节点的特性(如资源约束和布局偏好)
► 创建服务
要创建一个没有额外配置的单一副本服务,只需要提供映像名称即可。这里指定服务名为 my_web
。
docker service create --name my_web nginx
更多配置详见文末 《附录 1 创建服务时的可选参数》
查看服务
docker@ManagerX:~$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
e2tata1p7ufo my_web replicated 1/1 nginx:latest
► 更新服务
假定上述的 my_web
服务仍然存在,使用以下命令将其发布端口更新为 80。
docker service update --publish-add 8080:80 my_web
更多配置详见文末 《附录 2 修改服务的参数》
查看服务
docker@ManagerX:~$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
e2tata1p7ufo my_web replicated 1/1 nginx:latest *:8080->80/tcp
► 回滚服务
还原服务的配置
docker service rollback my_web
► 服务扩容与缩容
docker service scale my_web=3
► 移除服务
使用 docker service ls
可以获取 Service Id 和 Service Name,然后通过 Service Id 或 Service Name 移除服务。
docker service remove my_web
► 其他相关操作
1、列出服务的任务
docker service ps my_web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
sjvogfokaeqk my_web.1 nginx:latest WorkerA Running Running 10 minutes ago
vezxfvtdpsul \_ my_web.1 nginx:latest ManagerX Shutdown Shutdown 11 minutes ago
xi1xrzu9qrkt \_ my_web.1 nginx:latest ManagerX Shutdown Shutdown 2 hours ago
xr7pj6d19zq5 \_ my_web.1 nginx:latest WorkerB Shutdown Rejected 2 hours ago "No such image: nginx:latest"
xbwond9930py \_ my_web.1 nginx:latest ManagerX Shutdown Rejected 2 hours ago "No such image: nginx:latest"
2、显示服务的详细信息
docker service inspect my_web
► 附录 1 创建服务时的可选参数
简写 | 参数 | 参数类型 | 描述 | 默认值 |
---|---|---|---|---|
--config | config | 指定给服务的配置 | ||
--constraint | list | 约束条件 | ||
--container-label | list | 容器标签 | ||
--credential-spec | credential-spec | 托管服务帐户的凭证规范(限Windows) | ||
-d | --detach | 立即退出,而不是等待服务的收敛 | ||
--dns | list | 设置自定义的 DNS servers | ||
--dns-option | list | 设置 DNS 参数 | ||
--dns-search | list | 设置自定义的DNS搜索域 | ||
--endpoint-mode | string | 端点模式 (vip or dnsrr) | vip | |
--entrypoint | command | 覆盖镜像默认的 ENTRYPOINT | ||
-e | --env | list | 设置环境变量 | |
--env-file | list | 从文件中读取环境变量 | ||
--generic-resource | list | 用户定义的资源 | ||
--group | list | 为容器设置一个或多个不同的用户组 | ||
--health-cmd | string | 检查健康状况的命令行 | ||
--health-interval | duration | 健康检查的时间间隔 (ms/s/m/h) | ||
--health-retries | int | 报告不健康的连续失败次数 | ||
--health-start-period | duration | 在重新计数到不稳定之前,容器初始化的时间 (ms/s/m/h) | ||
--health-timeout | duration | 一次检查的最长允许时间 (ms/s/m/h) | ||
--host | list | 设置一个或多个 host-to-IP 映射 (host:ip) | ||
--hostname | string | 容器主机名 | ||
--isolation | string | 服务容器隔离模式 | ||
-l | --label | list | 服务标签 | |
--limit-cpu | decimal | CPUs 限制 | ||
--limit-memory | bytes | 内存限制 | ||
--log-driver | string | 服务的日志驱动 | ||
--log-opt | list | 日志驱动参数 | ||
--mode | string | 服务模式 (replicated or global) | replicated | |
--mount | mount | 将文件系统挂载到服务 | ||
--name | string | 服务名称 | ||
--network | network | 服务网络 | ||
--no-healthcheck | 禁用任何容器指定的健康检查 | |||
--no-resolve-image | 不要查询注册表来解决图像摘要和支持的平台 | |||
--placement-pref | pref | 添加偏好设置 | ||
-p | --publish | port | 发布一个端口作为节点端口 | |
-q | --quiet | 简化进度输出 | ||
--read-only | 将容器的根文件系统挂载为只读 | |||
--replicas | uint | 任务的数量(即容器副本数量) | 1 | |
--reserve-cpu | decimal | 保留 CPUs | ||
--reserve-memory | bytes | 保留内存 | ||
--restart-condition | string | 重启条件 ("none"、"on-failure"、"any") | any | |
--restart-delay | duration | 重启延时(ns/us/ms/s/m/h) | 5s | |
--restart-max-attempts | uint | 放弃之前的最大重启次数 | ||
--restart-window | duration | 用于评估重新启动策略的窗口(ns/us/ms/s/m/h) | ||
--rollback-delay | duration | 任务回滚延时(ns/us/ms/s/m/h) | 0s | |
--rollback-failure-action | string | 回滚失败的操作("pause"、"continue") | pause | |
--rollback-max-failure-ratio | float | 在回滚期间容忍的故障率 | 0 | |
--rollback-monitor | duration | 每个任务回滚之后的持续时间以监控失败 (ns/us/ms/s/m/h) | 5s | |
--rollback-order | string | 回滚顺序 ("start-first"/"stop-first") | stop-first | |
--rollback-parallelism | uint | 最大数量的任务同时回滚 (0 代表同时回滚所有) | 1 | |
--secret | secret | 指定给服务的安全机制 | ||
--stop-grace-period | duration | 结束一个容器之前等待的时间 (ns/us/ms/s/m/h) | 10s | |
--stop-signal | string | 停止容器的信号 | ||
-t | --tty | 分配一个 pseudo-TTY | ||
--update-delay | duration | 更新延迟时间 (ns/us/ms/s/m/h) | 0s | |
--update-failure-action | string | 更新失败的动作("pause"、"continue"、"rollback") | pause | |
--update-max-failure-ratio | float | 在更新期间容忍的失败率 | 0 | |
--update-monitor | duration | 每个任务更新后的持续时间以监控失败(ns/us/ms/s/m/h) | 5s | |
--update-order | string | 更新顺序 ("start-first"、"stop-first") | stop-first | |
--update-parallelism | uint | 最大数量的任务同时更新(0 代表同时更新所有) | 1 | |
-u | --user | string | Username 或 UID (format: <name/uid>[:<group/gid>]) | |
--with-registry-auth | 发送认证信息给 Swarm 代理 | |||
-w | --workdir | string | 容器内的工作目录 |
► 附录 2 修改服务的参数
使用如下命令查看,参数属性与附录 1 一致:
docker service update --help