version: "3.8"
services:
traefik:
image: "traefik:v2.4"
container_name: "traefik"
command:
#- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
whoami:
image: "traefik/whoami"
container_name: "simple-service"
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"
- "traefik.http.routers.whoami.entrypoints=web"
Code language: YAML (yaml)
공식 홈페이지의 Getting started 섹션에 docker-compose.yaml
파일이다.
처음에 의문이 들었는데 8080이 Traefik의 대쉬보드 포트이다.
위 설정만으로도 Traefik이 잘 서비스되고있는 것도 확인했고 이제 내가 운영하고 있는 wordpress 컨테이너 또는 다른 컨테이너를 연결할 차례다.
wordpress docker-compose 컨테이너 연결 & 도메인 설정
역방향 프록시로 Traefik에서 wordpress container로 어떻게 연결하는 것인가?
이것은 Traefik이 머신의 /var/run/docker.sock
을 사용할 수있게 해줬기 때문에 docker container들의 정보를 가져올 수 있다.
version: "3.8"
services:
wordpress:
env_file:
- ./.env
container_name: WP__${PROJECT_NAME}
# development image
image: ghcr.io/hansanghyeon/wordpress-php8.0-docker-xdebug3.0:1.0.0
restart: always
expose:
- 80
ports:
- 10000:80
environment:
WORDPRESS_DB_HOST: mariadb:3306
WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
volumes:
- ./.wordpress:/var/www/html
- ./Theme:/var/www/html/wp-content/themes/sage
- ./backup:/var/www/html/wp-content/ai1wm-backups
external_links:
- DB__wordpress:mariadb
labels:
- traefik.enable=true
- traefik.http.routers.hyeon.rule=Host(`hyeon.local`)
networks:
default:
external:
name: db_net
Code language: YAML (yaml)
이전과 다르게 labels
가 추가되었다.
이렇게 설정하면 Traefik에 htttp에 router로 등록이 완료되어있을 것이다.
이슈발생 🤯 “Gateway Timeout”
다른 레퍼런스를 따라하면서 틀린 곳 없이 설정했는데 왜 그럴까?
이 문제에 대한 이슈가 있었다.
https://github.com/traefik/traefik/issues/1254#issuecomment-299114960
두 컨테이너가 모두 속한 네트워크가 하나있어야 한다는 것이다.
...
labels:
...
- traefik.docker.network=proxy_net
Code language: YAML (yaml)
위처럼 어떤 네트워크에서 실행되는지 등록해 주면 된다고 한다.
나는 그냥 두개의 서비스가 동일한 네트워크를 가지면 될 것같다 생각했다.
version: "3.8"
services:
traefik:
image: "traefik:v2.4"
container_name: "traefik"
command:
#- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- 80:80
- 443:443
- 8080:8080
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
- db_net
whoami:
image: "traefik/whoami"
container_name: "simple-service"
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"
- "traefik.http.routers.whoami.entrypoints=web"
networks:
default:
driver: bridge
name: proxy_net
# db_net이라는 db 네트워크를 등록 여기에 모든 워드프레스 컨테이너가 있다
db_net:
external:
name: db_net
Code language: YAML (yaml)