Skopeo 工具介绍

Skopeo

Skopeo 是一个简单的命令行工具,用于与注册表交互,管理容器镜像的检查、复制和删除操作。尽管这些任务也可以用 Podman 来完成,但 Skopeo 是一个更轻量级的"专注于做一件事并将其做好"的工具。

可以很容易地在 macOS 上安装该二进制文件,只需使用 brew install skopeo,且我们完全不需要 Linux 主机------你可以关闭 Linux 虚拟机。

ruby 复制代码
$ skopeo -v
skopeo version 0.1.40

在进行任何有用的操作之前,我们需要创建一个 containers-policy 文件,文件包含验证规则来决定是否接受拉取的镜像。默认位置是 /etc/containers/policy.json,也可以通过 --policy <policy file> 参数指向另一个文件。或者,我们可以使用 --insecure-policy 参数接受所有镜像。注意,这些策略参数是"全局"参数,必须在操作命令之前添加(例如 inspectcopydelete 等)。最简单的方式是在默认位置创建一个策略文件以允许所有注册表:

arduino 复制代码
$ sudo sh -c 'cat >/etc/containers/policy.json' <<EOF 
{
    "default": [
        {
            "type": "insecureAcceptAnything"
        }
    ],
    "transports":
        {
            "docker-daemon":
                {
                    "": [{"type":"insecureAcceptAnything"}]
                }
        }
}
EOF

要访问需要身份验证的注册表,我们需要传递凭据。有两种选择:

  • 用户名:密码:基于命令使用 --creds--src-creds--dest-creds 参数
  • authfile:Docker 身份验证文件,与 Podman 中的相同,可以通过 --authfile <auth file> 添加。如果未设置,Skopeo 会查找默认位置 $HOME/.docker/config.json。这是一个示例文件:
json 复制代码
{
 "auths": {
  "registry.redhat.io": {
    "auth": "<username:password in base64>"
  },
  "quay.io": {
    "auth": "bXl1c2VyOm15c2VjcmV0"
  }
 }
}

通过多种参数可以实现信任或忽略 TLS 证书,具体取决于所使用的 Skopeo 命令:--cert-dir--tls-verify--src-cert-dir--src-tl-verify--dest-cert-dir--dest-tls-verify

检查

Skopeo 可以用来从注册表中读取关于镜像的信息------无需先下载镜像:

json 复制代码
$ skopeo inspect docker://quay.io/quay/busybox:latest
{
    "Digest": "sha256:91aa1e3e55765a568...",
    "RepoTags": ...

对于支持多个操作系统版本镜像的注册表,需要添加全局参数 --override-os linux,否则默认使用 MacOS OS darwin 而找不到镜像。

ruby 复制代码
$ skopeo --override-os linux inspect docker://docker.io/nginx$ skopeo --override-os linux inspect --authfile myauth.json docker://registry.redhat.io/openshift3/jenkins-2-rhel7

对于详细信息(例如层、入口点、cmd),检查来自注册表的原始响应:

arduino 复制代码
$ skopeo --override-os linux inspect --config --raw docker://docker.io/nginx | jq .

检查还可用于某些格式(例如已通过 skopeo copy 下载的镜像)中保存在本地磁盘上的镜像:

shell 复制代码
# 镜像保存为 docker-archive
$ skopeo inspect docker-archive:/tmp/mytag.latest.tar
# 检查 oci-archive 镜像,尝试使用 /var/tmp/,需要 sudo
$ sudo skopeo inspect oci-archive:/tmp/mytag.latest.oci
# 镜像保存为目录或 oci 目录
$ skopeo inspect dir:/tmp/mytag-latest-dir/
$ skopeo inspect oci:/tmp/mytag-latest-oci/

复制

使用 Skopeo 最常见的任务是将镜像从一个注册表复制到另一个注册表。需要多个参数,但在理解了上面检查命令的基本参数后就很明显了。以下示例将 Jenkins 镜像从 registry.redhat.io 复制到 quay.io

shell 复制代码
# 简单示例 - 已准备好策略和身份验证文件
$ skopeo --override-os linux copy docker://registry.redhat.io/openshift3/jenkins-2-rhel7:v3.11 docker://quay.io/bszeti/jenkins:v3.11

注意:根据注册表情况,可能需要或不需要 --override-os linux,就像 skopeo inspect 一样。

现在可以添加身份验证和 TLS 参数,例如在私有存储库之间复制镜像:

bash 复制代码
$ skopeo --insecure-policy copy 
--src-tls-verify=false --dest-tls-verify=false 
--src-creds 'devuser:secret' --dest-creds 'myuser:secret' docker://devregistry.host:5000/myteam/myapp:v1 docker://myregistry.host:8443/myteam/myapp:mytag

我们还可以使用 skopeo copy 来标记镜像。Skopeo 检查目标注册表中是否已经存在图层,以避免不必要的数据复制。

shell 复制代码
$ skopeo copy docker://myregistry:8443/myteam/myapp:v1 docker://myregistry:8443/myteam/myapp:qa

还可以使用复制命令将镜像保存到本地磁盘上不同的格式。

shell 复制代码
$ skopeo copy docker://docker.io/nginx docker-archive:/tmp/nginx.tar
$ skopeo copy docker://docker.io/nginx oci-archive:/tmp/nginx.oci
$ skopeo copy docker://docker.io/nginx dir:/tmp/nginx-dir
$ skopeo copy docker://docker.io/nginx oci:/tmp/nginx-oci

注意:在处理归档时,Skopeo 在某些情况下会使用 /var/tmp 下的临时目录,因此除非以 root 运行,否则可能会遇到权限问题。

总结

新的一套无守护进程、开源的容器管理工具已经成熟,可以自信地用于 Linux 机器。不幸的是,它们在 macOS 上还没有完全原生支持。但是,通过一些手动设置和小小的妥协,我们现在可以开始使用这些工具。希望本指南帮助您简化这个过程,同时也期待未来更加无缝的体验。

全文完!

如果你喜欢我的文章,欢迎关注我的微信公众号 deliverit。

相关推荐
高旭博2 小时前
7. kubernetes资源——service服务
云原生·容器·kubernetes
斯普信专业组2 小时前
Docker 常用命令与时区配置指南
docker·容器·eureka
天一生水water14 小时前
ubuntu使用毫秒镜像方式安装docker mysql
ubuntu·阿里云·docker
Qayrup16 小时前
docker 搭建私有仓库,推送并拉取
运维·docker·容器
郭庆汝17 小时前
docker拉取英伟达官方cuda11.8镜像
docker·cuda11.8
天下不喵18 小时前
Ubuntu24.04安装Docker过程记录
docker
黑黍19 小时前
如何在k8s中配置并使用nvidia显卡
云原生·容器·kubernetes
冷血~多好19 小时前
使用docker部署elk,实现日志追踪
elk·docker·容器
会飞的小蛮猪19 小时前
SkyWalking运维之路(Java探针接入)
java·运维·经验分享·容器·skywalking