什么是容器清单?

关于这个话题的唯一文件似乎假设我已经知道清单是什么,它解决的问题,以及它如何适应docker生态系统。 在阅读文档后,我仍然不确定如何体现实际工作。

我的私人GCR包含清单文件 – 并不真正了解其目的。 docker中心也使用清单文件? 我可以看到他们包含每层的图层和哈希值,但是我仍然不清楚docker如何生成/使用它们。

容器清单的目的是什么?

清单types实际上是一个命名/标记图像的JSON描述。 这个描述(manifest)是为了容器的运行时间,比如Docker引擎。

声称拥有Docker发行版v2 API / v2.2映像规范支持的任何registry或运行时将与各种清单types进行交互,以查找:

  1. 什么实际的文件系统内容(层)将需要build立容器的根文件系统,和..
  2. 任何知道如何使用这个图像来运行容器所需的特定图像configuration。 例如,启动容器时运行的命令(可能在用于构build映像的Dockerfile表示)等信息。

作为前面提到的答案,与registry交谈的客户端(例如docker pull实现)将通过Docker v2 API进行交互,以首先获取特定图像/标签的清单,然后确定要下载的内容以及能够根据这个图像运行一个容器。 v2清单格式没有签名编码,但使用像公证服务器这样的工具进行的外部validation可以用来validation内容的相同“blob”/哈希上的外部签名,以获得完整的encryption信任。 Docker将这个“Docker Content Trust”称为“Docker Content Trust”,但在与registry交谈时不需要它,在与图像registry交谈时也不是APIstream的一部分。

有关v2.2规范中的清单的其他细节:不仅有标准清单types,而且还有清单清单types,它允许注册pipe理机构在单个“ image:tag ”下表示对多个平台(CPU或操作系统变体)的支持“参考。 清单列表只是一个平台条目列表,其中包含redirect到现有清单的平台条目,以便引擎可以检索该特定平台/体系结构组合的正确组件。 在今天的DockerHub中,所有官方图像现在都是清单列表,允许使用相同图像name:tag组合支持多个平台。 我有一个工具可以查询registry中的条目,并显示它们是否是清单列表,还可以转储清单的内容 – 清单清单和“常规”清单。 你可以阅读更多清单工具GitHub存储库 。

从容器devise的这个谈话中滑动12也有清单列表链接到清单的一个很好的graphics表示,表示特定平台的图像configuration和图层。

imageJSON清单单个图层文件的组合 。 拉图像的过程围绕检索这两个组件。 所以,当你拉一个图像文件:

  1. 获得清单:

     GET /v2/<name>/manifests/<reference> 
  2. 清单在手中时,客户必须validation签名以确保名称和图层的有效性。

  3. 然后,客户端将使用摘要下载单个图层。 在V2registryAPI中,图层以blobsforms存储,并按摘要键入。