docker中使用traefik作反向代理

拉取traefik镜像

docker镜像地址:https://hub.docker.com/_/traefik

docker pull traefik

创建traefik配置文件

traefik.yml

# Docker configuration backend
providers:
  docker:
    defaultRule: "Host(`{{ trimPrefix `/` .Name }}.your-domain`)"

# API and dashboard configuration
api:
  insecure: false
  dashboard: true

注:配置文件中的 your-domain 应替换成服务器的域名,前面那一串就是将被代理服务器名拼接成二级域名,当使用该二级域名访问时就会重定向到对应的服务器

启动traefik

docker run -d -p 8080:8080 -p 80:80 --name traefik -v /var/run/docker.sock:/var/run/docker.sock -v /home/hunt/Templates/traefik.yml:/etc/traefik/traefik.yml --network net1 -l "traefik.http.routers.dashboard.rule=Host(\`traefik.huntzou.com\`) && (PathPrefix(\`/api\`) || PathPrefix(\`/dashboard\`))" -l "traefik.http.routers.dashboard.service=api@internal" traefik

注:

  1. 也可以不挂载traefik.yml文件,在运行traefik之后使用docker cp将其复制到挂载的位置
  2. 挂载 docker.sock 目的是监听docker容器的变化,当有新的容器被创建时traefik就能自动监测到并创建代理规则。sock=socket
  3. 需将traefik和被代理服务器放在同一个network下
  4. 8080端口用于traefik的控制面板,80和443将用作web服务端口
  5. 启动命令中的两个 -l 参数是为了在安全模式下启动dashboard
  6. 由于linux命令行中的反引号有特殊意义,故这里都需要转义
  7. 关于安全模式下的dashboard配置较为复杂,详见:https://doc.traefik.io/traefik/operations/dashboard/

启动web服务

我这里使用两个nginx当作被代理服务器

sudo docker run -d --name nginx1 --network net1 nginx
sudo docker run -d --name nginx2 --network net1 nginx

打开traefik控制台页面就能看到其自动检测出了nginx,并根据其配置文件生成了二级域名映射。

去域名控制台添加两条A记录

测试

此时分别访问 http://nginx1.athe.top/ 和 http://nginx2.athe.top/ 就能成功访问到不同的被代理服务器

注:我已经修改了两个nginx的默认主页

https

详见 traefik教程

文档

https://doc.traefik.io/traefik/providers/docker/

Leave a Comment