繁体   English   中英

buildx build --platform amd64,arm64 --push 在 ECR 中创建 3 个资源 - 2 个图像和 1 个图像索引,我如何标记它们?

[英]buildx build --platform amd64,arm64 --push creates 3 resources in ECR - 2 images and 1 image index, how do I tag them?

运行此命令 - docker buildx build --platforms linux/amd64,linux/arm64 -t mytag --push.

它在我的 ECR 中创建了一个图像索引和 2 个图像。

  1. 如何在一个命令中标记图像和图像索引? 现在我只能标记图像索引。
  2. 我如何确定每个图像都是不同的拱门并且图像索引包含两个图像?
  3. 如果我从 amd64 或 arm64 笔记本电脑中提取图像索引,他会知道为我的 arch 提取正确的图像吗? 如何? 我想要 multi arch 图像,它是图像索引吗?

在此处输入图像描述

如何在一个命令中标记图像和图像索引? 现在我只能标记图像索引。

buildx命令不提供此功能。 预期的行为是每个体系结构的单个图像都没有标记。 但是,您可以使用 ECR API(即put-image )或通过摘要标记/推送新标签拉取图像(即docker pull然后docker tag ,然后docker push )自己标记图像。

我如何确定每个图像都是不同的拱门并且图像索引包含两个图像?
如果我从 amd64 或 arm64 笔记本电脑中提取图像索引,他会知道为我的 arch 提取正确的图像吗? 如何? 我想要 multi arch 图像,它是图像索引吗?

您可以查看图像清单(可以使用batch-get-image检索),它将指定每个图像、其摘要和体系结构信息。

aws ecr batch-get-image --repository-name my/repo --image-ids imageTag=mytag --query 'images[].imageManifest' --output text

您可以使用此信息来验证您拉取的图像。

您还可以使用docker image inspect查看您拉取的镜像的架构:

docker pull my/repo:mytag
docker image inspect my/repo:mytag

在响应 JSON body 中,有一个关键的"Architecture" ,指定了架构。

另外值得一提的是,docker 客户端会根据守护主机的架构自动拉取合适的架构。 例如,您可以在 AMD64 机器上使用docker pull postgres ,在 ARM 机器上使用相同的命令,将根据系统架构拉取相应的镜像。

  1. 如何在一个命令中标记图像和图像索引? 现在我只能标记图像索引。

有各种各样的工具可以做到这一点。 我经常推荐的是Google的crane,RedHat的skopeo,还有我自己的regclient。 例如使用 regclient/regctl:

regctl image copy $image@$(regctl image digest $image:$tag --platform linux/amd64) $image:${tag}-amd64
regctl image copy $image@$(regctl image digest $image:$tag --platform linux/arm64) $image:${tag}-arm64
  1. 我如何确定每个图像都是不同的拱门并且图像索引包含两个图像?

您可以检查清单,docker 现在内置了这个:

docker buildx imagetools inspect $image:$tag

或者使用其他各种工具:

regctl manifest get $image:$tag
crane manifest $image:$tag
  1. 如果我从 amd64 或 arm64 笔记本电脑中提取图像索引,他会知道为我的 arch 提取正确的图像吗? 如何? 我想要 multi arch 图像,它是图像索引吗?

是的,图像索引是注册表存储多平台图像的方式。 它包含彼此清单及其平台的描述符数组。 容器运行时(如 docker)知道如何从该列表中选择它们的本地平台。 例如,这里是 busybox 多平台清单的样子:

$ regctl manifest get busybox --format '{{jsonPretty . }}'
{
  "manifests": [
    {
      "digest": "sha256:51de9138b0cc394c813df84f334d638499333cac22edd05d0300b2c9a2dc80dd",
      "mediaType": "application\/vnd.docker.distribution.manifest.v2+json",
      "platform": {
        "architecture": "amd64",
        "os": "linux"
      },
      "size": 528
    },
    {
      "digest": "sha256:40b22bd39e49b9cea975a391de1caad93d63fadc3d23b7dcbf96ec6656064737",
      "mediaType": "application\/vnd.docker.distribution.manifest.v2+json",
      "platform": {
        "architecture": "arm",
        "os": "linux",
        "variant": "v5"
      },
      "size": 528
    },
    {
      "digest": "sha256:d88e0acf1f43052d87d2acb55823f1074a7fd0f7abfe23c07d00e1616cdd15e0",
      "mediaType": "application\/vnd.docker.distribution.manifest.v2+json",
      "platform": {
        "architecture": "arm",
        "os": "linux",
        "variant": "v6"
      },
      "size": 527
    },
    {
      "digest": "sha256:51a9e8ef37a92df3f231b6f96b86c45a622a9078a642b82aa2f45e96c850d92a",
      "mediaType": "application\/vnd.docker.distribution.manifest.v2+json",
      "platform": {
        "architecture": "arm",
        "os": "linux",
        "variant": "v7"
      },
      "size": 528
    },
    {
      "digest": "sha256:9421d4cc473b282bf48888476604444fa3c74f6e3f5cddfa210e773c534cd33d",
      "mediaType": "application\/vnd.docker.distribution.manifest.v2+json",
      "platform": {
        "architecture": "arm64",
        "os": "linux",
        "variant": "v8"
      },
      "size": 528
    },
    {
      "digest": "sha256:da6b2a01ddb011c518d5b07245d781de7c33d6e4cb058d137e9c06ffce4ad7f3",
      "mediaType": "application\/vnd.docker.distribution.manifest.v2+json",
      "platform": {
        "architecture": "386",
        "os": "linux"
      },
      "size": 528
    },
    {
      "digest": "sha256:5fa4e832d41ced43f8a01216c3d6af2ee1607b697cea7c1171d8eb8e2a951388",
      "mediaType": "application\/vnd.docker.distribution.manifest.v2+json",
      "platform": {
        "architecture": "mips64le",
        "os": "linux"
      },
      "size": 528
    },
    {
      "digest": "sha256:b6b4d55059e0cabc8ed615b2a656303f060e16a24b28cb2c18f71e896795e509",
      "mediaType": "application\/vnd.docker.distribution.manifest.v2+json",
      "platform": {
        "architecture": "ppc64le",
        "os": "linux"
      },
      "size": 528
    },
    {
      "digest": "sha256:92f6eed1de620dd42e1fb36e4a04e394d462b180cb48672189a90cb236df35f7",
      "mediaType": "application\/vnd.docker.distribution.manifest.v2+json",
      "platform": {
        "architecture": "riscv64",
        "os": "linux"
      },
      "size": 527
    },
    {
      "digest": "sha256:a748a1de3d1647c5f4c42c4ccc3d55024a40d9663e3d7d1287e319c342df4d9a",
      "mediaType": "application\/vnd.docker.distribution.manifest.v2+json",
      "platform": {
        "architecture": "s390x",
        "os": "linux"
      },
      "size": 528
    }
  ],
  "mediaType": "application\/vnd.docker.distribution.manifest.list.v2+json",
  "schemaVersion": 2
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM