一、Docker swarm简介
Docker swarm与docker-compose一样,都是docker官方推出的docker容器的编排工具。但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
Docker swarm:其作用就是把若干个Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。
Docker swarm中有三种角色:
Manager node:负责执行容器的编排和集群的管理工作,保持并维护swarm处于期望的状态,swarm可以有多个mana gernode,他们会自动协商选举出一个leader执行编排任务;但相反,不能没有manager node;
Worker node:接受并执行由manager node派发的任务,并且默认manager node也是一个worknode,不过可以将它设置manager-only node,让它负责编排和管理工作;
Service:用来定义worker上执行的命令;
注意:在一个Docker Swarm群集中,每台docker服务器的角色可以都是manager,但是,不可以都是worker,也就是说,不可以群龙无首,并且,参与群集的所有主机名,千万不可以冲突。
二、环境准备
系统版本 | docker版本 | 主机名 | ip地址 |
---|---|---|---|
node01 | 192.168.10.52 | ||
centos 7.5 | 18.09.0 | node02 | 192.168.10.53 |
node03 | 192.168.10.54 |
注意事项:
保证时间同步;
关闭防火墙与SElinux(实验环境);
更改主机名;
编写host文件,保证可以i进行域名解析;
确保docker服务正在运行
三、初始化Swarm群集
[root@node01 ~]# tail -3 /etc/hosts
192.168.10.52 node01
192.168.10.53 node02
192.168.10.54 node03
//三台主机都需配置hosts文件实现域名解析的效果
[root@node01 ~]# docker swarm init --advertise-addr 192.168.10.52
//--advertise-addr:指定与其他node通信的地址
命令的返回信息,如图:
四、配置node02、node03加入、离开swarm群集
node02的操作如下
[root@node02 ~]# docker swarm join --token SWMTKN-1-1dng6ya431doiv4zco0ctidewipqtmdtazho5x8dm86y3cpugm-1j61jldff1deanqug6bxsxd5i 192.168.10.52:2377
This node joined a swarm as a worker.
node03的操作如下
[root@node03 ~]# docker swarm join --token SWMTKN-1-1dng6ya431doiv4zco0ctidewipqtmdtazho5x8dm86y3cpugm-1j61jldff1deanqug6bxsxd5i 192.168.10.52:2377
This node joined a swarm as a worker.
//node02、node03默认是以worker身份加入的
node01的操作如下
[root@node01 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
cs215etnv76dfzxu6ogmu2nk2 node02 Ready Active 18.09.0
oec4ev02mg6zyb38rkwxydyel node03 Ready Active 18.09.0
xojmrky2j13xr6fiq07eub57j * npde01 Ready Active Leader 18.09.0
//可以看出node01、node02、node03的状态为Active
node02、node03申请离开集群
[root@node02 ~]# docker swarm leave
[root@node03 ~]# docker swarm leave
node01的操作如下
[root@node01 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
cs215etnv76dfzxu6ogmu2nk2 node02 Down Active 18.09.0
oec4ev02mg6zyb38rkwxydyel node03