You need to enable JavaScript to run this app.
文档中心
镜像仓库

镜像仓库

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