Docker-Swarm
什么是Docker-Swarm?
Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,它是将一群Docker宿主机变成一个单一的虚拟主机,和Compose一样,都是Docker官方容器编排项目,但不同的是,Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Swarm 则可以在多个服务器或主机上创建容器集群服务了一、安装Docker-Swarm
从Docker 1.12.0版本开始,Docker Swarm已经包含在Docker引擎中,所以不需要单独安装搭建什么,只需要安装Docker 1.12.0以上的版本即可
★准备工作★
一共需要3台服务器
master:192.168.31.101
node1:192.168.31.102
node2:192.168.31.103
首先三台服务器都安装好docker服务
yum安装
1.配置docker的yum源
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.搜索docker版本并安装、启动
#搜索版本号
yum list docker-ce --showduplicates | sort -r
yum -y install docker-ce-20.10.9
#启动docker服务
systemctl start docker
apt安装
1.更新apt的docker源
apt update
apt -y install ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
2.安装docker并启动
apt update
apt -y install docker-ce docker-ce-cli containerd.io
#启动docker
systemctl start docker && systemctl enable docker
开始安装Swarm群集
选择master主节点执行初始化群集命令docker swarm init
注意:在哪台服务器执行,哪台服务器就是主节点
master(192.168.31.101):
[root@master ~]# docker swarm init
Swarm initialized: current node (w9fd7zwk7etpciy7kjadnf4pd) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1xisofd4uy6tewx7mpbqze3njigm322pim1tm417fuyox0bxru-1hjpjgvm8dpewywk5l317fv4l 192.168.31.101:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
会出现加入群集命令的提示,再其他节点执行输入docker swarm join --token SWMTKN-1-1xisofd4uy6tewx7mpbqze3njigm322pim1tm417fuyox0bxru-1hjpjgvm8dpewywk5l317fv4l 192.168.31.101:2377即可加入集群
node1(192.168.31.102)、node2(192.168.31.103):
docker swarm join --token SWMTKN-1-1xisofd4uy6tewx7mpbqze3njigm322pim1tm417fuyox0bxru-1hjpjgvm8dpewywk5l317fv4l 192.168.31.101:2377
查看集群状态:
[root@master ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
w9fd7zwk7etpciy7kjadnf4pd * master Ready Active Leader 20.10.9
of588eogih07hhjn3g6osmlvd node1 Ready Active 20.10.9
kh29koqeu72pke3djgfpxd67s node2 Ready Active 20.10.9
重新生成加入集群命令
也可以执行docker swarm join-token manager重新生成加入集群的语句
[root@master ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1xisofd4uy6tewx7mpbqze3njigm322pim1tm417fuyox0bxru-53xb57owgkndgtejnxe3nl094 192.168.31.101:2377
二、Swarm集群使用
一个简单的示例
docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13
create:创建实例
–replicas:设置启动容器数量
-p:端口映射
–name:服务命名
查看所有服务详情
docker service ls
查看nginx服务详情
docker service ps nginx
修改服务数量
docker service scale nginx=5
三、Swarm群集管理
Swarm群集高可用
使用docker node promote命令将node1、node2也提升为manager角色
[root@master ~]# docker node promote node1
Node node1 promoted to a manager in the swarm.
[root@master ~]# docker node promote node2
Node node2 promoted to a manager in the swarm.
[root@master ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
w9fd7zwk7etpciy7kjadnf4pd * master Ready Active Leader 20.10.9
of588eogih07hhjn3g6osmlvd node1 Ready Active Reachable 20.10.9
kh29koqeu72pke3djgfpxd67s node2 Ready Active Reachable 20.10.9
测试停止master节点关闭docker服务
[root@master ~]# systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
docker.socket
[root@master ~]# systemctl start docker
[root@master ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
w9fd7zwk7etpciy7kjadnf4pd * master Ready Active Reachable 20.10.9
of588eogih07hhjn3g6osmlvd node1 Ready Active Reachable 20.10.9
kh29koqeu72pke3djgfpxd67s node2 Ready Active Leader 20.10.9
发现主节点变成了node2节点,说明实现了高可用,即时节点挂掉也不会影响群集使用