什么是Swarm
Swarm 是一个管理Docker集群的工具。Docker Engine 1.12 版本中引入了 swarm 模式,使您能够创建一个或多个 Docker 引擎组成的集群,称为 swarm,swarm 由两种类型节点 manager 和 worker 组成。
- Manager node(管理节点):维护集群状态,选举一个leader节点去执行调度任务等。
- Worker node(工作节点):接收和执行任务。
参考文档:https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/
Swarm集群搭建
- 准备三台安装了docker机器
节点角色 | 名称 | IP地址 |
---|---|---|
Manager | manager1 | 192.168.20.201 |
Worker | worker1 | 192.168.20.202 |
Worker | worker2 | 192.168.20.203 |
- 在manager1节点运行以下命令来创建一个新的集群
docker swarm init --advertise-addr <MANAGER-IP>
- --advertise-addr:将该IP地址的机器设置为集群管理节点,集群中的其他节点必须能够通过IP访问管理节点
示例:
运行docker swarm init
命令后可以看到输出内容如下,显示worker和manager加入Swarm集群的命令。
[root@manager1 ~]# docker swarm init --advertise-addr 192.168.20.201
Swarm initialized: current node (tw4es24w9z3vziwv204q54401) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-52qk07cimds6kl64wwsg3jmv0esgrxxhs6eft5rjht7f52h8a7-dvessatunzkhnxs2wc57omyab 192.168.20.201:2377
To add a manager to this swarm, run ‘docker swarm join-token manager‘ and follow the instructions.
运行docker info
以查看 swarm 的当前状态:
docker info
运行docker node ls
命令查看节点信息:
[root@manager1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
tw4es24w9z3vziwv204q54401 * manager1 Ready Active Leader 19.03.12
- worker节点加入集群
在worker1和worker2节点运行如下命令加入Swarm:
docker swarm join --token SWMTKN-1-52qk07cimds6kl64wwsg3jmv0esgrxxhs6eft5rjht7f52h8a7-dvessatunzkhnxs2wc57omyab 192.168.20.201:2377
在管理节点manager1,查看集群的节点信息:
[root@manager1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
tw4es24w9z3vziwv204q54401 * manager1 Ready Active Leader 19.03.12
a8z74l8z46bjngnvjk15jctjb worker1 Ready Active 19.03.12
p5210ijqg2g94b6xqug07d4ej worker2 Ready Active 19.03.12
部署服务到Swarm集群
当您将服务部署到 swarm 时,swarm 管理器接受您定义的服务。然后它将集群中节点上的服务作为一个或多个副本任务进行调度。
在管理节点中使用docker service create
命令创建nginx服务:
docker service create --replicas 1 --name mynginx -p 80:80 nginx
- --replicas:指定运行实例的个数
查看集群中的服务:
[root@manager1 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
m1a6i7tqdt7j mynginx replicated 1/1 nginx:latest *:80->80/tcp
访问manager1、worker1,worker2地址都可以看到成功打开nginx页面。
常用命令
docker swarm常用命令
查看管理节点和工作节点的token:
docker swarm join-token manager #查看管理节点的 token
docker swarm join-token worker #查看工作节点的 token
Manager节点退出Swarm集群:
docker swarm leave
强制退出需要加 --force
选项
docker swarm leave --force
Worker节点退出Swarm集群,在工作节点运行命令:
docker swarm leave
docker node常用命令
节点降级,由管理节点降级为工作节点:
docker node demote
节点升级,由工作节点升级为管理节点:
docker node promote
删除节点:
docker node rm
docker service常用命令
查看服务详情:
docker service inspect
查看服务日志:
docker service logs
更新服务:
docker service update
删除服务:
docker service rm
设置服务个数:
docker service scale