Skip to content

快速参考

  • 由……维护
    Varnish Docker 社区

  • 何处获取帮助:
    Docker 社区 Slack、服务器故障、Unix & Linux 或 Stack Overflow

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

快速参考(续)

什么是 Varnish?

Varnish 是一种 HTTP 加速器,专为内容繁重的动态网站以及 API 而设计。与其他网络加速器(例如最初作为客户端缓存的 Squid,或主要作为源服务器的 Apache 和 nginx)相比,Varnish 被设计为 HTTP 加速器。与通常支持 FTP、SMTP 和其他网络协议的其他代理服务器不同,Varnish 仅专注于 HTTP。

wikipedia.org/wiki/Varnish(软件)

logo

如何使用此图像。

基本用法

使用 VARNISH_BACKEND_HOSTVARNISH_BACKEND_PORT

你只需要知道你的后端(Varnish 将加速的服务器)在哪里:

# we define VARNISH_BACKEND_HOST/VARNISH_BACKEND_PORT
# our workdir has to be mounted as tmpfs to avoid disk I/O,
# and we'll use port 8080 to talk to our container (internally listening on 80)
$ docker run \
    -e VARNISH_BACKEND_HOST=example.com -e VARNISH_BACKEND_PORT=80 \
    --tmpfs /var/lib/varnish/varnishd:exec \
    -p 8080:80 \
    varnish

从那里,你可以在浏览器中访问 localhost:8080 并看到 example.com 主页。

使用一个 VCL 文件

如果您已经有一个 VCL 文件,您可以直接将其挂载为 /etc/varnish/default.vcl

# we need the configuration file at /etc/varnish/default.vcl,
# our workdir has to be mounted as tmpfs to avoid disk I/O,
# and we'll use port 8080 to talk to our container (internally listening on 80)
$ docker run \
    -v /path/to/default.vcl:/etc/varnish/default.vcl:ro \
    --tmpfs /var/lib/varnish/varnishd:exec \
    -p 8080:80 \
    varnish

或者,一个简单的 Dockerfile 可用于生成包含必要的 default.vcl 的新图像:

FROM varnish

COPY default.vcl /etc/varnish/

将此文件放置在与你的 default.vcl 相同的目录中,运行 docker build -t my-varnish . ,然后启动你的容器:

$ docker --tmpfs /var/lib/varnish/varnishd:exec -p 8080:80 my-varnish

重新加载配置

这些镜像都附带 varnishreload,它允许你轻松更新正在运行的配置而无需重启容器(从而避免丢失缓存)。在最基本的情况下,你只需要这样:

# update the default.vcl in your container
docker cp new_default.vcl running_container:/etc/varnish/default.vcl
# run varnishreload
docker exec running_container varnishreload

请注意 varnishreload 也支持重新加载其他文件(不一定是 default.vcl )、标签( l )以及旧标签的垃圾回收( -m )等。要了解更多,请运行

docker run varnish varnishreload -h

额外配置

缓存大小(VARNISH_SIZE)

默认情况下,容器将使用 100MB 的缓存大小,这通常有点太小,但你可以通过 VARNISH_SIZE 环境变量快速设置它:

$ docker run --tmpfs /var/lib/varnish/varnishd:exec -p 8080:80 -e VARNISH_SIZE=2G varnish

监听端口(VARNISH_HTTP_PORT/VARNISH_PROXY_PORT)

Varnish 将在端口 80 上监听 HTTP 流量,这可以通过设置环境变量 VARNISH_HTTP_PORT 来覆盖。类似地,变量 VARNISH_PROXY_PORT (默认为 8443 )规定用于与 hitch 交互(巧合的是,hitch 也将 8443 作为默认值!)的 PROXY 协议的监听端口。

# instruct varnish to listening to port 7777 instead of 80
$ docker run --tmpfs /var/lib/varnish/varnishd:exec -p 8080:7777 -e VARNISH_HTTP_PORT=7777 varnish

额外参数

此外,你可以在 varnish 之后向 docker run 添加参数,如果第一个参数以 - 开头,整个列表将被附加到默认命令:

# extend the default keep period
$ docker run --tmpfs /var/lib/varnish/varnishd:exec -p 8080:80 -e VARNISH_SIZE=2G varnish -p default_keep=300

如果在 varnish 之后的你的第一个参数不以 - 开头,它将被解释为一个覆盖默认值的命令:

# show the command-line options
$ docker run varnish varnishd -?

# list parameters usable with -p
$ docker run varnish varnishd -x parameter

# run the server with your own parameters (don't forget -F to not daemonize)
$ docker run varnish varnishd -F -a :8080 -b 127.0.0.1:8181 -t 600 -p feature=+http2

vmods(自 7.1 起)

如上文所述,你可以使用 vmod_dynamic 进行后端解析。varnish-modules 集合也包含在镜像中。关于用法和语法的所有文档都可以在存储库的 src/目录中找到。

除此之外,镜像包含 install-vmod,这是一个在创建你自己的镜像时快速下载、编译和安装 vmod 的辅助脚本。注意,镜像将 ENV 变量 VMOD_DEPS 设置为进一步简化任务。

Debian(德班)

FROM varnish:7.1

# set the user to root, and install build dependencies
USER root
RUN set -e; \
    apt-get update; \
    apt-get -y install $VMOD_DEPS /pkgs/*.deb; \
    \
# install one, possibly multiple vmods
   install-vmod https://github.com/varnish/varnish-modules/releases/download/0.20.0/varnish-modules-0.20.0.tar.gz; \
    \
# clean up and set the user back to varnish
    apt-get -y purge --auto-remove $VMOD_DEPS varnish-dev; \
    rm -rf /var/lib/apt/lists/*
USER varnish

阿尔卑斯

FROM varnish:7.1-alpine

# install build dependencies
USER root
RUN set -e; \
    apk add --no-cache $VMOD_DEPS; \
    \
# install one, possibly multiple vmods
    install-vmod https://github.com/varnish/varnish-modules/releases/download/0.20.0/varnish-modules-0.20.0.tar.gz; \
    \
# clean up
    apk del --no-network $VMOD_DEPS
USER varnish

图像变体

varnish 图像有多种类型,每种都针对特定的用例而设计。

varnish:<version>

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

varnish:<version>-alpine

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

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

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

许可证

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

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

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

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