Skopeo

关注
义项:容器镜像管理工具
Skopeo

Skopeo 是一款用于操作容器镜像与镜像仓库的命令行工具,由开源社区推动开发,用 Go 语言编写,采用 Apache 2.0 许可协议发布[1][2]。它可以在不需要容器守护进程、也不需要 root 权限的前提下,检查远端仓库中的镜像、在仓库与本地各种存储格式之间复制镜像,并把外部镜像仓库同步到内部仓库,常用于持续集成流水线与隔离网络环境[3][4]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Skopeo 是一个针对容器镜像和镜像仓库执行多种操作的命令行程序,属于容器工具链中的一员[1]。它可以处理符合开放容器倡议规范的 OCI 镜像,也支持较早的 Docker v2 镜像格式,并能与实现 API V2 的镜像仓库、私有仓库、本地目录以及本地 OCI 布局目录互操作[3]。

与多数容器工具不同的是,Skopeo 不依赖常驻的守护进程,其大部分操作也不要求以 root 身份运行;只有在把镜像写入容器运行时后端(例如 Docker 守护进程的存储)时才需要更高权限[5]。镜像仓库的软件包描述把它概括为「无需拉取即可直接检查仓库中镜像与仓库信息」的命令行工具[6]。

原理

Skopeo 的核心抽象是「传输方式」(transport)。在命令中,镜像以「传输前缀:详细信息」的形式给出,例如 docker:// 指向远端仓库、dir: 指向本地普通目录、oci: 指向符合 OCI 布局的目录、containers-storage: 指向本地容器存储、docker-archive: 指向 docker save 生成的归档文件、docker-daemon: 指向 Docker 守护进程内部存储[7]。源与目标可以分属不同传输方式,转换格式的工作由工具自动完成,例如把 Docker schema 2 或 schema 1 镜像转为 OCI 镜像[5]。

执行 inspect 时,程序并不下载全部镜像层,而是先取得仓库的清单(manifest),再输出类似 docker inspect 的 JSON 结果,其中包含可用标签、标签项、创建时间、操作系统与各层摘要等信息[1]。这一过程可用 $O(1)$ 量级的小请求替代「先拉取整镜像再查看」的重操作,避免占用网络带宽与本地磁盘[7]。

进行复制时,程序逐层比对源与目标仓库,已存在于目标端的层不会被重复传输或覆盖,因此仅更新浮动标签时实际改动只是镜像清单[4]。认证与 TLS 亦通过参数控制,可使用 --src-creds、--dest-creds 提供凭据,或沿用 skopeo login、podman login、buildah login 与 docker login 写入的配置[3]。

发展历程

Skopeo 于 2015 年启动,是 containers 系列容器工具中最早出现的项目,早于 2016 年的 Buildah 以及随后的 Podman[2]。其手册文档由 Jhon Honce 在 2016 年 8 月编成,当时已经描述了仓库检查、格式转换、复制、删除以及签名与验证等功能[7]。

此后项目陆续扩充了子命令与能力,包括镜像同步、注册表认证管理、清单摘要计算、基于 Sigstore 的密钥生成,以及对 OCI 制品(如 Helm 图表与 AI 模型)的处理[1][4]。2024 年 11 月,维护团队宣布将 Podman、Buildah 与 Skopeo 申请贡献给云原生计算基金会;随后三者在 Podman 6.0 发布周期内迁入由该基金会持有的新代码组织,旧地址改为重定向[2][8]。

发行方面,项目以滚动版本方式维护,2025 年已发布 1.18.0 版本,2026 年版本号推进到 1.23 系列[6][9]。

应用

检查远端镜像是常见用途。运维人员可以在占用磁盘空间之前,先确认某个仓库有哪些标签、镜像带有哪些标签项、创建日期与目标平台,也可用 --config 查看默认配置与构建历史[10][11]。

镜像复制与标签提升是另一类用途。借助 copy 命令,镜像可以在两个仓库之间直接传递而不必先落到本地磁盘,也可在本地目录、本地存储与仓库之间往返;在持续集成系统中,常用它把构建产物从临时仓库提升到发布仓库,或为同一镜像补充新标签[4]。在Google Cloud环境中,它也被用来把外部镜像导入自有的制品仓库,并以 --all 参数保留多架构清单列表。

面向隔离网络的镜像同步是第三种典型场景。sync 子命令支持仓库到仓库、仓库到目录以及目录到仓库的复制,可按需只同步某个大型仓库中的一部分标签,并只为发生变化的标签与层传输数据;同步清单也可写在配置文件中,通过 yaml 传输方式一次性处理多个来源仓库[12][4]。这种工作流通常先在联网机器上把镜像复制到可移动介质或网络共享目录,经检查后再由离线机器导入内部仓库[4]。

局限

Skopeo 只处理镜像的搬运与检视,并不负责运行容器;运行容器的职责由 Podman 承担,构建镜像的职责由 Buildah 承担,三者构成互补关系[12]。因此它不能替代容器运行时所需的进程隔离、资源限制等能力。

权限限制依然存在。虽然多数操作无需 root,但把镜像写入容器运行时存储后端时仍需要相应权限[5]。当镜像索引中不存在与当前主机操作系统或架构匹配的清单时,检查会直接报错,需要显式指定目标平台才能继续。

sync 与 copy 的能力并不对等,部分传输方式不能作为 sync 的目标端,例如无法用 sync 把源目录直接同步到离线仓库,只能改用 copy 配合脚本完成[4]。此外,使用 oci 传输方式搬运旧格式镜像时,清单可能被转换成新格式,从而使摘要发生变化;官方建议在需要保持摘要不变的场合改用 dir 传输方式[4]。项目本身没有独立的官方网站,上游构建只提供代码仓库与容器镜像,由各发行版打包分发[1]。

在非 Linux 平台上,社区支持相对有限:官方发行页面不提供现成二进制文件,macOS 用户多经由 Homebrew 获取,Windows 用户则需使用第三方移植版本或借助适用于 Linux 的 Windows 子系统,且部分高级功能(如镜像签名处理)有所缺失[4]。

参见

  • Podman —— 同一容器工具家族中的无守护进程容器引擎,负责运行容器。

  • Buildah —— 同家族中用于构建容器镜像的工具,与 Skopeo、Podman 共用底层库。

  • 容器镜像 —— Skopeo 所检查和搬运的对象。

  • 开放容器倡议 —— 制定 OCI 镜像与运行时规范的行业组织,Skopeo 支持其镜像格式。

  • 云原生计算基金会 —— Podman、Buildah 与 Skopeo 当前所属的开源基金会。

  • 持续集成 —— Skopeo 常被嵌入其中用于镜像搬运与同步的工程实践。

参考资料

  1. README [引用日期2026-10-14]
  2. podman.io 上的网页 [引用日期2026-10-14]
  3. skopeo [引用日期2026-10-14]
  4. skopeo-unsung-hero-linux-container-tools [引用日期2026-10-14]
  5. skopeo [引用日期2026-10-14]
  6. skopeo-1.18.0-1.el10 | Build Info [引用日期2026-10-14]
  7. skopeo(1) [引用日期2026-10-14]
  8. Podman Container Tools Grows [引用日期2026-10-14]
  9. Releases · podman-container-tools/skopeo [引用日期2026-10-14]
  10. Skopeo - Saltar al contenido principal [引用日期2026-10-14]
  11. Skopeo - Passer au contenu principal [引用日期2026-10-14]
  12. 什么是 Skopeo? - 使用红帽帐户,获取更多资源。 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T19:17:11Z

历史版本

本条目引用的词条
开放容器倡议 Podman 云原生计算基金会 Google Cloud Buildah 容器镜像 持续集成