Swarm
- 14.1 Swarm简介
- 14.2 Swarm vs K8s
- 14.3 基本概念
- 1. Swarm集群
- 2.节点
- 3.服务
- 4.任务
- 5.服务的外部访问
- 14.4 使用Swarm
- 1.创建集群(init)
- 2.查看集群信息(info)
- 3.加入集群(join)
- 4.使用集群服务(service)
- 1. 创建服务(service create)
- 2. 查看服务(service ls)
- 3. 扩缩服务(service scale)
- 4. 使用外部服务地址(--publish)
- 5. 更新集群(update)
- 6. 离开集群(leave)
- 14.5 使用服务命令
- 1. create
- 2. inspect
- 3. logs
- 4. Is
- 5. ps
- 6. rm
- 7. rollback
- 8. scale
- 9. update
14.1 Swarm简介
Docker Swarm是Docker公司推出的官方容器集群平台,基于Go语言实现,代码开源在https:// github.com/ docker/swarm
。目前,包括Rackspace等平台都采用了Swarm,用户也很容易在AWS等公有云平台使用Swarm。
Swarm的前身是Beam项目和libswarm项目,首个正式版本(SwarmVl)在2014年12月初发布。为了提高可扩展性,2016年2月对架构进行重新设计,推出了V2版本,支持超过lK个节点。最新的Docker Engine (1.12 后)已经集成了SwarmKit内嵌了对Swarm模式的支持。
作为容器集群管理器,Swarm最大的优势之一就是原生支持DockerAPI,给用户使用带来极大的便利。各种基于标准API的工具比如Compose、DockerSDK、各种管理软件,甚至Docker本身等都可以很容易的与Swarm进行集成。这大大方便了用户将原先基于单节点的系统移植到Swarm上。同时Swarm内置了对Docker网络插件的支持,用户可以很容易地部署跨主机的容器集群服务。
Swarm也采用了典型的“主从”结构(如图所示),通过Raft协议来在多个管理节点(Manager)中实现共识。工作节点(Worker)上运行agent接受管理节点的统一管理和任务分配。用户提交服务请求只需要发给管理节点即可,管理节点会按照调度策略在集群中分配节点来运行服务相关的任务。在SwarmV2中,集群中会自动通过Raft协议(Raft协议详解)分布式选举出Manager节点,无须额外的发现服务支持,避免了单点瓶颈。同时,V2中内置了基于DNS的负载均衡和对外部负载均衡机制的集成支持。
14.2 Swarm vs K8s
K8S与swarm都是架构在docker之上,都是对集群化的容器服务进行部署、运维的工具。本质都是容器编排服务。
swarm本身就是内嵌在docker引擎之中的,与docker引擎融为一体,k8s自身大部分功能也是以容器的方式部署,来完成容器编排的任务 。
swarm与k8s(kubernetes简称)的比较,一点像MySQL和SQL Server的比较。
前者轻量级、实施快、以实现核心功能为重,比较适合小规模部署,后者则是企业级、功能全、支撑场景多,适合做企业级大规模docker云方案。
[云原生专题-22]:K8S - 集群编排工具K8S与SWARM比较与技术选择
14.3 基本概念
Swarm在Docker基础上扩展了支持多节点的能力,同时兼容了大部分的Docker操作。Swarm中以集群为单位进行管理,支持服务层面的操作。下面首先介绍Swarm使用中的一些基本概念。
1. Swarm集群
Swarm集群(Cluster)为一组被统一管理起来的Docker主机。集群是Swarm所管理的对象。这些主机通过Docker引擎的Swarm模式相互沟通,其中部分主机可能作为管理节点(manager)响应外部的管理请求,其他主机作为工作节点(worker)来实际运行Docker容器。当然,同一个主机也可以即作为管理节点,同时作为工作节点。
当用户使用Swarm集群时,首先定义一个服务(指定状态、复制个数、网络、存储、暴露端口等),然后通过管理节点发出启动服务的指令,管理节点随后会按照指定的服务规则进行调度,在集群中启动起来整个服务,并确保它正常运行。
2.节点
节点(Node)是Swarm集群的最小资源单位。每个节点实际上都是一台Docker主机。Swarm集群中节点分为两种:
- 管理节点(manager node):负责响应外部对集群的操作请求,并维持集群中资源,分发任务给工作节点。同时,多个管理节点之间通过Raft协议构成共识。一般推荐每个集群设置5个或7个管理节点;
- 工作节点(worker node):负责执行管理节点安排的具体任务。默认情况下,管理节点自身也同时是工作节点。每个工作节点上运行代理(agent)来汇报任务完成情况
用户可以通过docker node promote
命令来提升一个工作节点为管理节点;或者通过docker node demote
命令来将一个管理节点降级为工作节点。
3.服务
服务(Service)是Docker支持复杂多容器协作场景的利器。
一个服务可以由若干个任务组成,每个任务为某个具体的应用。服务还包括对应的存储、网络、端口映射、副本个数、访问配置、升级配置等附加参数。
一般来说,服务需要面向特定的场景,例如一个典型的Web服务可能包括前端应用、后端应用,以及数据库等。这些应用都属于该服务的管理范畴。
Swarm集群中服务类型也分为两种(可以通过-mode
指定):
- 复制服务(replicated services)模式:默认模式,每个任务在集群中会存在若干副本,这些副本会被管理节点按照调度策略分发到集群中的工作节点上。此模式下可以使用
-replicas
参数设置副本数量; - 全局服务(global services)模式:调度器将在每个可用节点都执行一个相同的任务。该模式适合运行节点的检查,如监控应用等。
4.任务
任务是Swarm集群中最小的调度单位,即一个指定的应用容器。例如仅仅运行前端业务的前端容器。
任务从生命周期上讲可能处于创建(NEW)、等待(PENDING)、分配(ASSIGNED)、接受(ACCEPTED)、准备(PREPARING)、开始(STARTING) 、运行(RUNNING)、完成(COMPLETE)、失败(FAILED) 、关闭(SHUTDOWN)、拒绝(REJECTED)、孤立(ORPHANED)等不同状态。
Swarm集群中的管理节点会按照调度要求将任务分配到工作节点上。例如指定副本为2时,可能会被分配到两个不同的工作节点上。一旦当某个任务被分配到一个工作节点,将无法被转移到另外的工作节点,即Swarm中的任务不支持迁移。
5.服务的外部访问
Swarm集群中的服务要被集群外部访问,必须要能允许任务的响应端口映射出来。Swarm中支持入口负载均衡(ingress load balancing)的映射模式。该模式下,每个服务都会被分配一个公开端口(Published Port),该端口在集群中任意节点上都可以访问到,并被保留给该服务。
当有请求发送到任意节点的公开端口时,该节点若并没有实际执行服务相关的容器,则会通过路由机制将请求转发给实际执行了服务容器的工作节点。
14.4 使用Swarm
用户在安装Docker1.12或更新的版本后,即可直接尝试Swarm模式的相关功能。假定分别准备两个Linux主机,作为管理节点(实际上也同时具备工作节点功能)和工作节点。下面来演示Swarm集群的主要操作,包括:
- swarm init:在管理节点上创建一个集群;
- node list :列出集群中的节点信息;
- swarm join:加入一个新的节点到已有集群中;
- swarm update :更新一个Swarm集群;
- swarm leave:离开一个Swarm集群。
由于swarm内嵌在docker engine上,所以使用以上命令,都需要加上docker,例如:
[root@dbc-server-554 spark_cluster]# docker node list
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
o3u3ytdc5uj73vn4s8959zpml * dbc-server-554 Ready Active Leader 20.10.23
6699n51mjfxvve7hspvyvg4ms swarm-worker Ready Active 20.10.23
此外,还可以使用docker service
命令部署Docker应用服务到集群中;
1.创建集群(init)
在管理节点上执行swarm init
命令来创建一个新的Swarm集群,创建成果后会自动提示如何加入更多节点到集群中。
[root@dbc-server-554 spark_cluster]# docker swarm init
Swarm initialized: current node (o3u3ytdc5uj73vn4s8959zpml) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1bys7vz7rv3q3ul1d7pavfvgcriykkodqo8n7py1ngesimw4if-28u3eceh8aphudtvuqyo8hv30 192.168.5.54:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
注意返回的token串,这是集群的唯一id加入集群的各个节点将需要这个信息。
另外,默认的管理服务端口为2377,需要能被工作节点访问到;另外,为了支持集群的成员发现和外部服务映射,还需要再所有节点上开启7946 TCP/UDP
端口和4789 UDP
端口。
swarm init
命令格式:
SYNOPSIS
docker swarm init [OPTIONS]
DESCRIPTION
Initialize a swarm
OPTIONS
--advertise-addr="" Advertised address (format: [:port])#指定服务监昕的地址和端口;
--autolock[=false] Enable manager autolocking (requiring an unlock key to start a stopped manager)#自动锁定管理服务的启停操作,对服务进行启动或停止都需要通过口令来解锁;
--availability="active" Availability of the node ("active"|"pause"|"drain")#节点的可用性,包括active、pause、drain(耗尽)三种,默认为active;
--cert-expiry=2160h0m0s Validity period for node certificates (ns|us|ms|s|m|h)#根证书的过期时长,默认为90天;
--data-path-addr="" Address or interface to use for data path traffic (format: )#指定数据流量使用的网络接口或地址;
--data-path-port=0 Port number to use for data path traffic (1024 - 49151). If no value is set or is set to 0, the default port (4789) is used.
--default-addr-pool=[] default address pool in CIDR format
--default-addr-pool-mask-length=24 default address pool subnet mask length
--dispatcher-heartbeat=5s Dispatcher heartbeat period (ns|us|ms|s|m|h)#分配组件的心跳时长,默认为5秒;
--external-ca= Specifications of one or more certificate signing endpoints#指定使用外部的证书签名服务地址;
--force-new-cluster[=false] Force create a new cluster from current state#强制创建新集群;
-h, --help[=false] help for init
--listen-addr=0.0.0.0:2377 Listen address (format: [:port])
--max-snapshots=0 Number of additional Raft snapshots to retain#Raft协议快照保留的个数;
--snapshot-interval=10000 Number of log entries between Raft snapshots#Raft协议进行快照的间隔(单位为事务个数),默认为10000个事物;
--task-history-limit=5 Task history retention limit#任务历史的保留个数,默认为5。
2.查看集群信息(info)
此时通过docker info
命令可以查看到集群的信息:
[root@dbc-server-554 spark_cluster]# docker info
...
Swarm: active
NodeID: o3u3ytdc5uj73vn4s8959zpml
Is Manager: true
ClusterID: sx8krvrz34xyed3pp9fjxrpqz
Managers: 1
Nodes: 2
Default Address Pool: 10.0.0.0/8
SubnetSize: 24
Data Path Port: 4789
Orchestration:
Task History Retention Limit: 5
...
3.加入集群(join)
在所有要加入集群的普通节点上面执行swarm join
命令,表示把这台机器加入指定集群当中。例如,在工作节点上,将其加入刚创建的集群,则可以通过:
[root@localhost ~]# docker swarm join --token SWMTKN-1-1bys7vz7rv3q3ul1d7pavfvgcriykkodqo8n7py1ngesimw4if-28u3eceh8aphudtvuqyo8hv30 192.168.5.54:2377
This node joined a swarm as a worker.
此时,在管理节点上再次查看集群中节点情况,可以看到新加入的工作节点:
[root@dbc-server-554 spark_cluster]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
o3u3ytdc5uj73vn4s8959zpml * dbc-server-554 Ready Active Leader 20.10.23
6699n51mjfxvve7hspvyvg4ms swarm-worker Ready Active 20.10.23
4.使用集群服务(service)
那么,怎么使用Swarm提供的服务呢?实际上有两种方法:
一种是使用Docker原来的客户端命令,只要指定使用Swarm manager
服务的监昕地址即可。例如,manager服务监听的地址为<manager ip>:2377
,则可以通过指定-H <manager ip>:2377
选项来继续使用Docker客户端,执行任意Docker命令,例如ps、info、run等。
另外一种方法,也是推荐的做法,是使用新的docker service
命令(下文会有详细介绍),可以获得包括多主机网络等更高级的特性支持。
1. 创建服务(service create)
可以在管理节点上执行如下命令来快速创建一个应用服务,并制定服务的复制份数为2。如下命令所示,默认会自动检查确认服务状态都正常:
[root@dbc-server-554 spark_cluster]# docker service create --replicas 2 --name ping_app debian:jessie ping docker.com
md3dcldy8ztwszgf23s5c0gur
overall progress: 2 out of 2 tasks
1/2: running [==================================================>]
2/2: running [==================================================>]
verify: Service converged
2. 查看服务(service ls)
此时使用service ls
查看集群中服务情况,会发现新创建的ping_app服务;还可通过service inspect
命令来查看服务的具体
[root@dbc-server-554 spark_cluster]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
md3dcldy8ztw ping_app replicated 2/2 debian:jessie
[root@dbc-server-554 spark_cluster]# docker service inspect --pretty ping_app
ID: md3dcldy8ztwszgf23s5c0gur
Name: ping_app
Service Mode: Replicated
Replicas: 2
Placement:
UpdateConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Update order: stop-first
RollbackConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Rollback order: stop-first
ContainerSpec:
Image: debian:jessie@sha256:32ad5050caffb2c7e969dac873bce2c370015c2256ff984b70c1c08b3a2816a0
Args: ping docker.com
Init: false
Resources:
Endpoint Mode: vip
同时,管理节点和工作节点上都运行了一个容器,镜像为debian:jessie,命令为ping docker.com
:
[root@dbc-server-554 spark_cluster]# docker service ps ping_app
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
rzswwpln3ar6 ping_app.1 debian:jessie swarm-worker Running Running 3 minutes ago
matrp9busk6w ping_app.2 debian:jessie dbc-server-554 Running Running about a minute ago
3. 扩缩服务(service scale)
用户还可以通过docker service scale <SERVICE-ID>=<NUMBER-OF-TASKS>
命令来对服务进行伸缩,例如将服务复制个数从2改为1
[root@dbc-server-554 spark_cluster]# docker service scale ping_app=1
ping_app scaled to 1
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
[root@dbc-server-554 spark_cluster]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
md3dcldy8ztw ping_app replicated 2/1 debian:jessie
[root@dbc-server-554 spark_cluster]# docker service ps ping_app
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
rzswwpln3ar6 ping_app.1 debian:jessie swarm-worker Running Running 4 minutes ago
[root@dbc-server-554 spark_cluster]# docker service logs ping_app
ping_app.1.rzswwpln3ar6@swarm-worker | PING docker.com (141.193.213.20) 56(84) bytes of data.
ping_app.1.rzswwpln3ar6@swarm-worker | 64 bytes from 141.193.213.20: icmp_seq=1 ttl=52 time=162 ms
...
服务使用完成后可以通过docker service rm <SERVICE-ID>
命令来进行删除。服务命令更多的参数可以通过docker service help
进行查看。
4. 使用外部服务地址(–publish)
Swarm通过路由机制支持服务对外映射到指定端口,该端口可以在集群中任意节点上进行访问,即使该节点上没有运行服务实例。需要在创建服务时使用--publish
参数:
docker service create \
--name <service name> \
--publish published=<pubport>,target=<container port> \
< IMAGE>
[root@dbc-server-554 spark_cluster]# docker service create --name mynginx --publish published=80,target=80 nginx:latest
v1cc2zrd054l86nfk5zhf106c
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
[root@dbc-server-554 spark_cluster]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
v1cc2zrd054l mynginx replicated 1/1 nginx:latest *:80->80/tcp
在其他节点访问80端口:
[root@localhost ~]# curl 192.168.5.54:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
...
用户访问集群中任意节点的,都会被Swarm的负载均衡器代理到对应的服务实例。用户也可以配置独立的负载均衡服务,后端指向集群中各个节点对应的外部端口,获取高可用特性。
5. 更新集群(update)
用户可以使用swarm update
命令来更新一个集群,主要包括如下配置信息:
SYNOPSIS
docker swarm update [OPTIONS]
DESCRIPTION
Update the swarm
OPTIONS
--autolock[=false] Change manager autolocking setting (true|false)#启动或关闭自动锁定;
--cert-expiry=2160h0m0s Validity period for node certificates (ns|us|ms|s|m|h)#根证书的过期时长,默认为90天;
--dispatcher-heartbeat=5s Dispatcher heartbeat period (ns|us|ms|s|m|h)#分配组件的心跳时长,默认为5秒
--external-ca= Specifications of one or more certificate signing endpoints#指定使用外部的证书签名服务地址;
-h, --help[=false] help for update
--max-snapshots=0 Number of additional Raft snapshots to retain#Ra玩协议快照保留的个数;
--snapshot-interval=10000 Number of log entries between Raft snapshots#Raft协议进行快照的间隔(单位为事务个数),默认为10000个事物;
--task-history-limit=5 Task history retention limit#任务历史的保留个数,默认为5
6. 离开集群(leave)
节点可以在任何时候通过swarm leave
命令离开一个集群。命令格式为
docker swarm leave [OPTIONS]
支持-f, --force 意味着强制离开集群。
14.5 使用服务命令
Swarm提供了对应用服务的良好的支持,使用Swarm集群可以充分满足应用服务可扩展、高可用的需求。Docker通过service命令来管理应用服务,主要包括create、inspect、logs、ls、ps、rm、rollback、scale、update等若干子命令
命令 | 说明 |
---|---|
create | 创建应用 |
rm | 删除服务 |
inspect | 查看应用的详细信息 |
rollback | 回滚服务 |
logs | 获取服务或任务的日志信息 |
scale | 对服务进行横向扩展调整 |
ls | 列出服务的信息 |
update | 更新服务 |
ps | 列出服务中包括的任务信息 |
1. create
顾名思义,负责创建一个应用
SYNOPSIS
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS
--config= Specify configurations to expose to the service#指定暴露给服务的配置;
--constraint= Placement constraints#应用实例在集群中被放置时的位置限制;
-d, --detach[=false] Exit immediately instead of waiting for the service to converge#不等待创建后对应用进行状态探测即返回;
--dns= Set custom DNS servers#自定义使用的DNS服务器地址;
--endpoint-mode="vip" Endpoint mode (vip or dnsrr)#指定外部访问的模式,包括vip(虚地址自动负载均衡)或dnsrr(DNS轮询)
--entrypoint= Overwrite the default ENTRYPOINT of the image
-e, --env= Set environment variables#环境变量列表
--env-file= Read in a file of environment variables
--generic-resource= User defined resources
--group= Set one or more supplementary user groups for the container
--health-cmd="" Command to run to check health#进行健康检查的指令
--health-interval= Time between running the check (ms|s|m|h)
-l, --label= Service labels#执行服务的标签;
--limit-cpu= Limit CPUs
--limit-memory=0 Limit Memory
--limit-pids=0 Limit maximum number of processes (default 0 = unlimited)
--log-driver="" Logging driver for service
--log-opt= Logging driver options
--max-concurrent= Number of job tasks to run concurrently (default equal to --replicas)
--mode="replicated" Service mode (replicated, global, replicated-job, or global-job)#服务模式,包括replicated(默认)或global;
--mount= Attach a filesystem mount to the service
--name="" Service name
--network= Network attachments
--replicas= Number of tasks#指定实例的复制份数;
--secret= Specify secrets to expose to the service#向服务暴露的秘密数据;
-u, --user="" Username or UID (format: [:])#指定用户信息,UID:[GID]
-w, --workdir="" Working directory inside the container#指定容器中的工作目录位置。
2. inspect
查看应用的详细信息
SYNOPSIS
docker service inspect [OPTIONS] SERVICE [SERVICE...]
OPTIONS
-f, --format="" Format the output using the given Go template#使用Go模板指定格式化输出;
--pretty[=false] Print the information in a human friendly format#以适合阅读的格式输出。
3. logs
获取某个服务或任务的日志信息
SYNOPSIS
docker service logs [OPTIONS] SERVICE|TASK
OPTIONS
--details[=false] Show extra details provided to logs#输出所有的细节日志信息;
-f, --follow[=false] Follow log output#持续跟随输出
-h, --help[=false] help for logs
--no-resolve[=false] Do not map IDs to Names in output#在输出中不将对象的ID映射为名称;
--no-task-ids[=false] Do not include task IDs in output#输出中不包括任务的ID信息;
--no-trunc[=false] Do not truncate output#不截断输出信息;
--raw[=false] Do not neatly format logs#输出原始格式信息;
--since="" Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)#输出自指定时间开始的日志,如2018-01-02T03:04:56或42m
-n, --tail="all" Number of lines to show from the end of the logs#只输出给定行数的最新日志信息;
-t, --timestamps[=false] Show timestamps#打印日志的时间戳。
4. Is
列出服务的信息
SYNOPSIS
docker service ls [OPTIONS]
DESCRIPTION
List services
OPTIONS
-f, --filter= Filter output based on conditions provided#只输出符合过滤条件的服务;
--format="" Pretty-print services using a Go template#按照Go模板格式化输出;
-h, --help[=false] help for ls
-q, --quiet[=false] Only display IDs#只输出服务的ID信息。
5. ps
列出服务中包括的任务信息
SYNOPSIS
docker service ps [OPTIONS] SERVICE [SERVICE...]
OPTIONS
-f, --filter= Filter output based on conditions provided
--format="" Pretty-print tasks using a Go template
-h, --help[=false] help for ps
--no-resolve[=false] Do not map IDs to Names
--no-trunc[=false] Do not truncate output
-q, --quiet[=false] Only display task IDs
6. rm
删除指定的若干服务
SYNOPSIS
docker service rm SERVICE [SERVICE...]
7. rollback
回滚服务的配置
SYNOPSIS
docker service rollback [OPTIONS] SERVICE
OPTIONS
-d, --detach[=false] Exit immediately instead of waiting for the service to converge#执行后返回,不等待服务状态校验完整;
-h, --help[=false] help for rollback
-q, --quiet[=false] Suppress progress output#不显示执行进度信息
8. scale
对服务进行横向扩展调整
SYNOPSIS
docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
OPTIONS
-d, --detach[=false] Exit immediately instead of waiting for the service to converge
9. update
更新一个服务
SYNOPSIS
docker service update [OPTIONS] SERVICE
OPTIONS
--args= Service command args#服务的命令参数;
--cap-add= Add Linux capabilities
--cap-drop= Drop Linux capabilities
--config-add= Add or update a config file on a service#增加或更新一个服务的配置信息;
--config-rm= Remove a configuration file#删除一个配置文件;
--constraint-add= Add or update a placement constraint#增加或更新放置的限制条件;
--constraint-rm= Remove a constraint#删除一个限制条件;
--container-label-add= Add or update a container label
--container-label-rm= Remove a container label by its key
--credential-spec= Credential spec for managed service account (Windows only)
-d, --detach[=false] Exit immediately instead of waiting for the service to converge#执行后返回,不等待服务状态校验完整;
--dns-add= Add or update a custom DNS server#增加或更新DNS服务信息;
--dns-option-add= Add or update a DNS option
--dns-option-rm= Remove a DNS option
--dns-rm= Remove a custom DNS server#删除DNS服务信息;
--dns-search-add= Add or update a custom DNS search domain
--dns-search-rm= Remove a DNS search domain
--endpoint-mode="" Endpoint mode (vip or dnsrr)#指定外部访问的模式,包括vip(虚地址自动负载均衡)或dnsrr(DNS轮询);
--entrypoint= Overwrite the default ENTRYPOINT of the image#指定默认的入口命令;
--env-add= Add or update an environment variable#添加或更新一组环境变量;
--env-rm= Remove an environment variable#删除环境变量;
--force[=false] Force update even if no changes require it
--generic-resource-add= Add a Generic resource
--generic-resource-rm= Remove a Generic resource
--group-add= Add an additional supplementary user group to the container
--group-rm= Remove a previously added supplementary user group from the container
--health-cmd="" Command to run to check health#进行健康检查的指令;
--health-interval= Time between running the check (ms|s|m|h)
--health-retries=0 Consecutive failures needed to report unhealthy
--health-start-period= Start period for the container to initialize before counting retries towards unstable (ms|s|m|h)
--health-timeout= Maximum time to allow one check to run (ms|s|m|h)
-h, --help[=false] help for update
--host-add= Add a custom host-to-IP mapping (host:ip)
--host-rm= Remove a custom host-to-IP mapping (host:ip)
--hostname="" Container hostname
--image="" Service image tag
--init[=false] Use an init inside each service container to forward signals and reap processes
--isolation="" Service container isolation mode
--label-add= Add or update a service label#添加或更新一组标签信息;
--label-rm= Remove a label by its key#删除一组标签信息;
--limit-cpu= Limit CPUs
--limit-memory=0 Limit Memory
--limit-pids=0 Limit maximum number of processes (default 0 = unlimited)
--log-driver="" Logging driver for service
--log-opt= Logging driver options
--max-concurrent= Number of job tasks to run concurrently (default equal to --replicas)
--mount-add= Add or update a mount on a service
--mount-rm= Remove a mount by its target path
--network-add= Add a network
--network-rm= Remove a network
--no-healthcheck[=false] Disable any container-specified HEALTHCHECK#不进行健康检查;
--no-resolve-image[=false] Do not query the registry to resolve image digest and supported platforms
--placement-pref-add= Add a placement preference
--placement-pref-rm= Remove a placement preference
--publish-add= Add or update a published port#添加或更新外部端口信息;
--publish-rm= Remove a published port by its target port#删除端口信息;
-q, --quiet[=false] Suppress progress output#不显示进度信息;
--read-only[=false] Mount the container's root filesystem as read only#指定容器的文件系统为只读;
--replicas= Number of tasks#指定服务实例的复制份数;
--replicas-max-per-node=0 Maximum number of tasks per node (default 0 = unlimited)
--reserve-cpu= Reserve CPUs
--reserve-memory=0 Reserve Memory
--restart-condition="" Restart when condition is met ("none"|"on-failure"|"any")
--restart-delay= Delay between restart attempts (ns|us|ms|s|m|h)
--restart-max-attempts= Maximum number of restarts before giving up
--restart-window= Window used to evaluate the restart policy (ns|us|ms|s|m|h)
--rollback[=false] Rollback to previous specification#回滚到上次配置;
--rollback-delay=0s Delay between task rollbacks (ns|us|ms|s|m|h)
--rollback-failure-action="" Action on rollback failure ("pause"|"continue")
--rollback-max-failure-ratio=0 Failure rate to tolerate during a rollback
--rollback-monitor=0s Duration after each task rollback to monitor for failure (ns|us|ms|s|m|h)
--rollback-order="" Rollback order ("start-first"|"stop-first")
--rollback-parallelism=0 Maximum number of tasks rolled back simultaneously (0 to roll back all at once)
--secret-add= Add or update a secret on a service#添加或更新服务上的秘密数据;
--secret-rm= Remove a secret#删除服务上的秘密数据;
--stop-grace-period= Time to wait before force killing a container (ns|us|ms|s|m|h)
--stop-signal="" Signal to stop the container
--sysctl-add= Add or update a Sysctl option
--sysctl-rm= Remove a Sysctl option
-t, --tty[=false] Allocate a pseudo-TTY
--ulimit-add=[] Add or update a ulimit option
--ulimit-rm= Remove a ulimit option
--update-delay=0s Delay between updates (ns|us|ms|s|m|h)
--update-failure-action="" Action on update failure ("pause"|"continue"|"rollback")
--update-max-failure-ratio=0 Failure rate to tolerate during an update
--update-monitor=0s Duration after each task update to monitor for failure (ns|us|ms|s|m|h)
--update-order="" Update order ("start-first"|"stop-first")
--update-parallelism=0 Maximum number of tasks updated simultaneously (0 to update all at once)#更新执行的并发数;
-u, --user="" Username or UID (format: [:])#指定用户信息,UID:[GID];
--with-registry-auth[=false] Send registry authentication details to swarm agents
-w, --workdir="" Working directory inside the container#指定容器中的工作目录位置。