traefik 部署
# docker-compose.yml
services:
traefik:
image: traefik:latest
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--providers.docker.defaultRule=Host(`{{ .Name }}.localhost`)"
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
不暴露端口的话,默认是无法访问的,除非显式配置networks跟traefik的networks对齐。
应用发布
零配置发布
version: "3.8"
services:
my-app6:
image: nginx:alpine
ports:
- "0:80"
如果配置了默认不暴露service,就需要增加自定义label声明。
自定义配置域名
version: '3.8'
services:
my-app:
image: nginx:alpine
container_name: my-app-service
labels:
# 告诉 Traefik 接管这个容器
- "traefik.enable=true"
# 配置路由规则:访问 http://app.localhost 时转发到此容器
- "traefik.http.routers.my-app.rule=Host(`app.localhost`)"
- "traefik.http.routers.my-app.entrypoints=web"
# 告诉 Traefik 容器内部服务端口是 80(Nginx 默认端口)
- "traefik.http.services.my-app.loadbalancer.server.port=80"
networks:
- global_gateway
networks:
global_gateway:
external: true
收益
- 不用担心端口冲突了,对外暴露端口修改为0:80 即可 0表示主机的任意端口
- 可以使用域名访问 http://neo4j-neo4j.localhost 可以访问原来的 127.0.0.1:7474