我们可以使用Skopeo来移动和共享镜像。Skopeo不需要与本地容器存储(overlay2或devicemapper)进行交互,它可以直接在注册表之间,容器引擎存储之间甚至目录之间移动。


远程检查image
首先,让我们从启动Skopeo项目的用例开始。 有时,在将Image下拉到本地缓存之前远程检查Image确实很方便。 这使我们可以检查Image的元数据,并查看是否确实要使用它,而无需将其同步到本地Image缓存:


$ skopeo inspect docker://registry.fedoraproject.org/fedora

{

    "Name": "registry.fedoraproject.org/fedora",

    "Digest": "sha256:d84ad27a3055f11cf2d34e611b8d14aada444e1e71866ea6a076b773aeac3c93",

    "RepoTags": [

        "24",

        "25",

        "26-modular",

        "26",

        "27-aarch64",

        "27-armhfp",

        "27-ppc64le",

        "27-x86_64",

        "27",

        "28-aarch64",

        "28-armhfp",

        "28-ppc64le",

        "28-x86_64",

        "28",

        "29-aarch64",

        "29-ppc64le",

        "29-s390x",

        "29-x86_64",

        "29",

        "30-aarch64",

        "30-ppc64le",

        "30-s390x",

        "30-x86_64",

        "30",

        "latest",

        "rawhide",

        "30-armhfp",

        "29-armhfp",

        "31-aarch64",

        "31-x86_64",

        "31",

        "31-armhfp",

        "31-s390x",

        "31-ppc64le",

        "32-aarch64",

        "32-ppc64le",

        "32-s390x",

        "32-x86_64",

        "32",

        "33-aarch64",

        "33-ppc64le",

        "33-s390x",

        "33-x86_64",

        "33"

    ],

    "Created": "2020-05-15T06:48:40Z",

    "DockerVersion": "1.10.1",

    "Labels": {

        "license": "MIT",

        "name": "fedora",

        "vendor": "Fedora Project",

        "version": "32"

    },

    "Architecture": "amd64",

    "Os": "linux",

    "Layers": [

        "sha256:1657ffead82459c68a65ceb4dc6f619b010b96d257f860d7db578ec2b06080e8"

    ],

    "Env": [

        "DISTTAG=f32container",

        "FGC=f32",

        "container=oci"

    ]

}


我们可以很容易地看到“Architecture”和“ Os”元数据,这些元数据向我们介绍了很多有关Image的信息。我们还可以看到标签,标签被大多数容器引擎使用,并传递给运行时以构造为环境变量。相比之下,这是在运行中的容器中查看它们的方法:podman inspect $(podman create registry.fedoraproject.org/fedora bash)


像Podman一样,Skopeo可用于将Image下拉到本地容器存储中:skopeo copy docker://registry.fedoraproject.org/fedora containers-storage:fedora

如何在podman和docker注册表之间移动镜像_java

也可以用于将它们拉入本地目录:

skopeo copy docker://registry.fedoraproject.org/fedora dir:/root/fedora-skopeo

如何在podman和docker注册表之间移动镜像_java_02

如何在podman和docker注册表之间移动镜像_java_03


在容器存储之间移动镜像(Docker和Podman)

现在,让我们看一下Podman和Docker之间的动态Image。我们将Image存储在本地,这很简单:

skopeo copy containers-storage:registry.fedoraproject.org/fedora docker-daemon:registry.fedoraproject.org/fedora:latest

如何在podman和docker注册表之间移动镜像_java_04

确认存储库现在位于Docker Engine缓存中:

如何在podman和docker注册表之间移动镜像_java_05


在容器注册中心之间移动

我们从一个注册表复制到另一个注册表。我已经在quay.io上的用户名(fatherlinux)下建立了一个可写的存储库。为此,您必须使用下面提供的凭据。注意,我们使用“ --dest-creds”选项进行身份验证。我们还可以使用“ --source-cred”选项从需要身份验证的注册表中提取信息。这个工具非常灵活。 

--kopeo copy containers-storage:registry.fedoraproject.org/fedora docker://quay.io/fatherlinux/fedora --dest-creds fatherlinux+fedora:5R4YX2LHHVB682OX232TMFSBGFT350IV70SBLDKU46LAFIY6HEGN4OYGJ2SCD4HI

如何在podman和docker注册表之间移动镜像_java_06

该命令仅将fedora存储库从Fedora注册表同步到Quay.io,而无需将其缓存在本地容器存储中。