docker swarm集群部署服务

  • 机器配置
  • 设置域名
  • Swarm集群使用
  • 设置管理节点
  • info查看swarm状态
  • join-token查看管理节点命令和令牌
  • 查看节点信息
  • join --token将工作节点添加到swarm中
  • 创建网络
  • Service管理服务
  • create创建服务
  • logs查看服务日志
  • ls查看所有服务
  • ps列出所有运行的服务
  • rm删除服务
  • rollback恢复对服务配置的更改
  • scale复制的服务
  • update更新服务
  • Node管理节点
  • rm删除节点
  • scale复制的服务
  • update更新节点
  • Config配置
  • create创建配置
  • inspect查看详情
  • ls查看所有
  • rm删除配置
  • stack部署
  • deploy部署
  • ls查看所有
  • ps查看运行的堆栈
  • rm删除堆栈
  • services列出服务


官网:https://docs.docker.com/engine/swarm/

docker sonarr 中文 docker swarm中文文档_负载均衡


功能亮点

与 Docker Engine 集成的集群管理:使用 Docker Engine CLI 创建一组 Docker Engine,您可以在其中部署应用程序服务。您不需要额外的编排软件来创建或管理集群。

去中心化设计: Docker 引擎不是在部署时处理节点角色之间的差异,而是在运行时处理任何专业化。您可以使用 Docker 引擎部署两种类型的节点、管理器和工作器。这意味着您可以从单个磁盘映像构建整个集群。

声明式服务模型: Docker Engine 使用声明式方法让您定义应用程序堆栈中各种服务的所需状态。例如,您可能会描述一个应用程序,该应用程序由具有消息队列服务和数据库后端的 Web 前端服务组成。

缩放:对于每个服务,您可以声明要运行的任务数量。当您扩大或缩小规模时,群管理器会通过添加或删除任务来自动适应以保持所需的状态。

期望状态协调: swarm 管理器节点不断监控集群状态,并协调实际状态和您表达的期望状态之间的任何差异。例如,如果您设置一个服务来运行容器的 10 个副本,并且托管其中两个副本的工作机器崩溃,则管理器会创建两个新副本来替换崩溃的副本。swarm manager 将新的副本分配给正在运行且可用的 worker。

多主机网络:您可以为您的服务指定一个覆盖网络。群管理器在初始化或更新应用程序时自动为覆盖网络上的容器分配地址。

服务发现: Swarm 管理器节点为 Swarm 中的每个服务分配一个唯一的 DNS 名称并平衡运行容器的负载。您可以通过嵌入在 swarm 中的 DNS 服务器查询在 swarm 中运行的每个容器。

负载均衡:您可以将服务的端口暴露给外部负载均衡器。在内部,swarm 允许您指定如何在节点之间分发服务容器。

默认安全: swarm 中的每个节点都强制执行 TLS 相互身份验证和加密,以保护自身与所有其他节点之间的通信。您可以选择使用自签名根证书或来自自定义根 CA 的证书。

滚动更新:在推出时,您可以增量地将服务更新应用到节点。swarm 管理器允许您控制服务部署到不同节点集之间的延迟。如果出现任何问题,您可以回滚到该服务的先前版本。节点工作原理

docker sonarr 中文 docker swarm中文文档_docker_02


docker sonarr 中文 docker swarm中文文档_docker sonarr 中文_03


docker sonarr 中文 docker swarm中文文档_负载均衡_04


swarm 模式如何接受服务创建请求并将任务调度到工作节点。

docker sonarr 中文 docker swarm中文文档_运维_05

4.1.Swarm集群条件
三个可以通过网络通信的 Linux 主机,安装了 Docker
管理员机器的IP地址
打开主机之间的端口
用于集群管理通信的TCP 端口 2377
用于节点间通信的TCP和UDP 端口 7946
UDP 端口 4789用于覆盖网络流量
需要三个安装了 Docker 并且可以通过网络进行通信的 Linux 主机。这些可以是物理机、虚拟机、Amazon EC2 实例或以其他方式托管。
其中一台机器是经理(称为manager1),其中两台是工人(worker1和worker2)

机器配置

docker sonarr 中文 docker swarm中文文档_docker_06

设置域名

永久生效不重启:hostnamectl set-hostname worker2

永久生效需要重启才能生效:
vim /etc/sysconfig/network

临时生效:hostname worker2

docker sonarr 中文 docker swarm中文文档_docker sonarr 中文_07

Swarm集群使用

docker swarm --help
Usage:  docker swarm COMMAND
Manage Swarm
Commands:
  ca          显示并旋转根CA
  init        初始化swarm集群
  join        将工作加点加入到管理节点
  join-token  加入管理节点令牌
  leave       离开swarm集群
  unlock      解锁swarm集群
  unlock-key  管理解锁秘钥key
  update      更新swarm集群

docker sonarr 中文 docker swarm中文文档_docker sonarr 中文_08

设置管理节点

sudo docker swarm init --help
Usage:  docker swarm init [OPTIONS]
初始化swarm集群
Options:
      --advertise-addr string                  绑定IP地址,如果是云上,建议使用私网,私网之间通信不需要流量 (format: <ip|interface>[:port])
      --autolock                               启用管理器自动锁定(需要解锁密钥才能启动已停止的管理器)
      --availability string                    节点的可用模式 ("active"|"pause"|"drain") (default "active")
      --cert-expiry duration                   节点证书的有效期 (ns|us|ms|s|m|h) (default 2160h0m0s)
      --data-path-addr string                  用于数据路径通信的地址或接口 (format: <ip|interface>)
      --data-path-port uint32                  用于数据路径通信的端口 (1024 - 49151). 果未设置值或设置为0,则使用默认端口(4789).
      --default-addr-pool ipNetSlice           CIDR格式的默认地址池 (default [])
      --default-addr-pool-mask-length uint32   默认地址池子网掩码长度 (default 24)
      --dispatcher-heartbeat duration          调度器心跳周期 (ns|us|ms|s|m|h) (default 5s)
      --external-ca external-ca                一个或多个证书签名终结点的规范
      --force-new-cluster                      强制从当前状态创建新群集
      --listen-addr node-addr                  监听地址(format: <ip|interface>[:port]) (default 0.0.0.0:2377)
      --max-snapshots uint                     要保留的附加快照数
      --snapshot-interval uint                 Raft快照之间的日志条目数(默认值10000)
      --task-history-limit int                 任务历史记录保留限制(默认值5)
[root@localhost ~]# 


1、示例:
docker swarm init --advertise-addr 192.168.3.85
[root@localhost ~]#  docker swarm init --advertise-addr 192.168.3.85
Swarm initialized: current node (uhqsbzo5s3i3i3nhfr4o7m3gu) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-2o01hzyxquaiodr27h40obm66i906dhfvp002rnfm9isr5okkf-6n2ux88advdj2jqwkbb3wp7sj 192.168.3.85:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
[root@localhost ~]#

该–advertise-addr标志将管理器节点配置为将其地址发布为192.168.99.100。群中的其他节点必须能够访问 IP 地址的管理器。输出包括将新节点加入群的命令。根据–token 标志的值,节点将作为经理或工人加入。

info查看swarm状态

运行docker info以查看 swarm 的当前状态:docker info
[root@localhost ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 19
 Server Version: 20.10.7
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: active
  NodeID: uhqsbzo5s3i3i3nhfr4o7m3gu
  Is Manager: true
  ClusterID: vpa4ed0unejfh8kl2pjt1m9ci
  Managers: 1
  Nodes: 1
  Default Address Pool: 10.0.0.0/8  
  SubnetSize: 24
  Data Path Port: 4789
  Orchestration:
   Task History Retention Limit: 5
  Raft:
   Snapshot Interval: 10000
   Number of Old Snapshots to Retain: 0
   Heartbeat Tick: 1
   Election Tick: 10
  Dispatcher:
   Heartbeat Period: 5 seconds
  CA Configuration:
   Expiry Duration: 3 months
   Force Rotate: 0
  Autolock Managers: false
  Root Rotation In Progress: false
  Node Address: 192.168.3.85
  Manager Addresses:
   192.168.3.85:2377
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: d71fcd7d8303cbf684402823e425e9dd2e99285d
 runc version: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-1160.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 1.934GiB
 Name: localhost.localdomain
 ID: 354G:VTVT:M5Q6:S3BS:ZY4S:BGWN:JHCZ:UV5E:35RZ:CMED:G3P6:ZR7F
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  hub.docker.com
  120.79.51.144:8079
  192.168.0.85:8085
  192.168.0.85:8086
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: API is accessible on http://0.0.0.0:2375 without encryption.
         Access to the remote API is equivalent to root access on the host. Refer
         to the 'Docker daemon attack surface' section in the documentation for
         more information: https://docs.docker.com/go/attack-surface/
[root@localhost ~]#

join-token查看管理节点命令和令牌

要查看管理节点的加入命令和令牌。

docker swarm join-token manager

传递–quiet标志以仅打印令牌:

docker swarm join-token --quiet worker

docker sonarr 中文 docker swarm中文文档_Docker_09


运行swarm join-token --rotate使旧令牌无效并生成新令牌。指定是否要为worker或manager 节点轮换令牌:

$ docker swarm join-token --rotate worker

docker sonarr 中文 docker swarm中文文档_负载均衡_10

查看节点信息

node ls查看节点信息:
[root@localhost ~]# 
[root@localhost ~]# docker node ls
ID                            HOSTNAME                STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
uhqsbzo5s3i3i3nhfr4o7m3gu *   localhost.localdomain   Ready     Active         Leader           20.10.7
[root@localhost ~]# 
在*该节点ID下表明当前连接此节点上。Docker Engine swarm 模式会自动为机器主机名命名节点。
该AVAILABILITY列显示调度程序是否可以将任务分配给节点:
Active 意味着调度程序可以将任务分配给节点。
Pause 意味着调度程序不会将新任务分配给节点,但现有任务会继续运行。
Drain意味着调度程序不会向节点分配新任务。调度程序关闭任何现有任务并将它们安排在可用节点上。
该MANAGER STATUS列显示节点参与 Raft 共识:
没有值表示工作节点不参与群管理。
Leader 意味着该节点是主要管理器节点,它为集群做出所有集群管理和编排决策。
Reachable表示该节点是参与 Raft 共识仲裁的管理节点。如果领导节点变得不可用,则该节点有资格被选举为新的领导者。
Unavailable意味着该节点是一个无法与其他管理器通信的管理器。如果管理器节点不可用,您应该将新的管理器节点加入群或将工作节点提升为管理器。

join --token将工作节点添加到swarm中

使用管理节点docker swarm init输出 生成的命令,以创建加入到现有 swarm 的工作节点:
该docker swarm join命令执行以下操作:
将当前节点上的 Docker 引擎切换到 swarm 模式。
向管理器请求 TLS 证书。
使用机器主机名命名节点
根据群令牌将当前节点加入到管理器监听地址的群中。
将当前节点设置为Active可用性,这意味着它可以从调度程序接收任务。
将ingress覆盖网络扩展到当前节点。

1、将192.168.3.86添加到管理节点
docker swarm join --token SWMTKN-1-2o01hzyxquaiodr27h40obm66i906dhfvp002rnfm9isr5okkf-6n2ux88advdj2jqwkbb3wp7sj 192.168.3.85:2377

2、将192.168.3.87添加到管理节点
docker swarm join --token SWMTKN-1-2o01hzyxquaiodr27h40obm66i906dhfvp002rnfm9isr5okkf-6n2ux88advdj2jqwkbb3wp7sj 192.168.3.85:2377

3、查看工作节点
打开终端并通过 ssh 进入管理节点运行的机器并运行docker node ls命令以查看工作节点。

创建网络

您可以使用覆盖网络连接群内的一项或多项服务。
首先,使用docker network create 带有--driver overlay标志的命令在管理器节点上创建覆盖网络。
$ docker network create --driver overlay my-network

在群模式下创建覆盖网络后,所有管理器节点都可以访问网络。
您可以创建一个新服务并传递--network标志以将服务附加到覆盖网络:
$ docker service create \
  --replicas 3 \
  --network my-network \
  --name my-web \
  nginx
swarm 扩展my-network到运行服务的每个节点。
您还可以使用该--network-add标志将现有服务连接到覆盖网络 。
$ docker service update --network-add my-network my-web
要将正在运行的服务与网络断开连接,请使用该--network-rm标志。
$ docker service update --network-rm my-network my-web
使用该--ingress标志以及您要设置的自定义选项创建一个新的覆盖网络。本示例将 MTU 设置为 1200,将子网设置为10.11.0.0/16,并将网关设置为10.11.0.2。
$ docker network create \
  --driver overlay \
  --ingress \
  --subnet=10.11.0.0/16 \
  --gateway=10.11.0.2 \
  --opt com.docker.network.driver.mtu=1200 \
  my-ingress

$docker network create \
  --driver=overlay \
  --subnet=172.12.0.0/16 \
  --ip-range=172.12.0.0/16 \
  --gateway=172.12.0.1 \
  --attachable \
  net01

Service管理服务

sudo docker service --help
Usage:  docker service COMMAND
管理服务
Commands:
  create      创建服务
  inspect     查看服务信息
  logs        获取服务或任务的日志
  ls          查看所有服务
  ps          列出一个或多个服务的任务
  rm          删除服务
  rollback    恢复对服务配置的更改
  scale       扩展一个或多个复制的服务
  update      更新服务
Run 'docker service COMMAND --help' for more information on a command.
[root@localhost ~]#

create创建服务

Usage:  docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
Create a new service
Options:
      --cap-add list                       添加Linux功能
      --cap-drop list                      删除Linux功能
      --config config                      指定要向服务公开的配置
      --constraint list                    布局约束
      --container-label list               容器标签
      --credential-spec credential-spec    托管服务帐户的凭据规范(仅限Windows)
  -d, --detach                             立即退出,而不是等待服务聚合
      --dns list                          设置自定义DNS服务
      --dns-option list                    设置DNS选项
      --dns-search list                    设置自定义DNS搜索域
      --endpoint-mode string               端点模式(vip或dnsrr)(默认为“vip”)
      --entrypoint command                 覆盖镜像的默认入口点
  -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                          设置一个或多个自定义主机到IP映射(主机:IP)
      --hostname string                    设置容器主机名
      --init                               在每个服务容器中使用init来转发信号和获取进程
      --isolation string                   服务容器隔离模式
  -l, --label list                         设置服务标签
      --limit-cpu decimal                  限制 CPUs
      --limit-memory bytes                 限制 内存
      --limit-pids int                     限制最大进程数(default 0 = unlimited)
      --log-driver string                  服务日志驱动程序
      --log-opt list                       服务日志驱动选项
      --max-concurrent uint                要同时运行的作业任务数(默认为副本--replicas)
      --mode string                        设置服务模式 (replicated, global, replicated-job, or global-job) (default "replicated")
      --mount mount                        将文件系统装载附加到服务
      --name string                        设置服务名
      --network network                    设置网络
      --no-healthcheck                     禁用任何指定的容器 HEALTHCHECK
      --no-resolve-image                   不要查询注册表以解析图像摘要和支持的平台
      --placement-pref pref                添加放置首选项
  -p, --publish port                       将端口发布为节点端口
  -q, --quiet                              抑制进度输出
      --read-only                          以只读方式装载容器的根文件系统
      --replicas uint                      设置任务副本数
      --replicas-max-per-node uint         Maximum number of tasks per node (default 0 = unlimited)
      --reserve-cpu decimal                Reserve CPUs
      --reserve-memory bytes               Reserve Memory
      --restart-condition string           Restart when condition is met ("none"|"on-failure"|"any") (default "any")
      --restart-delay duration             Delay between restart attempts (ns|us|ms|s|m|h) (default 5s)
      --restart-max-attempts uint          Maximum number of restarts before giving up
      --restart-window duration            Window used to evaluate the restart policy (ns|us|ms|s|m|h)
      --rollback-delay duration            Delay between task rollbacks (ns|us|ms|s|m|h) (default 0s)
      --rollback-failure-action string     Action on rollback failure ("pause"|"continue") (default "pause")
      --rollback-max-failure-ratio float   Failure rate to tolerate during a rollback (default 0)
      --rollback-monitor duration          Duration after each task rollback to monitor for failure (ns|us|ms|s|m|h) (default 5s)
      --rollback-order string              Rollback order ("start-first"|"stop-first") (default "stop-first")
      --rollback-parallelism uint          Maximum number of tasks rolled back simultaneously (0 to roll back all at once)
                                           (default 1)
      --secret secret                      Specify secrets to expose to the service
      --stop-grace-period duration         Time to wait before force killing a container (ns|us|ms|s|m|h) (default 10s)
      --stop-signal string                 Signal to stop the container
      --sysctl list                        Sysctl options
  -t, --tty                                Allocate a pseudo-TTY
      --ulimit ulimit                      Ulimit options (default [])
      --update-delay duration              更新延迟时间 (ns|us|ms|s|m|h) (default 0s)
      --update-failure-action string       Action on update failure ("pause"|"continue"|"rollback") (default "pause")
      --update-max-failure-ratio float     Failure rate to tolerate during an update (default 0)
      --update-monitor duration            Duration after each task update to monitor for failure (ns|us|ms|s|m|h) (default 5s)
      --update-order string                Update order ("start-first"|"stop-first") (default "stop-first")
      --update-parallelism uint            Maximum number of tasks updated simultaneously (0 to update all at once) (default 1)
  -u, --user string                        指定用户ID(format: <name|uid>[:<group|gid>])
      --with-registry-auth                 向swarm代理发送注册表身份验证详细信息
  -w, --workdir string                     容器内的工作目录
[root@localhost ~]#

1、示例

sudo docker service create --name my-nginx -p 8888:80 --hostname nginx --replicas 3 nginx

创建nginx服务,指定名称为my-nginx ,端口为8888,主机名为nginx,副本数为3.

docker sonarr 中文 docker swarm中文文档_docker sonarr 中文_11


浏览器测试:

http://192.168.3.87:8888/ http://192.168.3.86:8888/ http://192.168.3.85:8888/docker sonarr 中文 docker swarm中文文档_负载均衡_12### inspect查看服务信息

Usage:  docker service inspect [OPTIONS] SERVICE [SERVICE...]
Display detailed information on one or more services
Options:
  -f, --format string   Format the output using the given Go template
      --pretty          Print the information in a human friendly format
[root@localhost ~]#

1、示例

sudo docker service inspect my-nginx

docker sonarr 中文 docker swarm中文文档_负载均衡_13

logs查看服务日志

Usage:  docker service logs [OPTIONS] SERVICE|TASK
Fetch the logs of a service or task
Options:
      --details        显示提供给日志的其他详细信息
  -f, --follow         跟踪日志输出
      --no-resolve     不要将ID映射到输出中的名称
      --no-task-ids    不要在输出中包含任务ID
      --no-trunc       不要截断输出
      --raw            不要格式化日志
      --since string   输出从xxx到xx的日志 (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  -n, --tail string    从日志末尾显示的行数 (default "all")
  -t, --timestamps     显示时间戳
[root@localhost ~]#

1、示例

sudo docker service logs my-nginx

docker sonarr 中文 docker swarm中文文档_docker_14


sudo docker service logs -n 5 my-nginx

docker sonarr 中文 docker swarm中文文档_docker_15

ls查看所有服务

Usage:  docker service ls [OPTIONS]
List services
Aliases:
  ls, list
Options:
  -f, --filter filter   根据提供的条件筛选输出
      --format string   使用go模版打印服务
  -q, --quiet           仅显示IDs
[root@localhost ~]#

1、示例

sudo docker service ls

docker sonarr 中文 docker swarm中文文档_docker_16

ps列出所有运行的服务

Usage:  docker service ps [OPTIONS] SERVICE [SERVICE...]
List the tasks of one or more services
Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print tasks using a Go template
      --no-resolve      Do not map IDs to Names
      --no-trunc        Do not truncate output
  -q, --quiet           Only display task IDs
[root@localhost ~]#

1、示例
sudo docker service ps my-nginx
在这里插入图片描述

rm删除服务

sudo docker service rm my-nginx

docker sonarr 中文 docker swarm中文文档_docker_17

rollback恢复对服务配置的更改

Usage:  docker service rollback [OPTIONS] SERVICE
恢复对服务配置的更改
Options:
  -d, --detach   立即退出,而不是等待服务聚合
  -q, --quiet    抑制进度输出
[root@localhost ~]#

scale复制的服务

Usage:  docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
扩展一个或多个复制的服务
Options:
  -d, --detach   立即退出,而不是等待服务聚合
[root@localhost ~]#

1、示例

sudo docker service scale my-nginx=3

docker sonarr 中文 docker swarm中文文档_负载均衡_18

update更新服务

sudo docker service update --replicas 2 my-nginx

docker sonarr 中文 docker swarm中文文档_docker_19

Node管理节点

sudo docker node --help
Usage:  docker node COMMAND
Manage Swarm nodes
Commands:
  demote      从群中的管理器降级一个或多个节点
  inspect     显示一个或多个节点的详细信息
  ls          查看swarm所有节点
  promote     将一个或多个节点升级到群中的manage
  ps          列出在一个或多个节点上运行的任务,默认为当前节点
  rm          从群中删除一个或多个节点
  update      更新节点

Run 'docker node COMMAND --help' for more information on a command.
[root@localhost ~]# 
 
1.demote从群中的管理器降级一个或多个节点

2.inspect查看节点信息
[root@localhost ~]# sudo docker node inspect --help
Usage:  docker node inspect [OPTIONS] self|NODE [NODE...]
Display detailed information on one or more nodes
Options:
  -f, --format string   Format the output using the given Go template
      --pretty          Print the information in a human friendly format
1、示例
sudo docker node inspect manager

3.ls查看所有节点
[root@localhost ~]# sudo docker node ls --help
Usage:  docker node ls [OPTIONS]
List nodes in the swarm
Aliases:
  ls, list
Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print nodes using a Go template
  -q, --quiet           Only display IDs
[root@localhost ~]# 
[root@localhost ~]# 
1、示例
 sudo docker node ls

4.ps查看节点信息
[root@localhost ~]# sudo docker node ps --help
Usage:  docker node ps [OPTIONS] [NODE...]
List tasks running on one or more nodes, defaults to current node
Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print tasks using a Go template
      --no-resolve      Do not map IDs to Names
      --no-trunc        Do not truncate output
  -q, --quiet           Only display task IDs
[root@localhost ~]#

1、示例
sudo docker node ps manager

rm删除节点

[root@localhost ~]# sudo docker node rm --help
Usage:  docker node rm [OPTIONS] NODE [NODE...]
Remove one or more nodes from the swarm
Aliases:
  rm, remove
Options:
  -f, --force   Force remove a node from the swarm
[root@localhost ~]#

1、示例
sudo docker node rm -f worker1

scale复制的服务

[root@localhost ~]# sudo docker service scale --help
Usage:  docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
扩展一个或多个复制的服务
Options:
  -d, --detach   立即退出,而不是等待服务聚合
[root@localhost ~]#

1、示例
sudo docker service scale my-nginx=3

update更新节点

Config配置

官网:https://docs.docker.com/compose/compose-file/compose-file-v3/#configs

在动态的、大规模的分布式集群上,管理和分发配置文件也是很重要的工作。传统的配置文件分发方式(如配置文件放入镜像中,设置环境变量,volume 动态挂载等)都降低了镜像的通用性。
在 Docker 17.06 以上版本中,Docker 新增了 docker config 子命令来管理集群中的配置信息,以后你无需将配置文件放入镜像或挂载到容器中就可实现对服务的配置。
注意:config 仅能在 Swarm 集群中使用。
这里我们以在 Swarm 集群中部署 redis 服务为例。

命令格式:
[root@manager base]# docker config --help
Usage:  docker config COMMAND
管理docker相关配置
Commands:
  create      从文件或STDIN创建配置
  inspect     显示一个或多个配置的详细信息
  ls          列出所有配置
  rm          删除配置

Run 'docker config COMMAND --help' for more information on a command.
[root@manager base]#

create创建配置

[root@manager base]# docker config create --help
Usage:  docker config create [OPTIONS] CONFIG file|-
创建配置
Options:
  -l, --label list               配置标签
      --template-driver string   模板驱动程序
[root@manager base]#

1、示例

docker config create redis.conf redis.conf

docker sonarr 中文 docker swarm中文文档_docker sonarr 中文_20


2、compose示例

version: "3.9"services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_configconfigs:
  my_config:
    file: ./my_config.txt
  my_other_config:
external: true

version: "3.9"services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - source: my_config
        target: /redis_config
        uid: '103'
        gid: '103'
        mode: 0440configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

3、创建redis服务

docker service create --name redis \
--hostname redis \
--network mynetwork \
--config redis.conf \
-p 6379:6379  redis:6.0 \
redis-server /redis.conf

$ docker service create \
     --name redis \
     # --config source=redis.conf,target=/etc/redis.conf \
     --config redis.conf \
     -p 6379:6380 \
     redis:latest \
     redis-server /redis.conf

docker sonarr 中文 docker swarm中文文档_Docker_21


可以看到在节点worker1上创建了一个redis服务。

如果你没有在 target 中显式的指定路径时,默认的 redis.conf 以 tmpfs 文件系统挂载到容器的 /config.conf。

经过测试,redis 可以正常使用。

以前我们通过监听主机目录来配置 Redis,就需要在集群的每个节点放置该文件,如果采用 docker config 来管理服务的配置信息,

我们只需在集群中的管理节点创建 config,当部署服务时,集群会自动的将配置文件分发到运行服务的各个节点中,大大降低了配置信息的管理和分发难度。

3、测试redis服务

登录worker1服务器上,查看redis服务。

进入redis容器:sudo docker exec -it 8e5587f2a3ad bash

登录redis操作:

redis-cli

auth “123456”

set name ‘lisi’

get name

docker sonarr 中文 docker swarm中文文档_docker sonarr 中文_22


4、扩展redis服务

sudo docker service scale redis=3

docker sonarr 中文 docker swarm中文文档_Docker_23


可以看到扩展了3个副本,分别在manager/worker1/worker2上创建一个redis副本服务。

登录到manager测试:

sudo docker service ps redis

sudo docker ps

sudo docker exec -it f2c3b34f0d2e bash

redis-cli -p 6379 -a 123456

docker sonarr 中文 docker swarm中文文档_Docker_24


Worker1节点:

docker sonarr 中文 docker swarm中文文档_docker_25


Worker2节点:

docker sonarr 中文 docker swarm中文文档_运维_26

inspect查看详情

Usage:  docker config inspect [OPTIONS] CONFIG [CONFIG...]
Display detailed information on one or more configs
Options:
  -f, --format string   使用go模版格式化输出
      --pretty          使用goson格式化输出
[root@manager base]#

1、示例

docker config inspect redis.conf

docker sonarr 中文 docker swarm中文文档_docker_27

ls查看所有

[root@manager base]# docker config ls --help
Usage:  docker config ls [OPTIONS]
List configs
Aliases:
  ls, list
Options:
  -f, --filter filter   基于所提供条件的过滤器输出
      --format string   使用go模版打印输出
  -q, --quiet           只显示容器ID
[root@manager base]#

1、示例

docker config ls

docker sonarr 中文 docker swarm中文文档_负载均衡_28

rm删除配置

sudo docker config rm redis.conf

stack部署

sudo docker stack --help
Usage:  docker stack [OPTIONS] COMMAND
Manage Docker stacks
Options:
      --orchestrator string   要使用的编排 (swarm|kubernetes|all)
Commands:
  deploy      部署新堆栈或更新现有堆栈
  ls          列表堆栈
  ps          列出堆栈中的任务
  rm          移除一个或多个堆栈
  services    列出堆栈中的服务
Run 'docker stack COMMAND --help' for more information on a command.
[root@localhost test02]#

deploy部署

[root@localhost test02]# docker stack deploy --help
Usage:  docker stack deploy [OPTIONS] STACK
部署新堆栈或更新现有堆栈
Aliases:
  deploy, up
Options:
  -c, --compose-file strings   指定docker-compose.yml文件
      --orchestrator string    使用的编排方式 (swarm|kubernetes|all)
      --prune                  删除不再引用的服务
      --resolve-image string   查询注册表以解析镜像摘要和支持的平台("always"|"changed"|"never")(default "always")
      --with-registry-auth    向Swarm代理发送注册表身份验证详细信息
[root@localhost test02]#

1、示例

sudo docker stack deploy -c docker-compose.yml redis

docker sonarr 中文 docker swarm中文文档_docker_29


sudo docker stack deploy -c mysql-stack.yml mysql

docker sonarr 中文 docker swarm中文文档_运维_30

ls查看所有

sudo docker stack ls

docker sonarr 中文 docker swarm中文文档_docker_31

ps查看运行的堆栈

[root@manager base]# sudo docker stack ps --help
Usage:  docker stack ps [OPTIONS] STACK
List the tasks in the stack
Options:
  -f, --filter filter         根据提供的条件筛选输出
      --format string         使用go模版打印输出
      --no-resolve            不要将ID映射到名称
      --no-trunc              不要截断输出
      --orchestrator string   O要使用的编排器 (swarm|kubernetes|all)
  -q, --quiet                 只是输出容器ID
[root@manager base]#

1、示例

sudo docker stack ps mysql

docker sonarr 中文 docker swarm中文文档_负载均衡_32


sudo docker stack ps --no-resolve mysql

docker sonarr 中文 docker swarm中文文档_负载均衡_33

rm删除堆栈

[root@manager base]# sudo docker stack rm --help
Usage:  docker stack rm [OPTIONS] STACK [STACK...]
删除堆栈
Aliases:
  rm, remove, down
Options:
      --orchestrator string   Orchestrator to use (swarm|kubernetes|all)
[root@manager base]#

1、示例

sudo docker stack rm mysql

docker sonarr 中文 docker swarm中文文档_运维_34

services列出服务

[root@manager base]# sudo docker stack services --help
Usage:  docker stack services [OPTIONS] STACK
列出所有堆栈
Options:
  -f, --filter filter         根据提供的条件筛选输出
      --format string         使用go模版打印输出
      --orchestrator string   要使用的编排器 (swarm|kubernetes|all)
  -q, --quiet                 只是输出容器ID
[root@manager base]#

1、示例

sudo docker stack services mysql

docker sonarr 中文 docker swarm中文文档_运维_35