Skip to content

快速参考

  • 维护者:
    Docker 社区

  • 获取帮助的途径:
    Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow

支持的标签和相应的 Dockerfile 链接

快速参考(续)

什么是 HAProxy?

HAProxy 是一种免费的开源高可用性解决方案,通过在多个服务器之间分配请求,为基于 TCP 和 HTTP 的应用程序提供负载均衡和代理。它是用 C 语言编写的,以快速高效(在处理器和内存使用方面)而闻名。

wikipedia.org/wiki/HAProxy

logo

如何使用此图像

由于没有两个 HAProxy 用户可能会完全相同地配置它,因此此映像没有任何默认配置。

请参考上游关于根据您的需求配置 HAProxy 的出色(和全面)文档。

也值得从上游检出 examples/ 目录。

创建一个 Dockerfile

FROM haproxy:2.3
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

构建容器

$ docker build -t my-haproxy .

测试配置文件

$ docker run -it --rm --name haproxy-syntax-check my-haproxy haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg

运行容器

$ docker run -d --name my-running-haproxy --sysctl net.ipv4.ip_unprivileged_port_start=0 my-haproxy

您需要 4.11 或更高版本的内核才能使用 --sysctl net.ipv4.ip_unprivileged_port_start=0 ,您可能需要通过指定-p 选项将 HAProxy 正在侦听的端口发布到主机,例如-p 8080:80 将容器主机上的 8080 端口发布到容器中的 80 端口。确保您使用的端口是空闲的。

注意:2.4+ 版本的容器将默认以 USER haproxy 运行(因此上面是 --sysctl net.ipv4.ip_unprivileged_port_start=0 ),但由于兼容性原因,旧版本仍默认为 root ;如果您想在旧版本中以非 root 身份运行,请使用 --user haproxy (或任何其他 UID)。

直接通过绑定挂载

$ docker run -d --name my-running-haproxy -v /path/to/etc/haproxy:/usr/local/etc/haproxy:ro --sysctl net.ipv4.ip_unprivileged_port_start=0 haproxy:2.3

请注意,您的主机的 /path/to/etc/haproxy 文件夹中应填充一个名为 haproxy.cfg 的文件。如果此配置文件引用该文件夹中的任何其他文件,则应确保它们也存在(例如,模板文件,如 400.http404.http 等)。但是,许多最小配置不需要任何支持文件。

重新加载配置

如果您使用绑定挂载来配置并编辑了 haproxy.cfg 文件,则可以通过向容器发送 SIGHUP 来使用 HAProxy 的优雅重新加载功能:

$ docker kill -s HUP my-running-haproxy

映像中的入口点脚本检查是否正在运行命令 haproxy ,并将其替换为来自 HAProxy 上游的 haproxy-systemd-wrapper ,该上游负责信号处理以进行优雅的重新加载。在幕后,这使用了 haproxy-sf 选项,因此“在高负载期间,可能会注意到几次连接失败,每个窗口都有几毫秒的时间”(请参阅停止和重新启动 HAProxy)。

图像变体

haproxy 图像有多种类型,每种都针对特定的用例进行了设计。

haproxy:<version>

这是默认的镜像。如果您不确定自己的需求是什么,您可能想要使用这个。它被设计为既可以用作一次性容器(挂载您的源代码并启动容器以启动您的应用程序),也可以用作构建其他镜像的基础。

其中一些标签可能有像 bookworm 或 bullseye 这样的名称。这些是 Debian 发行版的套件代号,表明该映像基于哪个发行版。如果您的映像需要安装除映像附带的软件包之外的任何其他软件包,您可能需要明确指定其中一个,以在有新的 Debian 发行版时最大程度地减少损坏。

haproxy:<version>-alpine

该镜像基于流行的 Alpine Linux 项目,可在 alpine 官方镜像中使用。Alpine Linux 比大多数发行版基础镜像(约 5MB)小得多,因此通常会生成更精简的镜像。

当您主要关注最终图像大小尽可能小时,此变体很有用。需要注意的主要警告是,它确实使用 musl libc 而不是 glibc 等,因此软件通常会根据其 libc 要求/假设的深度遇到问题。有关可能出现的问题以及使用基于 Alpine 的映像的一些优缺点比较的更多讨论,请参阅此 Hacker News 评论线程。

为了最小化镜像大小,在基于 Alpine 的镜像中包含额外的相关工具(如 gitbash )是不常见的。使用此镜像作为基础,在您自己的 Dockerfile 中添加您需要的东西(如果您不熟悉如何安装软件包,请参阅 alpine 镜像描述中的示例)。

许可证

查看此映像中包含的软件的许可证信息。

与所有 Docker 镜像一样,这些镜像可能还包含其他软件,这些软件可能受其他许可证的约束(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。

一些能够自动检测到的额外许可证信息可能会在 repo-info 存储库的 haproxy/ 目录中找到。

对于任何预构建的映像使用,映像用户有责任确保对此映像的任何使用都符合其中包含的所有软件的任何相关许可证。