Docker-Swarm

什么是Docker-Swarm?

Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,它是将一群Docker宿主机变成一个单一的虚拟主机,和Compose一样,都是Docker官方容器编排项目,但不同的是,Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Swarm 则可以在多个服务器或主机上创建容器集群服务了

TOC

一、安装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节点,说明实现了高可用,即时节点挂掉也不会影响群集使用