首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker重命名清单或将2个图像合并为一个

Docker重命名清单或将2个图像合并为一个
EN

Stack Overflow用户
提问于 2021-12-09 17:35:50
回答 1查看 657关注 0票数 4

我有一个名为someserver:5000/my_image:v1的多拱码头图像。它被上传到某个本地注册中心。已经为两个平台制作了图像:linux/arm64linux/amd64

我想把这个图像重命名为someserver:5000/my_release_image:v1。如果这是一张普通的照片,我可以:

代码语言:javascript
复制
docker pull someserver:5000/my_image:v1
docker tag someserver:5000/my_image:v1 someserver:5000/my_release_image:v1
docker push someserver:5000/my_release_image:v1

但是这是一个由docker buildx build --platform <ARCHITECTURES> --pull --push ...完成的多弓图像,所以在提取它的同时,我得到了对我的体系结构的修改。

我怎样才能保留一个多架构的图像?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-10 15:11:22

当我写这篇文章的时候,我找到了一个解决方案。

在开始的时候,我还没有真正了解到如何创建多层图像,以及在docker中出现了什么“清单”。我认为一些多弓映像someserver:5000/my_image:v1就像一个超级映像,但首先,someserver:5000/my_image:v1someserver:5000注册表上存储库my_image的标记。有一些明显的标记是这样的。它“点”在一个或几个真实的图像上(如果我错了,请纠正我)。

码头舱单解决方案

解决方案1(如果您的图像存储在本地或在线)

  1. (如果在线-跳过这个步骤),让我们假设您的本地机器上有两个图像- someserver:5000/my_image:1someserver:5000/my_image:2。将它们推入您的注册表:
代码语言:javascript
复制
docker push someserver:5000/my_image:1
docker push someserver:5000/my_image:2
  1. 把他们团结在一个明显的someserver:5000/my_release_image:v1之下
代码语言:javascript
复制
docker manifest create someserver:5000/my_release_image:v1 \
--amend someserver:5000/my_image:1 \
--amend someserver:5000/my_image:2 
  1. 插入到您的注册表:
代码语言:javascript
复制
docker manifest push someserver:5000/my_release_image:v1

解决方案2(如果您想要重命名清单)

假设在您的latest注册中心的my_image存储库中已经有一个带有标记someserver:5000/的清单,但是您希望将它“重命名”为someserver:5000/my_release_image:v1

  1. 获取有关标签的信息
代码语言:javascript
复制
docker manifest inspect someserver:5000/my_image:latest

它会给你这样的东西:

代码语言:javascript
复制
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 1,
         "digest": "sha256:long_long_hex_number_1",
         "platform": {
            "architecture": "arch1",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 13735,
         "digest": "sha256:long_long_hex_number_2",
         "platform": {
            "architecture": "arch2",
            "os": "linux"
         }
      }
   ]
}
  1. 只需使用不提供标记的摘要创建清单:
代码语言:javascript
复制
docker manifest create someserver:5000/my_release_image:v1 \
--amend someserver:5000/my_image@sha256:long_long_hex_number_1 \
--amend someserver:5000/my_image@sha256:long_long_hex_number_2
  1. 插入到您的注册表:
代码语言:javascript
复制
docker manifest push someserver:5000/my_release_image:v1
  1. 删除旧清单:
代码语言:javascript
复制
docker manifest rm someserver:5000/my_image:latest
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70294270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档