作者: wavesheep<wavesheep0216@gmail.com>
版权协议: CC 4.0 BY-SA
转载请保留链接
前言
最近,我将我的个人项目的服务迁移至了Docker Swarm。经过一番比较我决定使用Traefik2.x作为我的反向代理,负载均衡工具。由于目前主流docker集群是k8s, 导致找不到太多的资料,我在这上面花费了颇多时间,因此我决定写下这篇教程帮助大家快速部署。
这篇教程不会讲解docker swarm的部署,我的假设是你有一个正在工作的docker swarm集群。
网络配置
创建配置文件之前的第一件事是创建一个docker swarm overlay网络,Traefik将使用该网络来监视要公开的服务。命令如下:
docker network create -d overlay traefik-net
安装Traefik
现在,我们创建docker compose file文件来安装Traefik,下面是我认为部署有效Traefik实例所需的最小配置。
version: '3'
services:
reverse-proxy:
image: traefik:v2.3.1
command:
# 启用swarm模式支持
- "--providers.docker.swarmMode=true"
# 默认不公开容器
- "--providers.docker.exposedbydefault=false"
# 为traefik-net网络启用代理
- "--providers.docker.network=traefik-net"
# 创建名为`web`的入口点,并为其暴露于80端口。该入口点会指示其它容器
# 在哪个端口公开,详情见下文应用部署示例
- "--entrypoints.web.address=:80"
ports:
- 80:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- traefik-net
deploy:
placement:
constraints:
- node.role == manager
networks:
traefik-net:
external: true
参考命令:
docker stack deploy traefik -c traefik.yml
应用部署示例
下面我以tutum/hello-world作为部署示例,部署成功将会在在页面上显示“hello world”。配置如下:
version: '3'
services:
helloworld