快速跳转

什么是 Skopeo?

复制 URL

Skopeo 是一款用来操作、检查、签署和传输容器镜像及镜像存储库的工具,支持 Linux® 系统、Windows 和 MacOS。与 Podman 和 Buildah 一样,Skopeo 也是一个由开源社区推动的项目,也不需要运行容器守护进程。

Skopeo 是一个能操作不同格式(包括开放容器计划(OCI)和 Docker 镜像)容器镜像的轻量级模块化解决方案,您无需下载包含所有层的完整镜像,就可检查远程镜像仓库中的镜像。

容器镜像是一种包含可执行代码的文件,可以在独立的进程中运行。容器镜像由两个部分构成:

tar 存档

第一部分是容器文件系统的一个或多个 tar 存档。tar 存档是文件的一个集合,其文件系统目录包含运行应用所需要的所有代码和配置文件。

JSON 文件

第二部分是 JSON 文件,对应用进行描述并提供来自开发人员的配置,这些配置规定了如何运行容器,如何在应用和服务器之间传输数据,如何存储有关镜像各个组件的元数据,以及如何引用它们。

容器存储库是提供不同应用版本的一组容器镜像,而容器镜像仓库则是提供镜像访问或新镜像上传功能的服务器。 

Skopeo(希腊语"远程查看"的意思)是红帽工程师与开源社区携手开发的第一款容器工具。Skopeo 可与 Podman 和 Buildah 搭配来管理 OCI 容器。简而言之,Podman 负责运行容器,Buildah 负责构建容器,而 Skopeo 则负责传输容器,同时也提供其他功能。我们可以把这些工具看成是用于容器环境的一把瑞士军刀。Skopeo 是其中最万能的那把刀,任由您支配。

Skopeo 使用 skopeo inspect 命令来检查镜像。在 Skopeo 面世之前,您必须拉取完整镜像才能检查这个镜像,即使您只是打算检查一些元数据而已。而 Skopeo 的 inspect 命令可显示镜像的各种属性,如层、镜像标记和标签等,因此您不必将镜像拉取到主机上。这样,您无需占用任何容量,就能收集关于存储库或标记的信息。 

Skopeo 也允许您从存储库删除镜像,并将外部镜像存储库同步到内部镜像仓库,以实现更为安全的断网(也称为气隙系统)部署。当存储库需要时,Skopeo 可以传递相应的凭据和证书来进行身份验证。  

Skopeo sync 允许进行镜像仓库到镜像仓库的直接复制,以便联网使用,也允许进行镜像仓库到文件和文件到镜像仓库的复制,以便为断网环境做准备。skopeo copy 会假定所请求的复制要求操作;而 skopeo sync 则不同,它已经过调优,能够更快地完成定期重新同步极少改动的大型存储库。除了直接使用命令行外,同步操作也可在 config 文件中配置,而这可以仅同步大型存储库中的一个标记子集。

如果检查结果表明需要在不同位置或不同存储类型之间复制容器镜像,您可以通过 Skopeo copy 命令来操作。此工具可以让您在不同的镜像仓库(例如 docker.io、quay.io)、您的内部容器镜像仓库或您的本地系统上的各种存储机制之间复制容器镜像。Skopeo 的镜像仓库间直接复制功能速度很快,可在目标镜像仓库允许时保留未修改的形式(以及镜像的清单摘要)。在镜像仓库间复制不需要使用本地磁盘,也不要求本地磁盘上有可用的空间。Skopeo 也可在不同容器引擎存储甚至不同目录之间移动镜像。它常常用于持续集成/持续交付(CI/CD)系统中,以便使容器镜像仓库保持最新,并且维护容器服务器上的存储。

灵活的工具

Skopeo 是一套容器模块化工具的一部分,具有许多优势。将重要变更引入到单体式架构的工具中,而且不影响现有用户的使用,这绝非易事。Skopeo、Podman 和 Buildah 等尺寸更小巧、用途更专一的工具会以更快的速度更新换代。成套使用工具的话,可以使每个工具专注于单一用途,并且可以添加新的工具来增加功能,或者尝试与现有工具不兼容的想法和架构。工具的尺寸越小巧、模块化程度越高,保证安全也更加容易。

Podman 的部分功能源自于 libpod 库,允许与其他工具共享代码;Skopeo 与之相似,其功能也是在库中实施的。Skopeo 的容器/镜像库可由 Podman、Buildah 和 CRI-O 等其他容器工具共享,并且与 Docker 命令行界面(CLI)兼容。 

安全性和可访问性

将 Podman、Skopeo 和 Buildah 组合使用主要有以下优势:

  • 无根容器管理。用户无需使用具有管理员特权的进程,就能创建、运行和管理容器,不仅使容器环境变得更易访问,又可降低安全风险。
  • 无守护进程架构。守护进程需要管理员访问权限(同时无需进行管理员验证)来读取文件、安装程序、编辑应用和执行其他操作。如此一来,对于企图控制您的容器并渗透主机系统的黑客而言,守护进程是他们的理想攻击目标。 
  • 原生 systemd 集成。通过使用 Podman 和相关的容器工具,您可以创建 systemd 单元文件并将容器作为系统服务来运行。

Kubernetes

Kubernetes 是一个开源的容器编排平台,可以自动完成在部署、管理和扩展容器化应用过程中涉及的许多手动操作。如果您在 Kubernetes 内运行 CI/CD 系统,或使用红帽 OpenShift® 构建容器镜像,您可能需要在不同的容器镜像仓库之间分发这些镜像。Skopeo 就是用于这类任务的理想工具。

高性能计算

在主机系统上运行旧版操作系统的用户可以通过运行 Skopeo 或其他工具,来利用最新的功能和更新。高性能计算(HPC)环境中有一个常见的限制,即不允许无根用户在主机上安装软件包。随着 Podman 在 HPC 中变得越来越普及,通过 Podman 运行 Skopeo 容器来执行特定任务只是一步之遥,只用执行几个命令便可,而且用户不需要根访问权限。 

红帽企业 Linux 可提供更少的存储库和更多的开发人员工具来简化容器开发。红帽企业 Linux 订阅附带 Podman、Buildah 和 Skopeo 等容器工具,能为支持您的容器镜像和容器需求打下坚实的基础。除了这些工具外,红帽也提供基础镜像来作为您自有镜像的基础。 

利用红帽企业 Linux 命令行工具、通用基础镜像(UBI)、红帽 Quay 中的存储库以及补充存储库来运行、构建和共享容器镜像,这一切都能帮助您降低容器开发的复杂性。

继续阅读

文章

容器与虚拟机

Linux 容器和虚拟机(VM)都是封装型计算环境,里面组合了各种 IT 组件并独立于系统的其余部分。

文章

什么是容器编排?

容器编排是指自动化容器的部署、管理、扩展和联网。

文章

什么是 Linux 容器?

Linux 容器是与系统隔离开的一系列进程,它从单独的镜像运行,并由该镜像提供支持进程所需的全部文件。