背景
为什么要用Docker Swarm, 相比 Kubernetes 有什么好处
Docker Swarm可以看作是docker自带的一个简化版的Kubernetes, 拥有Kubernetes的基本功能如:
- 更新
 - 回滚
 - 动态扩容
 - 分布式部署
 
而 Docker Swarm 的优势在于:
Docker自带, 无需另外安装。学习成本低- 单机也能很好的使用,也可以很方便的进行实例扩容与设备扩容
 Swarm只有2层网络封装,而Kubernetes有5层网络封装Swarm本身占用的内存只有100M左右,而Kubernetes的简化版 k3s 也需要512M的内存空间,对小资源机器友好
Traefik 是什么, 为什么要使用它
Traefik 是一个反向代理软件,类似 Nginx但对于微服务有很好的优化。可以搭配各种分布式发现服务而无需另外配置。在本篇文章中我们会使用 Docker Provider 作为服务发现。
虽然 Docker Swarm 自带了http请求的分发,但是无法实现 sticky 功能(即同一用户的请求会分发到同一后端实例),因此需要Traefik 作为请求的中间件来分发请求
搭建 Docker Swarm 环境
Docker Swarm 环境非常好搭建,因为已经集成到Docker中了。我们安装好Docker以后就可以直接使用了
依赖:
- Docker 1.12+
 
1  | # 初始化swarm, 并将当前节点作为manager  | 
1  | # 或者使用--advertise-addr 和 --listen-addr参数来指定使用哪个IP作为沟通IP  | 
使用Docker快速搭建Traefik
1  | version: '3'  | 
api.insecure参数用于打开WEB UI. 可以访问127.0.0.1:8080/api/rawdata获取当前可以连接到的服务的相关信息providers.docker.endpoint指向docker的沟通端口。默认端口为2377providers.docker.swarmMode表示为swarm模式
创建测试服务
此处使用 whoami 镜像提供的HTTP服务用于打印出集群连接相关信息
将以下文件保存为docker-compose.yml
1  | version: '3'  | 
启动集群:
1  | docker stack deploy -c ./docker-compose.yml whoami  | 
测试命令:
1  | $ curl -vs -c cookie.txt -b cookie.txt -H "Host: whoami.docker.localhost" http://127.0.0.1  | 
注意需要带上 header Host 这样才能成功反向代理