著者:三井 颯剛
SLPでは、Webページの公開などに使用しているサーバーを立て直す計画が進行中です。再建後のサーバーでは、「Traefik(トラフィック) 」というコンテナ環境向けのリバースプロキシソフトウエアを採用する予定です。今回は、Dockerでサーバーコンテナを稼働させて、それに対するアクセスをTraefikで制御する場合を例に、Traefikの利用方法について紹介します。
シェルスクリプトマガジン Vol.84は以下のリンク先でご購入できます。
図3 「docker-compose.yml」ファイルに記述する設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
services: reverse-proxy: image: traefik:latest restart: always ports: - "80:80" environment: - TZ=Asia/Tokyo volumes: - /var/run/docker.sock:/var/run/docker.sock command: - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" whoami: image: traefik/whoami labels: - "traefik.enable=true" - "traefik.http.routers.whoami.rule=PathPrefix(`/whoami`)" - "traefik.http.routers.whoami.entrypoints=web" |
図6 ダッシュボードを有効にする場合の「docker-compose.yml」ファイルの記述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
services: reverse-proxy: image: traefik:latest restart: always ports: - "80:80" - "8080:8080" environment: - TZ=Asia/Tokyo volumes: - /var/run/docker.sock:/var/run/docker.sock command: - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.dashboard.address=:8080" - "--api.dashboard=true" labels: - "traefik.enable=true" - "traefik.http.routers.api.entrypoints=dashboard" - "traefik.http.routers.api.rule=Host(`localhost`)" - "traefik.http.routers.api.service=api@internal" whoami: image: traefik/whoami labels: - "traefik.enable=true" - "traefik.http.routers.whoami.rule=PathPrefix(`/whoami`)" - "traefik.http.routers.whoami.entrypoints=web" |
図9 「traefik.yml」ファイルに記述する内容
1 2 3 4 5 6 7 8 9 10 |
providers: docker: exposedByDefault: false entryPoints: web: address: ":80" dashboard: address: ":8080" api: dashboard: true |
図10 設定を分離した場合の「docker-compose.yml」ファイルの記述例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
services: reverse-proxy: image: traefik:latest restart: always ports: - "80:80" - "8080:8080" environment: - TZ=Asia/Tokyo volumes: - /var/run/docker.sock:/var/run/docker.sock - ./traefik.yml:/etc/traefik/traefik.yml labels: - "traefik.enable=true" - "traefik.http.routers.api.entrypoints=dashboard" - "traefik.http.routers.api.rule=Host(`localhost`)" - "traefik.http.routers.api.service=api@internal" whoami: image: traefik/whoami labels: - "traefik.enable=true" - "traefik.http.routers.whoami.rule=PathPrefix(`/whoami`)" - "traefik.http.routers.whoami.entrypoints=web" - "traefik.http.services.myservice.loadbalancer.server.port=80" |