什么是Docker Swarm?

Docker Swarm是管理跨节点容器的编排工具,相较于Docker Compose而言,Compose只能编排单节点上的容器,Swarm将一群Docker节点虚拟化为一个主机,使得用户只要在单一主机上操作就能完成对整个容器集群的管理工作。如果下载的是最新版的Docker,那么Swarm就已经被包含在内了,无需再安装。

Docker Swarm架构包含两种角色,manager和node,前者是Swarm Daemon工作的节点,包含了调度器、路由、服务发现等功能,负责接收客户端的集群管理请求,然后调度Node进行具体的容器工作,比如容器的创建、扩容与销毁等。 manager本身也是一个node。

ID                            HOSTNAME        STATUS    AVAILABILITY   MANAGER  
qh7huulqyliyx2jf1eiepxndw *   Docker-Main-1   Ready     Active         Leader           
xv7xpsg4eth5nnm0mcy2z2mzo     Docker-Main-2   Ready     Active         Reachable       
cos5ydmta8j527s1t1mej27ht     Docker-Main-3   Ready     Active         Reachable
y0hfv3m5z6799muujtmf5wkac     Docker-Work-1   Ready     Active
v41b3lcfrum7n4ccu5f8lttns     Docker-Work-2   Ready     Active                         

Docker Swarm集群里的几个角色

#Manager:主机,负责服务分发 扩容 回滚和运行服务

一个Swarm集群需要至少3台Manager做一致性验证,并且至少保证两台以上存活。

#Work:工作机,负责运行服务

一个Swarm集群可以有若干个Work,Work不能执行任何服务操作。

#Node:节点,Manager和Work统称Node
#Service:服务,在Docker里叫容器

一个服务可以有多个副本,可以动态扩容和缩容,不同副本之间数据一致,服务之间用hostname访问。

Docker Swarm 操作命令

#dcoker swarm 用于创建 加入 离开 更新 Swarm集群
#dcoker swarm命令详解
Usage:  docker swarm COMMAND

Manage Swarm

Commands:
  ca          Display and rotate the root CA
  init        Initialize a swarm						#初始化一个集群
  join        Join a swarm as a node and/or manager		#加入一个集群
  join-token  Manage join tokens						#获取集群加入令牌
  leave       Leave the swarm							#离开集群
  unlock      Unlock swarm								#解锁集群
  unlock-key  Manage the unlock key						#集群加锁
  update      Update the swarm							#更新集群

Run 'docker swarm COMMAND --help' for more information on a command.


#docker swarm init命令详解
Usage:  docker swarm init [OPTIONS]

Initialize a swarm

Options:
      --advertise-addr string      		#集群广播地址,可以是IP 网卡名称 IP/网卡名称:端口号
      --autolock                   		#启用管理器自动锁定                    
      --availability string		 		#节点的可用性("active"|"pause"|"drain")
      --cert-expiry duration			#设置节点证书有效期
      --data-path-addr string   		#设置数据路径地址
      --data-path-port uint32       	#设置数据路径端口号
      --default-addr-pool ipNetSlice 
      --default-addr-pool-mask-length uint  	#集群子网掩码长度,默认24
      --dispatcher-heartbeat duration   #调度程序心跳周期,默认5秒
      --external-ca external-ca         #
      --force-new-cluster				#强制从当前状态创建一个新集群
      --listen-addr node-addr			#监听地址,默认0.0.0.0:2377
      --max-snapshots uint				#要保留的额外Raft快照的数量
      --snapshot-interval uint   		#Raft快照之间的日志条目数量(默认10000)
      --task-history-limit int         	#任务历史记录保留限制(默认为5)
      
#docker swarm join命令详解
Usage:  docker swarm join [OPTIONS] HOST:PORT

Join a swarm as a node and/or manager

Options:
      --advertise-addr string   		#发布的地址(IP|接口[:port])
      --availability string     		#节点的可用性("active"|"pause"|"drain")
      --data-path-addr string   		#用于数据路径流量的地址或接口(IP|接口)
      --listen-addr node-addr   		#监听地址,默认0.0.0.0:2377
      --token string            		#通过令牌加入Swarm集群

快速创建一个集群

初始化-获得令牌-在其他节点上输入令牌即可加入节点。
#执行初始化
root@Docker-Main-1:~# docker swarm init --advertise-addr 10.86.1.100

#获得加入集群令牌
docker swarm join-token worker		#获得Work节点加入令牌
docker swarm join-token manager		#获得Manager节点加入令牌

#离开集群 Node上操作
docker swarm leave

#删除一个节点 Manager上操作
docker node rm <节点ID>

·节点离开后会在集群列表中显示Down,需要在Manager操作删除。

Docker Node 操作命令

#docker node命令详解
Usage:  docker node COMMAND

Manage Swarm nodes

Commands:
  demote      	#从群集管理器中降级一个或多个节点
  inspect     	#显示一个或多个节点的详细信息
  ls         	#列出所有节点	
  promote     	#将群集中的一个或多个节点提升为manager
  ps          	#列出在一个或多个节点上运行的任务,默认为当前节点
  rm          	#从群集中移除一个或多个节点
  update      	#更新节点信息

Run 'docker node COMMAND --help' for more information on a command.


快速查看集群情况

查看集群信息-查看运行状态-删除节点
docker node ls 					#列出集群信息
docker node ps					#查看正在运行的服务
docker node rm <节点ID>			#删除一个节点

Docker Service 运行服务

#docker service命令详解

Usage:  docker service COMMAND

Manage services

Commands:
  create      #创建一个新服务
  inspect     #显示一个或多个服务的详细信息
  logs        #查看服务日志
  ls          #列出服务列表
  ps          #列出一个或多个服务的任务
  rm          #删除一个或多个服务
  rollback    #将更改恢复到服务配置
  scale       #设置副本数量
  update      #Update a service
  
#docker service create命令详解
  -d			#运行后立即退出,而不是等待服务停止
  -e			#设置环境变量
  -l			#设置服务标签
  -p			#公开端口
  -q			#停止控制台输出
  -t			#进入控制台
  -w			#设置容器初始工作目录
  --name		#设置容器名称
  --host		#映射其他容器
如何快速开始创建服务
#启动一个alpine镜像执行ping baidu.com
docker service create --replicas 1 --name pingbaidu alpine ping baidu.com
	--repliacs  #副本数量
	--name		#服务名称
如何快速扩容服务
#使用docker service scale 命令设置服务副本数
docker service scale pingbaidu=20