最佳镜像搬运工 Skopeo 指南(1) 您所在的位置:网站首页 调料种类 最佳镜像搬运工 Skopeo 指南(1)

最佳镜像搬运工 Skopeo 指南(1)

#最佳镜像搬运工 Skopeo 指南(1)| 来源: 网络整理| 查看: 265

最佳镜像搬运工 Skopeo 指南文章目录

最佳镜像搬运工 Skopeo 指南

1. 概述

2. Skopeo 是如何工作的?

3. 为什么要用 Skopeo?

3.1 灵活性

3.2 安全性和可访问性

3.3 功能多样性

4. 安装

4.1 Fedora

4.2 RHEL / CentOS Stream ≥ 8

4.3 RHEL/CentOS ≤ 7.x

4.4 Ubuntu

4.5 容器安装

5. 命令参数

6. 查询(skopeo inspect)

6.1 查询镜像 fedora:latest 的属性

6.2 查询镜像配置

6.3 查询镜像摘要

6.4 免登陆查询

7. 显示镜像标签(skopeo list-tags)

8. 登陆(skopeo login)

8.1 配置私有仓库证书

8.2 podman 登陆各个仓库

8.3 skopeo 多种方式登陆仓库

9. 复制镜像(skopeo copy)

9.1 本地镜像推送仓库

9.2 两仓库进行复制

9.3 仓库镜像拷贝到本地目录

10. 同步镜像(Skopeo sync)

10.1 仓库镜像同步至本地

10.2 本地同步至仓库镜像

10.3 两仓库同步

10.4 以配置文件方式进行同步

11. 删除镜像(skopeo delete)

11.1 skopeo 删除镜像

11.2 curl 方式删除

1. 概述

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

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

2. Skopeo 是如何工作的?

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)系统中,以便使容器镜像仓库保持最新,并且维护容器服务器上的存储。

3. 为什么要用 Skopeo?3.1 灵活性

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

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

3.2 安全性和可访问性

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

无根容器管理。用户无需使用具有管理员特权的进程,就能创建、运行和管理容器,不仅使容器环境变得更易访问,又可降低安全风险。

无守护进程架构。守护进程需要管理员访问权限(同时无需进行管理员验证)来读取文件、安装程序、编辑应用和执行其他操作。如此一来,对于企图控制您的容器并渗透主机系统的黑客而言,守护进程是他们的理想攻击目标。

原生 systemd 集成。通过使用 Podman 和相关的容器工具,您可以创建 systemd 单元文件并将容器作为系统服务来运行。

Understanding root inside and outside a container

3.3 功能多样性

Skopeo 与 API V2 容器镜像仓库一起工作,例如docker.io和quay.io仓库、私有仓库、本地目录和本地 OCI 布局目录。Skopeo 可以执行的操作包括:

从和向各种存储机制复制镜像。例如,您可以将镜像从一个仓库复制到另一个仓库,而无需特权。

检查显示其属性(包括图层)的远程镜像,而无需将镜像拉到主机。

从镜像存储库中删除镜像。

将外部镜像存储库同步到内部仓库以进行气隙部署。

当存储库需要时,skopeo 可以传递适当的凭据和证书进行身份验证。

Skopeo 对以下镜像和存储库类型进行操作:

containers-storage:docker-reference 位于本地 containers/storage镜像存储中的镜像。位置和镜像存储都在 /etc/containers/storage.conf 中指定。(这是Podman、CRI-O、Buildah和朋友的后端)

dir:path 一个现有的本地目录路径,将清单、层 tarball 和签名存储为单独的文件。这是一种非标准化格式,主要用于调试或非侵入式容器检查。

docker://docker-reference 实现“Docker Registry HTTP API V2”的仓库中的镜像。默认情况下,使用 中的授权状态$XDG_RUNTIME_DIR/containers/auth.json,这是使用 设置的skopeo login。

docker-archive:path[:docker-reference] 镜像存储在 - 格式的docker save文件中。docker-reference 仅在创建此类文件时使用,并且不得包含摘要。

docker-daemon:docker-reference 存储在 docker 守护程序内部存储中的镜像 docker-reference。docker-reference 必须包含标签或摘要。或者,在读取镜像时,格式也可以是 docker-daemon:algo:digest(镜像 ID)。

oci:path:tag 路径中符合“Open Container Image Layout Specification”的目录中的镜像标签。

废话少说,我们开始 Skopeo 之旅。

4. 安装4.1 Fedorasudo dnf -y install skopeo

Package Info and Bugzilla

4.2 RHEL / CentOS Stream ≥ 8sudo dnf -y install skopeo

CentOS Stream 9: Package Info

CentOS Stream 8: Package Info

更多 skopeo 安装方式看这里4.3 RHEL/CentOS ≤ 7.xsudo yum -y install skopeo

CentOS 7: Package Repo

4.4 Ubuntu

skopeo包在Ubuntu 20.10及更新版本的官方存储库中可用。

# Ubuntu 20.10 and newersudo apt-get -y updatesudo apt-get -y install skopeo

Ubuntu: Package Info

4.5 容器安装$ podman run docker://quay.io/skopeo/stable:latest copy --help5. 命令参数skopeo --helpVarious operations with container images and container image registriesUsage: skopeo [command]Available Commands: copy Copy an IMAGE-NAME from one location to another delete Delete image IMAGE-NAME help Help about any command inspect Inspect image IMAGE-NAME list-tags List tags in the transport/repository specified by the REPOSITORY-NAME login Login to a container registry logout Logout of a container registry manifest-digest Compute a manifest digest of a file standalone-sign Create a signature using local files standalone-verify Verify a signature using local files sync Synchronize one or more images from one location to anotherFlags: --command-timeout duration timeout for the command execution --debug enable debug output -h, --help help for skopeo --insecure-policy run the tool without any policy check --override-arch ARCH use ARCH instead of the architecture of the machine for choosing images --override-os OS use OS instead of the running OS for choosing images --override-variant VARIANT use VARIANT instead of the running architecture variant for choosing images --policy string Path to a trust policy file --registries.d DIR use registry configuration files in DIR (e.g. for container signature storage) --tmpdir string directory used to store temporary files -v, --version Version for SkopeoUse "skopeo [command] --help" for more information about a command.

1671023814708.png

6. 查询(skopeo inspect)

skopeo inspect 能够检查容器 Registry 上的存储库并获取镜像层。检查命令获取存储库的清单,它能够向您显示有关整个存储库或标签的类似 docker inspect 的 json 输出。与 docker inspect 相比,此工具可帮助您在拉取存储库或标签之前收集有用的信息(使用磁盘空间), 检查命令可以向您显示给定存储库可用的标签、映像具有的标签、映像的创建日期和操作系统等。

支持传输的类型 : containers-storage, dir, docker, docker-archive, docker-daemon, oci, oci-archive, ostree, tarball。

6.1 查询镜像 fedora:latest 的属性$ podman imagesREPOSITORY TAG IMAGE ID CREATED SIZE$ skopeo inspect docker://docker.io/alpine:latest{ "Name": "docker.io/library/alpine", "Digest": "sha256:b95359c2505145f16c6aa384f9cc74eeff78eb36d308ca4fd902eeeb0a0b161b", "RepoTags": [ "2.6", "2.7", "20190228", "20190408", "20190508", "20190707", "20190809", "20190925", "20191114", "20191219", "20200122", "20200319", "20200428", "20200626", "20200917", "20201218", "20210212", "20210730", "20210804", "20220316", "20220328", "20220715", "20221110", "3", "3.1", "3.10", "3.10.0", "3.10.1", "3.10.2", "3.10.3", "3.10.4", "3.10.5", "3.10.6", "3.10.7", "3.10.8", "3.10.9", "3.11", "3.11.0", "3.11.10", "3.11.11", "3.11.12", "3.11.13", "3.11.2", "3.11.3", "3.11.5", "3.11.6", "3.11.7", "3.11.8", "3.11.9", "3.12", "3.12.0", "3.12.1", "3.12.10", "3.12.11", "3.12.12", "3.12.2", "3.12.3", "3.12.4", "3.12.5", "3.12.6", "3.12.7", "3.12.8", "3.12.9", "3.13", "3.13.0", "3.13.1", "3.13.10", "3.13.11", "3.13.12", "3.13.2", "3.13.3", "3.13.4", "3.13.5", "3.13.6", "3.13.7", "3.13.8", "3.13.9", "3.14", "3.14.0", "3.14.1", "3.14.2", "3.14.3", "3.14.4", "3.14.5", "3.14.6", "3.14.7", "3.14.8", "3.15", "3.15.0", "3.15.0-rc.4", "3.15.1", "3.15.2", "3.15.3", "3.15.4", "3.15.5", "3.15.6", "3.16", "3.16.0", "3.16.1", "3.16.2", "3.16.3", "3.17", "3.17.0_rc1", "3.2", "3.3", "3.4", "3.5", "3.6", "3.6.5", "3.7", "3.7.3", "3.8", "3.8.4", "3.8.5", "3.9", "3.9.2", "3.9.3", "3.9.4", "3.9.5", "3.9.6", "edge", "latest" ], "Created": "2023年02月08日T04:19:23.199716539Z", "DockerVersion": "20.10.12", "Labels": null, "Architecture": "amd64", "Os": "linux", "Layers": [ "sha256:ca7dd9ec2225f2385955c43b2379305acd51543c28cf1d4e94522b3d94cce3ce" ], "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ]}6.2 查询镜像配置$ skopeo inspect --config docker://docker.io/alpine:latest | jq{ "created": "2023年02月08日T04:19:23.199716539Z", "architecture": "amd64", "os": "linux", "config": { "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh" ] }, "rootfs": { "type": "layers", "diff_ids": [ "sha256:e5e13b0c77cbb769548077189c3da2f0a764ceca06af49d8d558e759f5c232bd" ] }, "history": [ { "created": "2023年02月08日T04:19:23.05154209Z", "created_by": "/bin/sh -c #(nop) ADD file:ceeb6e8632fafc657116cbf3afbd522185a16963230b57881073dad22eb0e1a3 in / " }, { "created": "2023年02月08日T04:19:23.199716539Z", "created_by": "/bin/sh -c #(nop) CMD ["/bin/sh"]", "empty_layer": true } ]}6.3 查询镜像摘要$ skopeo inspect docker://docker.io/alpine:latest | jq '.Digest'"sha256:655721ff613ee766a4126cb5e0d5ae81598e1b0c3bcf7017c36c4d72cb092fe9"

或者

$ skopeo inspect --format "Name: {{.Name}} Digest: {{.Digest}}" docker://docker.io/alpine:latestName: docker.io/library/alpine Digest: sha256:b95359c2505145f16c6aa384f9cc74eeff78eb36d308ca4fd902eeeb0a0b161b关于 inspect 用法更多细节请看这里6.4 免登陆查询–creds=testuser:testpasswordskopeo inspect --creds=admin:Harbor12345 docker://harbor.fumai.com/library/alpine:latest{ "Name": "harbor.fumai.com/library/alpine", "Digest": "sha256:39ec5d12ef5a81b29b26d756f6b9c11d8d454fc4158e3dac1e13240125558461", "RepoTags": [ "latest" ], "Created": "2023年02月08日T04:19:23.199716539Z", "DockerVersion": "20.10.12", "Labels": null, "Architecture": "amd64", "Os": "linux", "Layers": [ "sha256:60f8044dac9f779802600470f375c7ca7a8f7ad50e05b0ceb9e3b336fa5e7ad3" ], "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ]}7. 显示镜像标签(skopeo list-tags)

skopeo list-tags显示镜像存储库的标签列表,期待已久的功能了。

$ skopeo list-tags docker://192.168.10.80:5000/alpine{ "Repository": "192.168.10.80:5000/alpine", "Tags": [ "latest" ]}$ skopeo list-tags docker://docker.io/alpine{ "Repository": "docker.io/library/alpine", "Tags": [ "2.6", "2.7", "20190228", "20190408", "20190508", "20190707", "20190809", "20190925", "20191114", "20191219", "20200122", "20200319", "20200428", "20200626", "20200917", "20201218", "20210212", "20210730", "20210804", "20220316", "20220328", "20220715", "20221110", "3", "3.1", "3.10", "3.10.0", "3.10.1", "3.10.2", "3.10.3", "3.10.4", "3.10.5", "3.10.6", "3.10.7", "3.10.8", "3.10.9", "3.11", "3.11.0", "3.11.10", "3.11.11", "3.11.12", "3.11.13", "3.11.2", "3.11.3", "3.11.5", "3.11.6", "3.11.7", "3.11.8", "3.11.9", "3.12", "3.12.0", "3.12.1", "3.12.10", "3.12.11", "3.12.12", "3.12.2", "3.12.3", "3.12.4", "3.12.5", "3.12.6", "3.12.7", "3.12.8", "3.12.9", "3.13", "3.13.0", "3.13.1", "3.13.10", "3.13.11", "3.13.12", "3.13.2", "3.13.3", "3.13.4", "3.13.5", "3.13.6", "3.13.7", "3.13.8", "3.13.9", "3.14", "3.14.0", "3.14.1", "3.14.2", "3.14.3", "3.14.4", "3.14.5", "3.14.6", "3.14.7", "3.14.8", "3.15", "3.15.0", "3.15.0-rc.4", "3.15.1", "3.15.2", "3.15.3", "3.15.4", "3.15.5", "3.15.6", "3.16", "3.16.0", "3.16.1", "3.16.2", "3.16.3", "3.17", "3.17.0_rc1", "3.2", "3.3", "3.4", "3.5", "3.6", "3.6.5", "3.7", "3.7.3", "3.8", "3.8.4", "3.8.5", "3.9", "3.9.2", "3.9.3", "3.9.4", "3.9.5", "3.9.6", "edge", "latest" ]}



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有