- 文档首页
镜像仓库
镜像仓库 CR
最佳实践
镜像分发加速
基于 Zstd 压缩算法的容器镜像分发和启动加速
镜像分发加速
基于 Zstd 压缩算法的容器镜像分发和启动加速
基于 Zstd 压缩算法的容器镜像分发和启动加速
容器镜像的拉取和解压速度是影响容器启动时间的关键因素之一。传统的容器镜像通常使用 gzip 压缩,但 zstd(Zstandard) 作为一种高效的压缩算法,能在压缩比和速度上实现更好的平衡,从而优化镜像传输和启动流程。
zstd 是由 Meta 开发的压缩算法,其公布的 测试结果 表明,zstd 可以实现比 gzip 压缩算法更高的压缩率和更快的解压速度。 - 更快的解压速度:zstd 的解压速度显著快于 gzip(通常为 5-10 倍),尤其在处理大尺寸镜像时优势明显。非常适应于解决现有 AI 模型镜像尺寸偏大的问题。
- 更高的压缩比:在相同压缩级别下,zstd 可提供比 gzip 更高的压缩比(例如默认压缩级别 -3 时,压缩比接近 gzip 的 -6 级别,但速度更快),从而减少镜像在传输过程中的数据量,降低网络延迟。
- 无明显改造复杂度:仅需在镜像打包时将压缩格式指定为 zstd,使用火山容器服务及镜像仓库推送拉取镜像时默认支持该格式。
- 大尺寸镜像拉取,如启动 AI服务(VLLM,SGlang 开源镜像或自有的大尺寸镜像)。
第一步:构建 zstd 格式镜像并推送至镜像仓库
说明
构建容器镜像的工具有很多,例如 Docker Build、Buildkit 和 Buildah 等。本文仅提供两种构建方式,如使用其他构建工具,请参考对应工具说明文档。
【推荐】方式一:使用火山引擎持续交付流水线,一站式构建 zstd 压缩的镜像
- 在持续交付控制台创建一条镜像构建的流水线,并将镜像的格式设置为 zstd。
- 创建或编辑流水线时,在 流程编排 页签,单击 添加任务,弹出 添加任务 抽屉。任务模板选择 镜像构建推送至镜像仓库服务。
-
- 在流水线运行详情页查看日志,可以发现,镜像构建时将压缩格式指定为 zstd,并正常上传到火山镜像仓库中。
-
- 方式二:使用 docker+buildkit 构建 zstd 压缩容器镜像
- Buildkit 是独立的容器镜像构建工具,能在 Linux 机器或容器环境中运行。我们可以通过 Docker Buildx 插件(Docker CLI 插件)方便地与 Buildkit 交互。通常来说,Docker Desktop 已预装该插件;若使用 Linux 主机则需手动安装。安装完成后,就能使用构建命令构建 zstd 压缩格式的镜像。参考命令如下:
- 创建 BuildKit 构建实例并切换到构建实例中。
$ docker buildx create \
--driver docker-container \
--driver-opt image=moby/buildkit:v0.10.3
$ docker buildx use zstd-builder
- --name zstd-builder:自定义构建实例名称,便于后续引用。
- --driver docker-container:使用容器化的 BuildKit 实例,避免与本地 Docker 引擎版本冲突。
- --driver-opt image=moby/buildkit:v0.10.3:指定 BuildKit 版本,确保 zstd 压缩功能可用(BuildKit v0.9+ 支持)
--output type=image,name=$IMAGE_URI:$IMAGE_TAG,oci-mediatypes=true,compression=zstd,compression-level=3,force-compression=true,push=true .
- --file Dockerfile:指定构建使用的 Dockerfile 路径。
- name=$IMAGE_URI:$IMAGE_TAG:指定镜像的完整 URI 和标签(例如 myrepo/myimage:latest)。
- oci-mediatypes=true:使用 OCI 标准的媒体类型(兼容性更好)。
- compression=zstd:启用 zstd 压缩(替代默认的 gzip)。
- compression-level=3:设置 zstd 压缩级别为 3(平衡压缩比与速度,默认是 3)。
- force-compression=true:强制对所有层应用压缩(包括可能已压缩的层)。
- push=true:构建完成后直接推送到远程仓库
- 本文推荐通过 Skopeo 将现有镜像转化为 zstd 压缩格式。Skopeo 支持通过 --dest-compress-format 参数指定压缩格式(包括 zstd)。以下是具体步骤:
注意
需要安装 1.4 或以上版本,已支持 zstd 功能。
- (可选)如果版本低于 1.4 请安装 1.4 及以上版本。
sudo apt-get install skopeo
- 使用 skopeo copy 并指定 --dest-compress-format=zstd
--dest-compress-format=zstd \
docker://docker.io/library/nginx:latest \
oci:/path/to/output/nginx-zstd:oci
- --dest-compress-format=zstd:指定目标使用 zstd 压缩。
- oci:/path/to/output/nginx-zstd:oci:输出为 OCI 格式,存储在指定路径。
- 验证压缩格式。Layers 中的 mediaType,应为 application/vnd.oci.image.layer.v1.tar+zstd
skopeo inspect oci:/path/to/output/nginx-zstd:oci
- 推送或使用镜像。推送至镜像仓库(或其他支持zstd压缩格式的仓库)。
oci:/path/to/output/nginx-zstd:oci \
docker://instance-cn-beijing.cr.volces.com/nginx:zstd
说明
本文介绍主要的操作步骤。开启 P2P 的详细说明参见 P2P 加速概述。 - 登录 镜像仓库控制台。在目标实例中的 分发加速 > P2P 加速 页面,开启 P2P 加速功能。
-
- 登录 容器服务控制台。在目标集群的 运维管理 > 组件管理 页面,安装 p2p-accelerator 组件。
- 新服务:创建拉取 zstd 格式镜像的无状态工作负载,通过 P2P 方式拉取 zstd 格式的镜像,操作说明参见 创建无状态负载。
-
- 存量服务:在容器服务控制台一键重新部署工作负载,分发 zstd 镜像即可生效。
-
使用高规格(带宽大)本地盘的节点,对容器内网从拉取镜像到启动进行端到端的测试。测试结果如下,构建相同的镜像, zstd 格式压缩效果更好,镜像分发时间的时间更多短。
说明
实际使用时受限于节点规格,磁盘等情况,具体端到端拉取时间以实际情况为准。
最近更新时间:2025.08.26 11:55:15