Docker Swarm 是一个 Dockerized 化的分布式应用程序的本地集群,它是在 Machine 所提供的功能的基础上优化主机资源的利用率和容错服务。

具体来说,Docker Swarm 支持用户创建可运行 Docker Daemon 的主机资源池,然后在资源池中运行 Docker 容器。Docker Swarm 可以管理工作负载并维护集群状态。

一、简介

Docker Swarm 是 Docker 官方提供的一套容器编排系统,架构如下:

Swarm 是一系列节点的集合,而节点可以是一台裸机或者一台虚拟机;一个节点能扮演一个或者两个角色,Manager 或者 Worker

  • Manager 节点:Docker Swarm 集群需要至少一个 Manager 节点,节点之间使用 Raft Consensus Protocol 进行协同工作;通常,第一个启用 Docker Swarm 的节点将成为 Leader,后来加入的都是 Follower;当前的 Leader 如果挂掉,剩余的节点将重新选举出一个新的 Leader;每一个 Manager 都有一个完整的当前集群状态的副本,可以保证 Manager 的高可用。
  • Worker 节点:Worker 节点是运行实际应用服务的容器所在的地方,理论上,一个 Manager 节点也能同时成为 Worker 节点,但在生产环境中不建议这样做;Worker 节点之间,通过 Control Plane 进行通信,这种通信使用 Gossip 协议,并且是异步的。

    二、创建

所有集群集群主机全部安装 [[Docker 入门#1.快捷安装]],分别运行以下命令创建并加入 Swarm 集群

1
2
3
4
5
6
#初始化集群
docker swarm init --advertise-addr=xxx.xxx.xxx.xxx
docker swarm join-token manager
#加入集群
docker swarm join
docker swarm join --token SWMTKN-1-56woo513naalwb5j3gi13cb4g56m15kd3yu31f8zjsca5pt2p2-dz6v6jaqfrf8uxdvw6mybitth xxx.xxx.xxx.xxx:2377

进入第一台主机(默认初始化的主机就是 Manager 节点),

1
2
3
4
5
6
#查看节点信息
docker node ls
#Work 节点升级
docker node promote xxx
#Manager 节点降级
docker node demote xxx

三、操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#创建一个 tomcat 的 Service
docker service create --name my-tomcat tomcat
#查看当前 Swarm 的 Service
docker service ls
#查看 Service 启动日志
docker service logs my-tomcat
#查看 Service 详情
docker service inspect my-tomcat
#查看 my-tomcat 运行在哪个 node 上
docker service ps my-tomcat
#水平扩展 Service 可以发现其他 node 上都运行了一个 my-tomcat 的 Service
docker service scale my-tomcat=3
docker service ls
docker service ps my-tomcat
#删除service
docker service rm my-tomcat

四、数据

共享数据卷