skopeo

skopeo

    • skopeo简介
    • 检查仓库
      • 显示fedora:latest的属性
      • 从fedora:latest显示容器配置
      • 显示未经验证的图像摘要
    • 复制镜像
    • 删除镜像
    • 同步镜像仓库
    • 身份验证
      • 具有身份验证的私有注册中心
      • 直接使用——credit

skopeo简介

skopeo 是一个命令行实用程序,用于对容器镜像和镜像仓库执行各种操作。
skopeo 在执行大多数操作时,不要求用户以 root 身份运行。
skopeo 执行其操作时无需守护进程处于运行状态。
skopeo 可以处理 OCI 镜像以及原始的 Docker v2 镜像。

Skopeo 可以与 API V2 容器镜像注册表(如 docker.io 和 quay.io 注册表、私有注册表、本地目录以及本地 OCI 布局目录)配合使用。Skopeo 可执行的操作包括:

  • 从各种存储机制中复制和向其复制镜像。例如,您可以将镜像从一个仓库复制到另一个仓库,而无需特别的权限。
  • 检查远程镜像,显示其属性,包括其层,而无需将镜像拉取到主机。
  • 从镜像仓库中删除镜像。
  • 将外部镜像仓库同步到内部仓库,以用于隔离环境部署。
  • 当仓库需要时,skopeo 可以传递适当的凭证和证书以进行身份验证。

Skopeo 支持以下镜像和仓库类型:

  • 容器存储:Docker 参考 位于本地容器/存储镜像存储中的镜像。位置和镜像存储均在 /etc/containers/storage.conf 中指定。(这是 Podman、CRI-O、Buildah 及其相关工具的后端)

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

  • docker://docker-reference:这是在实现“Docker Registry HTTP API V2”的注册表中的一个镜像。默认情况下,它使用位于 $XDG_RUNTIME_DIR/containers/auth.json 中的授权状态,该状态是通过 skopeo login 命令设置的。

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

  • docker-daemon:docker-reference 是存储在 Docker 守护进程内部存储中的一个名为 docker-reference 的镜像。docker-reference 必须包含标签或摘要。另外,在读取镜像时,格式也可以是 docker-daemon:algo:digest(镜像 ID)。

  • oci:path:tag 位于路径 path 下符合“开放容器镜像布局规范”的目录中的镜像标签。

有关如何安装或构建 skopeo 的详细说明,请参阅 install.md。

Skopeo 也可作为容器镜像在 quay.io 上获取。如需了解更多信息,请参阅 Skopeo 镜像页面。

检查仓库

Skopeo能够检查容器注册表上的仓库并获取镜像层。inspect命令获取存储库的清单,它能够向您显示关于整个仓库或标签的docker inspect样的json输出。与docker inspect不同,这个工具可以帮助您在拉取仓库或标签(使用磁盘空间)之前收集有关该仓库或标签的有用信息。inspect命令可以显示哪些标签可用于给定的仓库、镜像具有的标签、镜像的创建日期和操作系统等。

例子:

显示fedora:latest的属性

$ skopeo inspect docker://registry.fedoraproject.org/fedora:latest
{
    "Name": "registry.fedoraproject.org/fedora",
    "Digest": "sha256:0f65bee641e821f8118acafb44c2f8fe30c2fc6b9a2b3729c0660376391aa117",
    "RepoTags": [
        "34-aarch64",
        "34",
        "latest",
        ...
    ],
    "Created": "2022-11-24T13:54:18Z",
    "DockerVersion": "1.10.1",
    "Labels": {
        "license": "MIT",
        "name": "fedora",
        "vendor": "Fedora Project",
        "version": "37"
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Layers": [
        "sha256:2a0fc6bf62e155737f0ace6142ee686f3c471c1aab4241dc3128904db46288f0"
    ],
    "LayersData": [
        {
            "MIMEType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
            "Digest": "sha256:2a0fc6bf62e155737f0ace6142ee686f3c471c1aab4241dc3128904db46288f0",
            "Size": 71355009,
            "Annotations": null
        }
    ],
    "Env": [
        "DISTTAG=f37container",
        "FGC=f37",
        "container=oci"
    ]
}

从fedora:latest显示容器配置

$ skopeo inspect --config docker://registry.fedoraproject.org/fedora:latest  | jq
{
  "created": "2020-04-29T06:48:16Z",
  "architecture": "amd64",
  "os": "linux",
  "config": {
    "Env": [
      "DISTTAG=f32container",
      "FGC=f32",
      "container=oci"
    ],
    "Cmd": [
      "/bin/bash"
    ],
    "Labels": {
      "license": "MIT",
      "name": "fedora",
      "vendor": "Fedora Project",
      "version": "32"
    }
  },
  "rootfs": {
    "type": "layers",
    "diff_ids": [
      "sha256:a4c0fa2b217d3fd63d51e55a6fd59432e543d499c0df2b1acd48fbe424f2ddd1"
    ]
  },
  "history": [
    {
      "created": "2020-04-29T06:48:16Z",
      "comment": "Created by Image Factory"
    }
  ]
}

显示未经验证的图像摘要

$ skopeo inspect docker://registry.fedoraproject.org/fedora:latest | jq '.Digest'
"sha256:655721ff613ee766a4126cb5e0d5ae81598e1b0c3bcf7017c36c4d72cb092fe9"

复制镜像

Skopeo可以在不同的存储机制之间复制容器镜像,包括:

  • 容器镜像仓库
    • The Quay, Docker Hub, OpenShift, GCR, Artifactory …
  • 容器存储后端
    • github.com/containers/storage(后端为Podman, CRI-O, Buildah和朋友)
    • Docker守护进程存储
  • 本地目录
  • 本地oci布局目录
$ skopeo copy docker://quay.io/buildah/stable docker://registry.internal.company.com/buildah
$ skopeo copy oci:busybox_ocilayout:latest dir:existingemptydirectory

如果遇到 x509: certificate signed by unknown authority 错误,通常是因为目标镜像仓库使用了自签名证书或私有证书,而系统无法验证这些证书的合法性。如果你信任目标镜像仓库,可以通过 --src-tls-verify=false 或 --dest-tls-verify=false 参数忽略 TLS 证书验证。这种方法适用于测试环境,但不推荐用于生产环境。

删除镜像

$ skopeo delete docker://localhost:5000/imagename:latest

同步镜像仓库

$ skopeo sync --src docker --dest dir registry.example.com/busybox /media/usb

身份验证

具有身份验证的私有注册中心

如果设置了skopeo凭据,skopeo则使用来自——creds(用于skopeo inspect|delete)或——src-creds|——dest-creds(用于skopeo copy)标志的凭据;否则,它使用skopeo login、podman login、buildah login或docker login设置的配置。

$ skopeo login --username USER myregistrydomain.com:5000
Password:
$ skopeo inspect docker://myregistrydomain.com:5000/busybox
{"Tag":"latest","Digest":"sha256:473bb2189d7b913ed7187a33d11e743fdc2f88931122a44d91a301b64419f092","RepoTags":["latest"],"Comment":"","Created":"2016-01-15T18:06:41.282540103Z","ContainerConfig":{"Hostname":"aded96b43f48","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["/bin/sh","-c","#(nop) CMD [\"sh\"]"],"Image":"9e77fef7a1c9f989988c06620dabc4020c607885b959a2cbd7c2283c91da3e33","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"DockerVersion":"1.8.3","Author":"","Config":{"Hostname":"aded96b43f48","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["sh"],"Image":"9e77fef7a1c9f989988c06620dabc4020c607885b959a2cbd7c2283c91da3e33","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"Architecture":"amd64","Os":"linux"}
$ skopeo logout myregistrydomain.com:5000

直接使用——credit

$ skopeo inspect --creds=testuser:testpassword docker://myregistrydomain.com:5000/busybox
{"Tag":"latest","Digest":"sha256:473bb2189d7b913ed7187a33d11e743fdc2f88931122a44d91a301b64419f092","RepoTags":["latest"],"Comment":"","Created":"2016-01-15T18:06:41.282540103Z","ContainerConfig":{"Hostname":"aded96b43f48","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["/bin/sh","-c","#(nop) CMD [\"sh\"]"],"Image":"9e77fef7a1c9f989988c06620dabc4020c607885b959a2cbd7c2283c91da3e33","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"DockerVersion":"1.8.3","Author":"","Config":{"Hostname":"aded96b43f48","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["sh"],"Image":"9e77fef7a1c9f989988c06620dabc4020c607885b959a2cbd7c2283c91da3e33","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"Architecture":"amd64","Os":"linux"}
$ skopeo copy --src-creds=testuser:testpassword docker://myregistrydomain.com:5000/private oci:local_oci_image

你可能感兴趣的:(容器镜像,云原生,docker,容器)