首先我们需要启动Traefik并且配置其启用Docker Backend
docker-compose.yml如下:
services:
reverse-proxy:
image: traefik # The official Traefik docker image
command: --docker # Enables the web UI and tells Træfik to listen to docker
ports:
- "80:80" # The HTTP port
- "8080:8080" # The Web UI (enabled by --api)
volumes:
- /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
我们看到需要挂载/var/run/docker.sock 并提供 --docker
command来启用这个功能。这样Traefik就可以发现并路由本机的docker containers了。
启动reverse-proxy
docker-compose up -d reverse-proxy
此时我们可以访问 localhost:8080 来查看Traefik UI, 80端口则留作反向代理。
我们使用官网案例中的image emilevauge/whoami 这是一个简单的http server访问其80端口会显示一些基本信息。在docker-compose.yml中添加whoami
whoami:
image: emilevauge/whoami
并启动docker-compose up -d whoami
此时打开Traefik页面就可以看到里面多了一个Backend
[backend-whoami-traefik]
Server: http://172.29.0.2:80
Weight: 1
以及一个指向这个backend的Frontend
[frontend-Host-whoami-traefik-0]
Route Rule: [Host:whoami.traefik.]
Entry Points: http
Backend: backend-whoami-traefik
这意味着Traefik已经生效了!
我们可以curl Traefik GateWay并提供Host就可以看到容器的response
curl -H Host:whoami.traefik. http://127.0.0.
>
Hostname: a1eab6e446fd
IP: 127.0.0.1
IP: 172.29.0.2
GET / HTTP/1.1
Host: whoami.traefik.
User-Agent: curl/7.54.0
...
当然因为DNS找不到 whoami.traefik. 如需直接访问我们可以将 127.0.0.1 whoami.traefik.
加入host然后访问测试。
值得注意的是,即使whoami使用的也是80端口,然而这里并没有冲突,原因是我们仅Expose 80并没有将端口映射到Host Network。
显然,虽然Traefik直接发现非常方便,但我们肯定希望可以控制Routing。对docker来说,这个实现起来非常方便,我们只需要在Container启动的时候添加相应labels即可override相应配置。详见backends/docker
修改docker-compose.yml
whoami:
image: emilevauge/whoami # A container that exposes an API to show its IP address
labels:
- "traefik.frontend.rule=Host:whoami.docker.localhost"
重新启动whoami,此时我们不需修改host就可以直接访问whoami.docker.localhost
了。
我们还可以在Traefik启动时添加 --docker.domain=docker.localhost 命令来直接设定default domain。
然后即可以通过 {containerName}.{configuredDomain}
或 {service}.{composeName}.{configuredDomain}
来访问container。