使用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 不一样
但是,这个所谓的集群并不是真正意义上的集群,还是要通过访问ip:端口来进行流量的分发
应该使用Nginx对这几台虚拟机进行端口转发
还没有评论,来说两句吧...