docker swarm init --advertise-addr 通告地址 --availability 节点可用性 --default-addr-pool 默认地址池 --listen-addr 监听地址 --task-history-limit 任务历史记录保存数 --autolock
参数说明:
--advertise-addr
: 通告地址,指定其他节点加入此 Swarm 集群时连接的管理节点地址,不配置时使用当前主机的 ip,若主机存在多个 ip,则必须配置--availability
: 节点可用性,指定当前节点的可用性,即当前节点是否允许调度任务,默认为 active
active
: 可用,可将新任务分配至此节点pause
: 暂停,不可将新任务分配至此节点,但现有任务不变drain
: 不可用,不可将新任务分配至此节点,同时将此现有的任务转移至其他节点--default-addr-pool
: 指定地址池,即分配给服务的 ip地址,默认为 10.0.0.0/8--listen-addr
: 监听地址,即 Swarm 集群管理节点的监听地址,默认为 0.0.0.0:2377--task-history-limit
: 任务历史记录保存限制,即保存多少份任务的历史记录,默认为 5--autolock
: 启用集群的自动锁定功能示例:
docker swarm init --advertise-addr 192.168.1.100 --availability drain --task-history-limit 10
docker swarm join-token manager
docker swarm join-token worker
docker swarm join-token --quiet manager
docker swarm join-token --quiet worker
docker swarm join-token --rotate
docker swarm join-token --rotate manager
docker swarm join-token --rotate worker
docker swarm update --task-history-limit 任务历史记录保存数 --autolock true/false
参数说明:
--task-history-limit
: 任务历史记录保存限制,即保存多少份任务的历史记录,默认为 5--autolock
: 是否启用集群的自动锁定功能(可选 true、false)示例:
docker swarm update --autolock=true
docker swarm update --autolock=false
docker swarm unlock-key
docker swarm unlock-key --rotate
docker swarm unlock
docker node ls
docker node inspect --pretty 节点ID或HOSTNAME
参数说明:
--pretty
: 格式化输出,默认以 JSON 格式输出,添加此参数后以可读形式格式化输出示例(查看 manager1 节点的详细信息):
docker node inspect --pretty manager1
docker swarm join --token 令牌 管理节点IP:2377
说明:
docker swarm join-token manager
直接获取新增管理节点的命令docker swarm join-token worker
直接获取新增工作节点的命令示例(将主机添加至以 192.168.1.100 为管理节点的 Swarm 集群):
docker swarm join --token SWMTKN-1-26phxwpgfmj0k6formcikx9wg9b9yzyw1gqyjyksbpqy0jb3o5-083rakqb5la00btvp5l50d7hg 192.168.1.100:2377
docker node promote 需要升级的节点ID或HOSTNAME(多个节点以空格分割)
示例(将 work1 节点升级为管理节点):
docker node promote work1
docker node update --role manager 节点ID或HOSTNAME
示例(将 work1 节点升级为管理节点):
docker node update --role manager work1
docker node demote 需要升级的节点ID或HOSTNAME(多个节点以空格分割)
示例(将 manager2 节点降级为工作节点):
docker node demote manager2
docker node update --role worker 节点ID或HOSTNAME
示例(将 manager2 节点降级为工作节点):
docker node update --role worker manager2
docker node update --availability 可用性 节点ID或HOSTNAME
参数说明:
--availability
: 节点可用性
active
: 可用,可将新任务分配至此节点pause
: 暂停,不可将新任务分配至此节点,但现有任务不变drain
: 不可用,不可将新任务分配至此节点,同时将此现有的任务转移至其他节点示例:
docker node update --availability active work1
docker node update --availability active work2
docker node update --availability drain manager1
docker node update --label-add key=value 节点ID或HOSTNAME
示例(将 env=demo 标签添加至 manager1 节点):
docker node update --label-add env=demo manager1
docker node update --label-rm key=value 节点ID或HOSTNAME
示例(从 manager1 节点移除标签 env=demo ):
docker node update --label-rm env=demo manager1
第一步: 将节点离开集群(在需要删除的节点中执行)
docker swarm leave -f
参数说明:
-f
: 强制离开,若此节点为唯一的管理节点,则集群将不可用第二步: 在集群中删除节点(在集群的管理节点中执行)
docker node rm 节点ID或HOSTNAME
示例(将 work2 节点移出集群):
docker node rm work2
docker service ls
docker service inspect --pretty 服务名称
参数说明:
--pretty
: 格式化输出,默认以 JSON 格式输出,添加此参数后以可读形式格式化输出示例(查看 nginx 服务的详细信息):
docker service inspect --pretty nginx
docker service logs -f -n 输出行数 -t 服务名称
参数说明:
-f
: 持续输出后续日志-n
: 指定已有日志的输出行数(仅显示最后多少行的日志)-t
: 显示时间戳docker service logs -f -n 100 -t nginx
docker service create \
--name 服务名称 --replicas 副本数 \
--env 环境变量 \
--workdir 工作目录 --user 用户 --mode 模式 \
--mount type=类型,src=卷名称或主机目录,dst=容器目录,readonly \
--config source=config名称,target=容器内文件,mode=模式(权限) \
--secret source=secret名称,target=容器内文件,mode=模式(权限) \
--update-delay 更新延时时间 --update-parallelism 同时更新任务数 --update-failure-action 更新失败时的处理方式 \
--network 网络名称 \
--publish published=服务端口,target=容器端口,protocol=端口协议,mode=模式 \
--reserve-cpu 预留的CPU核数 --reserve-memory 预留的内存容量 \
--constraint 约束条件 \
--placement-pref '首选项' \
镜像名称:镜像TAG \
运行的命令
参数说明:
--name
: 指定服务的名称,不指定时随机生成--replicas
: 指定服务的副本数,不指定时默认为 1--env
: 指定服务容器内部的环境变量,格式为 key=value--workdir
: 之前服务容器内部的工作目录--user
: 指定服务容器使用的用户--mode
: 服务模式(可选 replicated、global,不配置时默认为 replicated )
replicated
:复制global
:全局(每个节点都将运行此服务的一个副本(任务),当有新的节点加入集群时,会自动在新节点中部署一个副本(任务))--mount
: 指定服务容器的挂载目录
type
: 类型(可选 volume、bind,默认为 volume)
volume
: 存储卷bind
: 主机目录src
: 卷名称或主机目录dst
: 容器目录readonly
: 标记为只读挂载,不加此项是默认为读写挂载--config
: 指定需要挂载至容器内部的 config
source
: 指定 config 的名称target
: 指定 config 挂载至容器内部的文件,即 config 要挂载至容器内部的哪个文件mode
: 指定容器内部文件的权限--secret
: 指定需要挂载至容器内部的 secret
source
: 指定 secret 的名称target
: 指定 secret 挂载至容器内部的文件,即 secret 要挂载至容器内部的哪个文件mode
: 指定容器内部文件的权限--update-delay
: 指定服务的更新延时时间,h 表示小时、m 表示分支、s 表示秒--update-parallelism
: 指定同时更新的任务数量,不配置时默认为 1,即同时仅更新 1 个任务--update-failure-action
: 指定更新失败时的处理方式(可选 pause、continue、rollback,不配置是默认为 pause)
pause
: 停止,更新失败时停止更新,已更新成功的副本不会修改continue
: 继续,更新失败时继续更新其他副本rollback
: 回退,更新失败时回退副本--network
: 指定此服务使用的 Docker Network,需要此 network 已经存在,且 network 的 driver 需要为 overlay(在 docker network create 时指定 -d overlay)--publish
: 指定需要暴露给集群外部的端口
published
为服务端口target
为容器端口protocol
为端口协议(可选 tcp、udp,不配置时默认为 tcp )mode
为端口模式(可选 ingress、host,不配置时默认为 ingress)
ingress
: 使用路由网格,通过 Swarm 集群的路由网格代理暴露服务host
:主机模式,直接使用主机的端口暴露服务--reserve-cpu
: 指定服务需要预留的 CPU 核数--reserve-memory
: 指定服务需要预留的内存容量--constraint
: 指定服务的约束条件,格式为 key=value 或 key!=value,可配置多个,多个直接的关系为并且,即需要同时满足多个条件才调度任务--placement-pref
: 指定服务的放置首选项,是非强制性的约束,集群会将任务优先调度到满足条件的节点,当这样的节点不存在时,仍然会调度至现有的节点示例:
docker service create --name nginx --replicas 3 --update-delay 10s --publish published=10080,target=80 nginx:1.23.4-alpine3.17
docker service scale 服务名称=副本数
示例(将 nginx 服务的副本数修改为 5):
docker service scale nginx=5
docker service update \
--replicas 副本数 \
--env-add 新增的环境变量 --env-rm 删除的环境变量 \
--workdir 工作目录 --user 用户 --args "需要执行的命令" \
--mount-add type=类型,src=卷名称或主机目录,dst=容器目录,readonly --mount-rm type=类型,src=卷名称或主机目录,dst=容器目录,readonly \
--config-add source=config名称,target=容器内文件,mode=模式(权限) --config-rm config名称 \
--secret-add source=secret名称,target=容器内文件,mode=模式(权限) --secret-rm secret名称 \
--update-delay 更新延时时间 --update-parallelism 同时更新任务数 --update-failure-action 更新失败时的处理方式 \
--image 新镜像名称:新镜像TAG \
--network-add 新增的网络名称 --network-rm 删除的网络名称 \
--publish-add published=服务端口,target=容器端口,protocol=端口协议,mode=模式 --publish-rm published=服务端口,target=容器端口,protocol=端口协议,mode=模式 \
--reserve-cpu 预留的CPU核数 --reserve-memory 预留的内存容量 \
--constraint-add 新增的约束条件 --constraint-rm 删除的约束条件 \
--placement-pref-add 新增的放置首选项 --placement-pref-rm 删除的放置首选项 \
服务名称
参数说明:
--replicas
: 指定服务的副本数--env-add
: 指定需要新增的环境变量,格式为 key=value--env-rm
: 指定需要删除的环境变量,格式为 key=value--workdir
: 之前服务容器内部的工作目录--user
: 指定服务容器使用的用户--args
: 指定服务容器需要执行的命令--mount-add
: 指定需要新增的挂载--mount-rm
: 指定需要删除的挂载--config-add
: 指定需要新增的 config--config-rm
: 指定需要删除的 config--secret-add
: 指定需要新增的 secret--secret-rm
: 指定需要删除的 secret--update-delay
: 指定服务的更新延时时间,h 表示小时、m 表示分支、s 表示秒--update-parallelism
: 指定同时更新的任务数量,不配置时默认为 1,即同时仅更新 1 个任务--update-failure-action
: 指定更新失败时的处理方式(可选 pause、continue、rollback,不配置是默认为 pause)
pause
: 停止,更新失败时停止更新,已更新成功的副本不会修改continue
: 继续,更新失败时继续更新其他副本rollback
: 回退,更新失败时回退副本--image
: 指定服务使用的新镜像--network-add
: 指定此服务需要新增的 Docker Network,需要此 network 已经存在,且 network 的 driver 需要为 overlay
(在 docker network create 时指定 -d overlay)--network-rm
: 指定此服务需要删除的 Docker Network--publish-add
: 新增需要暴露给集群外部的端口,具体描述同上方创建新服务的 --publish 参数--publish-rm
: 删除已经暴露给集群外部的端口,具体描述同上方创建新服务的 --publish 参数--reserve-cpu
: 指定服务需要预留的 CPU 核数--reserve-memory
: 指定服务需要预留的内存容量--constraint-add
: 指定服务新增的约束条件,格式为 key=value 或 key!=value,可配置多个,多个直接的关系为并且,即需要同时满足多个条件才调度任务--constraint-rm
: 指定服务删除的约束条件--placement-pref-add
: 指定服务新增的放置首选项,是非强制性的约束,集群会将任务优先调度到满足条件的节点,当这样的节点不存在时,仍然会调度至现有的节点--placement-pref-rm
: 指定服务删除的放置首选项示例:
docker service update --replicas 3 --image nginx:1.24.0-alpine3.17 --publish-rm published=10080,target=80 --publish-add published=80,target=80 nginx
docker service update --rollback \
--rollback-delay 回滚延时 \
--rollback-failure-action 回滚失败时的处理方式 \
--rollback-max-failure-ratio 回滚时允许的故障率 \
--rollback-monitor 失败判定时间 \
--rollback-parallelism 同时回滚任务数 \
服务名称
参数说明:
--rollback
: 标识此次更新为回滚操作--rollback-delay
: 指定回滚的延时时间,在多任务情况下,回滚完前一个任务之后,等待多长时间开始回滚后一个任务--rollback-failure-action
: 指定回滚失败时的处理方式(可选 pause、continue,默认为 pause)--rollback-max-failure-ratio
: 指定回滚时允许的故障率,表示回滚时最多允许多少比例的失败,可选 0 ~ 1 及其之间的任意数,0 表示不允许任何失败、1 表示允许全部失败--rollback-monitor
: 指定回滚失败的判断时间,即多长时间内,任务启动失败表示为回滚失败,默认为 5s--rollback-parallelism
: 指定同时回滚的任务数,默认为 1示例(回滚 nginx 服务至上一个版本):
docker service update --rollback nginx
docker service rm 服务名称
示例(删除 nginx 服务):
docker service rm nginx
docker service ps 服务名称(多个服务间以空格分割)
示例(查看 nginx 服务的任务列表):
docker service ps nginx