使用 Docker 安裝與設定 Traefik
我們將使用 Docker Compose 來安裝並啟動一個最基礎的 Traefik 實例。這將作為後續所有範例的基礎。
前置準備
請確保你的開發環境已經安裝了:
- Docker Engine: 版本 20.10+
- Docker Compose: 版本 1.29+ (或是 Docker Desktop 內建的
docker composev2)
你可以透過以下指令檢查:
docker --version
docker compose version
建立專案目錄
首先,在你的電腦上建立一個新的目錄,例如 traefik-lab,並進入該目錄:
mkdir traefik-lab
cd traefik-lab
建立 docker-compose.yml
在目錄中建立一個名為 docker-compose.yml 的檔案,內容如下:
version: '3'
services:
# Traefik Reverse Broker
traefik:
image: traefik:v3.0
container_name: traefik
# 啟用 Web UI 並設定 Docker Provider
command:
- '--api.insecure=true' # 開發環境使用,啟用 Dashboard (不安全模式)
- '--providers.docker=true' # 啟用 Docker Provider
- '--providers.docker.exposedbydefault=false' # 預設不暴露所有容器
- '--entrypoints.web.address=:80' # 定義 EntryPoint: web 監聽 80 port
ports:
- '80:80' # HTTP Port
- '8080:8080' # Dashboard Port (Web UI)
volumes:
# 重要:讓 Traefik 能夠監聽 Docker Daemon 的事件
- /var/run/docker.sock:/var/run/docker.sock:ro
# 測試用的 Web 服務 (whoami)
whoami:
image: traefik/whoami
container_name: simple-service
labels:
- 'traefik.enable=true' # 告訴 Traefik 這個容器需要被代理
- 'traefik.http.routers.whoami.rule=Host(`whoami.localhost`)' # 路由規則
- 'traefik.http.routers.whoami.entrypoints=web' # 指定使用 web EntryPoint
設定檔解析
讓我們逐行解釋這個 docker-compose.yml 的關鍵部分:
- image: traefik:v3.0: 使用官方 Traefik v3 映像檔。
- command:
--api.insecure=true: 啟用 Web Dashboard。注意:這會開啟 8080 port 且完全沒有密碼保護,僅限開發環境使用。--providers.docker=true: 告訴 Traefik 監聽 Docker 事件。--providers.docker.exposedbydefault=false: 安全性設定。這表示只有當容器有明確加上traefik.enable=true的 Label 時,Traefik 才會處理它。如果不設為 false,Traefik 會嘗試代理所有的容器,這可能會暴露不該暴露的服務 (如資料庫)。--entrypoints.web.address=:80: 定義一個名為web的進入點,監聽 TCP 80 port。
- ports:
80:80: 將主機的 80 port 對應到容器的 80 port (web)。8080:8080: 將主機的 8080 port 對應到容器的 8080 port (dashboard)。
- volumes:
/var/run/docker.sock:/var/run/docker.sock:ro: 這是 Docker Provider 運作的關鍵。Traefik 需要存取這個 Socket 檔案才能與 Docker Daemon 溝通,獲取容器的資訊。:ro表示唯讀 (Read-only),增加安全性。
啟動服務
在終端機執行以下指令啟動服務:
docker compose up -d
Traefik 應該會很快啟動完成。你可以用 docker compose ps 確認狀態。
驗證安裝
1. 存取 Dashboard
打開瀏覽器,輸入 http://localhost:8080。你應該會看到 Traefik 的 Dashboard 介面。這證明 Traefik 已經成功啟動並在運行中。
2. 存取測試服務 (whoami)
我們在 whoami 服務上設定了 Host(`whoami.localhost`) 的規則。
打開瀏覽器或使用 curl 測試:
curl -H "Host: whoami.localhost" http://localhost
或是直接在瀏覽器輸入 http://whoami.localhost (大部分現代瀏覽器和 OS 都會將 *.localhost 解析為 127.0.0.1)。
你應該會看到類似這樣的輸出:
Hostname: 6e0d37e6f6b5
IP: 127.0.0.1
IP: 172.19.0.3
RemoteAddr: 172.19.0.2:41652
GET / HTTP/1.1
Host: whoami.localhost
User-Agent: curl/7.64.1
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 172.19.0.1
X-Forwarded-Host: whoami.localhost
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: 0d6d5c6f3b5a
X-Real-Ip: 172.19.0.1
這代表你的請求已經成功:
- 到達 Traefik (:80)。
- Traefik 根據 Host Header (
whoami.localhost) 匹配到了路由規則。 - Traefik 將請求轉送給了
whoami容器。 whoami容器回應了它的內部資訊。
靜態配置:Command vs File
在上面的範例中,我們使用 Command Line Arguments (CLI 參數) 來設定 Traefik 的靜態配置 (Static Configuration)。這是最簡單快速的方法。
但在生產環境中,設定可能會變得很複雜。這時我們會傾向使用一個獨立的設定檔 traefik.yml。
如果要改用檔案配置,你需要:
- 建立
traefik.yml。 - 將
command區塊移除。 - 將
traefik.yml掛載到容器內的/etc/traefik/traefik.yml。
之後的章節,為了教學方便,我們將主要使用 CLI 參數方式,但在進階設定章節會介紹如何遷移到設定檔。