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、Buildkit 和 Buildah 等。本文仅提供两种构建方式,如使用其他构建工具,请参考对应工具说明文档。​
【推荐】方式一:使用火山引擎持续交付流水线,一站式构建 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
这个页面对您有帮助吗?
有用
有用
无用
无用