swarm 本质上就是:容器部署的集群方案。
swarm的体系中有一个主node,我们通过这个主节点可以自动分发app到各个子node上面运行,同时管理各个node的上线和下线。在swarm体系中node只分为manager和worker两种,只有一个node是manager的。
演示例子
- 创建两个 machine,dev-1和dev-2
docker-machine create --driver virtualbox dev-1
- 切换 default machine
docker-machine ssh default
- 创建default为swarm manager
docker swarm init -advertise-addr 192.168.99.100
- 分别添加dev-1和dev-2位从节点
docker-machine ssh dev-1 "docker swarm join --token SWMTKN-1-411qbt7obs3fmv0leqg2xrywd85uyt5thc6nrysx3m04mtxjc0-9et3kwcgaqup8w1a7qm0z1xpo 192.168.99.100:2377"
docker-machine ssh dev-2 "docker swarm join --token SWMTKN-1-411qbt7obs3fmv0leqg2xrywd85uyt5thc6nrysx3m04mtxjc0-9et3kwcgaqup8w1a7qm0z1xpo 192.168.99.100:2377"
- 可以查看当前swarm的所有节点
docker node ls
使用training/webapp作为测试例子,这是一个web应用,http访问显示“hello world”
- 配置compose.yml文件,“replicas: 4”的意思是启动 4 个服务
version: '3'
services:
training:
image: training/webapp
deploy:
replicas: 4
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "5000:5000"
networks:
- webnet
networks:
webnet:
- 运行docker stack deploy进行发布
- 查看运行状态,启动了4个服务
- 我们去dev-2机器上验证是否服务是否正常
- 访问网页请求,如下“hello world!”
swarm 特点
断点分发,自启动
可以很清晰看到4个服务启动在不同的node上,当任意一个node出现意外离线,swarm会自动将该节点上的服务启动在同一个swarm的其他node上。
移除swarm中dev-1的worker测试:
docker-machine ssh dev-1 "docker swarm leave --force"
节点请求路由,随机分发
swarm内部有一个随机的请求分发策略,官网看到是随机路由,可不可以配置这块还不能确定。
收藏链接
作者:Owen Jia
关注他的博客 Owen Blog,有更多关于docker的文章。