初始化集群
准备了对应的机器(两个虚拟机),基本信息如下
IP | 主机名 | 备注 |
---|---|---|
192.168.1.8 | ubuntu-1 | 主 |
192.168.1.5 | ubuntu-1 | 从 |
注意:最好保持每个节点的docker版本号为最新且是相同的
在主节点(manager)上执行
root@ubuntu:/home/wangxc# docker swarm init --advertise-addr 192.168.1.8
结果
Swarm initialized: current node (oqela4wtpa9m7e8a6zi9k9rbl) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-03md8tqw24sd0tbxkyqxmiay5nixniax9c301f49qjorhsj069-44eeph3lldj3lopzk7tiiv1ve 192.168.1.8:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
然后在其他子节点执行
docker swarm join --token SWMTKN-1-03md8tqw24sd0tbxkyqxmiay5nixniax9c301f49qjorhsj069-44eeph3lldj3lopzk7tiiv1ve 192.168.1.8:2377
注意端口号是否开放,可以把防火墙全部关掉,正常的结果如下
This node joined a swarm as a worker.
说明两个节点已经建立关系,而且manager为192.168.1.8,我们在主节点输入命令
docker node ls
就能看到所有的节点信息
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
x2n8p4qly9xkhpul49b96bx60 * ubuntu-1 Ready Active Leader 18.06.1-ce
b0p8o0vee21pf9nijcvoy0g72 ubuntu-2 Ready Active 18.06.1-ce
带星号的额就是主节点了,很方便看。
部署
我事先准备了一个镜像,一个简单的python flask 服务,在指定镜像的时候,最好把repo的地址写上,因为每个节点不一定有该镜像,需要到指定的repo去pull,如果不指定repo的话,有时可能会失败
docker service create --replicas 5 --name hellos vector4wang/python-flask
很好理解docker service create
等价于 docker run
,replicas
就是部署几个服务,等待部署成功,如下
uo3u4w6zxglgxjo1i7njxaqru
overall progress: 5 out of 5 tasks
1/5: running [==================================================>]
2/5: running [==================================================>]
3/5: running [==================================================>]
4/5: running [==================================================>]
5/5: running [==================================================>]
verify: Service converged
忘记做端口映射,我们做一下调整
docker service update --publish-add published=5000,target=5000 hellos
理解下。
通过执行docker service ps hellos
来查看每个节点的服务数和运行情况,如下
我们可以看到刚刚的update就是把之前服务杀掉,然后重亲启动,两个节点均有部署而且运行着该服务,我们可以随便使用
docker stop [container id]
来杀死一个服务,但是swarm会自动启动一个。
测试
我们通过查看日志来测试请求是否会落在这五个节点上,我们请求主节点对应ip服务5次
docker service logs -f hellos
结果很巧,正好落在五个节点上如下
hellos.3.jvtq4su8blia@ubuntu-1 | 10.255.0.2 - - [20/Jan/2019 15:27:15] "GET / HTTP/1.1" 200 -
hellos.5.atflo3ownjb7@ubuntu-2 | 10.255.0.2 - - [20/Jan/2019 15:27:16] "GET / HTTP/1.1" 200 -
hellos.4.vyn5bpypjvm7@ubuntu-2 | 10.255.0.2 - - [20/Jan/2019 15:27:18] "GET / HTTP/1.1" 200 -
hellos.1.m67symamsj02@ubuntu-2 | 10.255.0.2 - - [20/Jan/2019 15:27:19] "GET / HTTP/1.1" 200 -
hellos.2.srhlzn6trgri@ubuntu-1 | 10.255.0.2 - - [20/Jan/2019 15:27:19] "GET / HTTP/1.1" 200 -
停止服务
我们在主机点使用下面命令和停止对应服务
docker service rm hellos
或
docker service scale hellos=0
通过swarm我们可以再多个节点很容易的去部署和简单管理服务。
暂时的完结
最近也是公司准备用容器化来部署服务,所以我就把Docker以前没有玩到的地方玩了下,到此,Docker的介绍、使用、编排、集群化部署等就介绍完了,如果后期应用于工作上,可能会有更深入的见解与博文。希望大家持续关注哈~
学习Docker之Docker初体验---SpringBoot集成Docker的部署、发布与应用
学习Docker之Docker、容器和镜像的简介和常用命令
学习Docker之10张图带你深入理解Docker容器和镜像
学习Docker之Dockerfile的命令
学习Docker之使用docker-compose编配一整套服务
学习Docker之使用Docker构建服务之部署和备份jekyll网站
学习Docker之使用Docker Swarm快速搭建与部署你的服务集群
网友评论