Docker - 配置 Traefik



Traefik 是一款高階開源的反向代理工具。它也可以用作 HTTP 請求的負載均衡器。由於它可以動態配置且易於管理,因此在類似工具中很受歡迎。它與 Docker 和 Kubernetes 協同工作良好。它提供簡單的流量路由方法,自動提供 SSL/TLS 證書,並建立設計精美的儀表板。

Docker 是一種強大的工具,可用於容器化 Traefik 反向代理。它有助於管理和部署此反向代理工具。在本章中,讓我們學習如何透過簡單易懂的步驟將 Traefik 容器化。

將 Traefik 容器化的先決條件

在深入研究如何在 Docker 中設定 Traefik 之前,以下概念需要複習:

  • Docker 基礎知識 - 必須瞭解 Docker 術語,例如容器、映象和 Docker 檔案。
  • Postgres 基礎知識 - 瞭解 Traefik 及其負載均衡和反向代理流程的工作原理。
  • Docker 安裝 - 確保 Docker 正在執行。如果您的系統上尚未安裝,您可以參考Docker 官方網站
  • 文字編輯器 - 請記住,在系統中預先開啟文字編輯器將在終端中鍵入複雜命令時使您的生活更輕鬆。
  • CLI(命令列介面) - 您必須能夠舒適地處理終端中的 CLI 命令。

配置 Traefik 的步驟

在本節中,讓我們逐步瞭解如何配置 Traefik:

步驟 1:從官方 Hub 拉取 Traefik 映象

第一步是從 Docker 網站拉取官方 Traefik 映象。這可以透過開啟終端並執行以下命令來完成:

$ docker pull traefik

此命令會將 Traefik 的最新映象拉取到您的本地環境。

Pull the Latest Image of Traefik

步驟 2:為 Traefik 建立目錄

讓我們從為 Traefik 設定建立目錄開始。

$ mkdir traefik

步驟 3:建立 Traefik 配置檔案

現在是時候建立一個 Traefik 配置檔案了,它將是一個 YAML 檔案:

$ echo > traefik/traefik.yml

traefik.yaml 的內容如下:

api:
   dashboard: true # Optional for enabling web dashboard
   insecure: true # Optional to enter dashboard without authentication
   debug: false # Optional to enable debug logs
entryPoints:
   web:
   address: ":80"
 # Optional if need to use HTTPS instead of HTTP
 #    http:
 #    redirections:
 #       entryPoint:
 #          to: websecure
 #          scheme: https
   websecure:
      address: ":443"
serversTransport:
   insecureSkipVerify: true
providers:
   docker:
      endpoint: "unix:///var/run/docker.sock"
      exposedByDefault: false
      network: proxy # Optional to only use the proxy network of Docker.
certificatesResolvers:
   letencrypt:
      acme:
         email: <youremail>@email.com
         storage: /certs/acme.json
         # caServer: https://acme-v02.api.letsencrypt.org/directory # prod (default)
         caServer: https://acme-staging-v02.api.letsencrypt.org/directory # staging
         httpChallenge:
            entryPoint: web

步驟 4:為 Traefik 建立 Docker Compose 檔案

現在讓我們建立 docker-compose.yml 檔案。其內容如下所示:

services:
   traefik:
      image: traefik:v3.0
      container_name: traefik
      restart: unless-stopped
      security_opt:
         - no-new-privileges:true
      environment:
         - TZ=Europe/Paris # Change this as per your timezone 
      networks:
         - frontend
      ports:
         - 80:80 # HTTP entry points
         - 443:443 # HTTPS entry points
         - 8080:8080 # Dashboard Wen=b GUI
      volumes:
         - /var/run/docker.sock:/var/run/docker.sock:ro # socket for the Docker to watch Traefik
         - ./traefik.yml:/traefik.yml:ro # Traefik configuration file
         - traefik-certs:/certs # Docker volume to store certificates and acme files
volumes:
   traefik-certs:
      name: traefik-certs

networks:
   frontend:
      driver: bridge

步驟 5:建立 acme.json 檔案

現在讓我們建立 acme.json 檔案,該檔案用於儲存使用者許可權和 SSL 證書。

{
   "email": "your@email.com",
   "storage": "acme/",
   "ca": "https://acme-v02.api.letsencrypt.org",
   "dns": {
      "provider": "cloudflare"
   }
}

步驟 6:啟動容器

現在配置設定已完成,我們準備使用以下命令在 Docker 中執行容器:

$ docker compose -f docker-compose.yml up -d

讓我們詳細瞭解一下該命令:

  • docker compose - 用於使用 docker-compose.yml 檔案執行包含多個容器的 Docker 應用程式。
  • -f - 此標誌指示檔案路徑,在我們的例子中,檔名是 traefik 目錄中的 docker-compose.yml。
  • up - 此命令指示 Docker 啟動 docker compose 檔案中存在的服務。
  • -d - 此標誌表示分離模式。
Start the Traefik Container

步驟 7:為 Traefik 配置您的服務

讓我們更新配置以使用 Traefik 作為反向代理。這可以透過在單獨的目錄中為 Web 服務建立 docker-compose.yaml 檔案來完成,如下所示:

$ mkdir webapp
$ cd webapp
$ touch docker-compose.yml

services:
   webapp:
      image: traefik/webapp
      networks:
         - web
      labels:
         - "traefik.enable=true"
         - "traefik.http.routers.webapp.rule=Host(`yourdomain.com`)"
         - "traefik.http.services.webapp.loadbalancer.server.port=80"
         - "traefik.http.routers.webapp.entrypoints=web,websecure"
         - "traefik.http.routers.webapp.tls=true"
         - "traefik.http.routers.webapp.tls.certresolver=http"

networks:
   web:
      external: true

讓我們瞭解一下上面使用的配置資訊:

  • traefik.enable=true - 此標籤指示 Traefik 正確管理服務。
  • traefik.http.routers.webapp.rule - 這指定了用於執行路由的域。
  • traefik.http.services.webapp.loadbalancer.server.port - 此標籤用於對映容器埠。
  • traefik.http.routers.webapp.entrypoints - 此標籤提供有關要使用的入口點的資訊。
  • traefik.http.routers.webapp.tls=true - 此標籤啟用 HTTPS 並自動處理證書。

您可以使用以下命令執行 Web 應用程式的 docker compose 檔案:

$ docker compose -f webapp/docker-compose.yml up -d

步驟 8:檢查設定是否正常工作

現在容器已啟動並執行。我們可以訪問以下 URL:http://<Server IP>:8080。

注意 - 由於您在自己的機器上執行,因此您可以直接用 localhost 或 127.0.0.1 替換 <Server IP>。

上述 URL 的登入頁面如下所示:

Check Whether Setup is Working Properly

結論

在本章中,我們討論瞭如何使用 Docker 將 Traefik 容器化。Traefik 用於處理網路流量以及管理 TLS/SSL 證書。此設定易於處理,因為它在不同的環境中是可移植且一致的,並且您可以輕鬆地啟動並執行它。此設定可以與其他基於 Docker 的系統無縫整合,並根據需要與他人共享。

使用 Docker 將 Traefik 容器化的常見問題

在本節中,我們收集了一組關於使用 Docker 將 Traefik 容器化的常見問題:

1. 如何在 Docker 中升級 Traefik 版本?

我們可以透過使用 Docker exec 命令連線到容器的 shell 並手動更新版本來升級 Docker 中的 Traefik 版本。我們還可以使用命令“docker pull traefik”拉取 Traefik 的最新映象。

此外,如果需要,可以更新“docker-compose.yml”檔案。如果進行了任何更新,請不要忘記使用命令“docker-compose up -d”重新啟動容器。

2. 如何在 Docker 中排查與 Traefik 相關的錯誤?

要檢查 Traefik 相關命令執行的任何階段是否發生任何錯誤,您可以使用日誌。

要檢查與 Traefik 相關的日誌,請使用命令“docker logs traefik”。為避免 Docker 中與 Traefik 執行相關的錯誤,其他服務不應在埠 443 或 80 上執行。

廣告