traefik 是一个反向代理工具。可以作为网关使用,类似于nginx,但是多了很多更丰富的功能。

1 docker-compose

  1. version: '3'
  2. services:
  3. traefik:
  4. container_name: traefik
  5. # The official v2 Traefik docker image
  6. image: traefik:v2.5
  7. # Enables the web UI and tells Traefik to listen to docker
  8. command: --api.insecure=true --providers.docker
  9. ports:
  10. # The HTTP port
  11. - "10181:80"
  12. # The Web UI (enabled by --api.insecure=true)
  13. - "10182:8080"
  14. expose:
  15. - "10181"
  16. - "10182"
  17. volumes:
  18. # So that Traefik can listen to the Docker events
  19. - /run/docker.sock:/var/run/docker.sock
  20. networks:
  21. - mynet
  22. app1:
  23. container_name: app1
  24. image: app1:v1
  25. ports:
  26. # The Web UI (enabled by --api.insecure=true)
  27. - "10183:3000"
  28. expose:
  29. - "10183"
  30. networks:
  31. - mynet
  32. # 重要: traefik 通过该label 来识别路由规则
  33. labels:
  34. # 重要: router.${服务名} 请正确配置
  35. - "traefik.http.routers.app1.rule=Host(`app1`)"
  36. app2:
  37. container_name: app2
  38. image: app2:v1
  39. ports:
  40. # The Web UI (enabled by --api.insecure=true)
  41. - "10184:3000"
  42. expose:
  43. - "10184"
  44. networks:
  45. - mynet
  46. # 重要: traefik 通过该label 来识别路由规则
  47. labels:
  48. # 重要: router.${服务名} 请正确配置
  49. - "traefik.http.routers.app2.rule=Host(`app2`)"
  50. networks:
  51. mynet:
  52. driver: bridge

在上面docker-compose 中,我们创建一个traefix 容器,并且创建了两个app。 用来测试traefix的各种路由规则。
app1 和app2 的逻辑一样。 只是启动的时候激活的配置文件不一样。来达到请求返回不同的appName
image.png
服务都跑起来之后
我们请求traefix 结果如下
image.png
image.png

可以发现,traefik 成功的代理了我们的请求。根据请求头Host 的不同,自动分发到不同的服务。

注意:

  1. traefik 默认是Host 路由, 如果没有配置label 则会默认是 “服务名-temp”
  2. 如果路由失败,调用超时,请docker inspect 查看 IpAddress 查看是否在同一个网段下面。使用同一个network 则不会出现该问题。

详细资料https://doc.traefik.io/traefik/routing/providers/docker/