traefik 是一个反向代理工具。可以作为网关使用,类似于nginx,但是多了很多更丰富的功能。
1 docker-compose
version: '3'services:traefik:container_name: traefik# The official v2 Traefik docker imageimage: traefik:v2.5# Enables the web UI and tells Traefik to listen to dockercommand: --api.insecure=true --providers.dockerports:# The HTTP port- "10181:80"# The Web UI (enabled by --api.insecure=true)- "10182:8080"expose:- "10181"- "10182"volumes:# So that Traefik can listen to the Docker events- /run/docker.sock:/var/run/docker.socknetworks:- mynetapp1:container_name: app1image: app1:v1ports:# The Web UI (enabled by --api.insecure=true)- "10183:3000"expose:- "10183"networks:- mynet# 重要: traefik 通过该label 来识别路由规则labels:# 重要: router.${服务名} 请正确配置- "traefik.http.routers.app1.rule=Host(`app1`)"app2:container_name: app2image: app2:v1ports:# The Web UI (enabled by --api.insecure=true)- "10184:3000"expose:- "10184"networks:- mynet# 重要: traefik 通过该label 来识别路由规则labels:# 重要: router.${服务名} 请正确配置- "traefik.http.routers.app2.rule=Host(`app2`)"networks:mynet:driver: bridge
在上面docker-compose 中,我们创建一个traefix 容器,并且创建了两个app。 用来测试traefix的各种路由规则。
app1 和app2 的逻辑一样。 只是启动的时候激活的配置文件不一样。来达到请求返回不同的appName
服务都跑起来之后
我们请求traefix 结果如下

可以发现,traefik 成功的代理了我们的请求。根据请求头Host 的不同,自动分发到不同的服务。
注意:
- traefik 默认是Host 路由, 如果没有配置label 则会默认是 “服务名-temp”
- 如果路由失败,调用超时,请docker inspect 查看 IpAddress 查看是否在同一个网段下面。使用同一个network 则不会出现该问题。
详细资料https://doc.traefik.io/traefik/routing/providers/docker/
