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 上运行。

广告

© . All rights reserved.