Docker Swarm 入门:Service 部署

96
Anoyi
0.2 2018.01.11 13:17* 字数 417

文/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
Docker
Web note ad 1