使用docker swarm进行集群,并部署服务

环境准备

Linux虚拟机三台(使用的是centos7)

三台虚拟机安装好docker,swarm(这个就不介绍了,毕竟这是最基本的)

开始搭建

 

关闭所有主机的防火墙

systemctl stop firewalld

监听端口 

Swarm是通过监听2375端口进行通信的,所以在使用Swarm进行集群管理之前,需要设置一下2375端口的监听。所有主机节点docker开启2375监听,docker版本不同,配置方式不一样

vim  /lib/systemd/system/docker.service
在ExecStart加入-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

重启docker

systemctl daemon-reload    ##使配置文件生效
systemctl restart docker

初始化主节点

比如我有三台虚拟机,ip地址分别是172.20.10.6,172.20.10.7,172.20.10.8

由于我们用的不是云服务器,没有公共ip,所以,必须保证三台虚拟机在同一个网段,保证他们之间能够相互访问得到

可以试一下ping命令,看看有没有反应,这里我们选择172.20.10.6作为主节点manager/leader,拥有管理的权限

 docker swarm init --advertise-addr 172.20.10.6

 运行完会出现一个token

我们也可以使用docker swarm join-token worker来查找加入集群需要的token

docker swarm join-token worker

加入集群 

然后在另外两个虚拟机使用命令加入集群

docker swarm join --token 获取到的token 172.20.10.6:2377

运行命令,成功会提示:作为一个worker节点加入集群

查看集群中的节点

docker node ls

集群中运行服务

创建集群网络

集群里的服务器使用一种 overlay 类型的网络,我们可以创建一种这样的网络,然后在集群里运行服务的时候可以指定使用这个网络。在集群的 manager 上,执行:

docker network create --driver overlay skynet

运行服务

docker service create --name web --network skynet --publish 3000:3000 --replicas 1 ninghao/node

--name指定服务名称
--network指定网络
--publish指定端口映射,将容器的3000端口映射到本机的3000端口,前面的是主机的,后面的是容器的
--replicas指定运行几个容器

运行成功后,我们来看一下,使用命令docker service ls查看运行的服务

可以看到只有一个服务在运行,在浏览器访问三个虚拟机的3000端口,都会看到hello页面,使用的是同一个运行的容器

现在我们增加运行该服务的容器数量,提升为4,我们会看到有四个容器在运行这个服务

docker service scale web=4

现在在浏览器中输入不同虚拟机的3000端口,都会看到hello页面,但是其中的containerid 不一样

使用docker swarm进行集群,并部署服务_第1张图片

使用docker swarm进行集群,并部署服务_第2张图片

但是,这个所谓的集群并不是真正意义上的集群,还是要通过访问ip:端口来进行流量的分发

应该使用Nginx对这几台虚拟机进行端口转发

 

你可能感兴趣的:(docker,swarm)