シェルスクリプトマガジン

香川大学SLPからお届け!(Vol.84掲載)

著者:三井 颯剛

SLPでは、Webページの公開などに使用しているサーバーを立て直す計画が進行中です。再建後のサーバーでは、「Traefik(トラフィック) 」というコンテナ環境向けのリバースプロキシソフトウエアを採用する予定です。今回は、Dockerでサーバーコンテナを稼働させて、それに対するアクセスをTraefikで制御する場合を例に、Traefikの利用方法について紹介します。

シェルスクリプトマガジン Vol.84は以下のリンク先でご購入できます。

図3 「docker-compose.yml」ファイルに記述する設定

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」ファイルの記述

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」ファイルに記述する内容

providers:
  docker:
    exposedByDefault: false
entryPoints:
  web:
    address: ":80"
  dashboard:
    address: ":8080"
api:
  dashboard: true

図10 設定を分離した場合の「docker-compose.yml」ファイルの記述例

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"