| layout | title | nav\_order | parent |
| --- | --- | --- | --- |
| default| Content Addressability | 4| Introduction |
# [](https://github.com/opencontainers/.github/blob/master/docs/docs/introduction/digests.md#content-addressability)Content Addressability
内容寻址能力很重要,因此您可以提出自己的要求。当您从注册表中请求(拉出)容器时,注册表可能会提供[内容可寻址的存储](https://en.wikipedia.org/wiki/Content-addressable_storage)或某种类似的机制,以确保您*准确地*获得了所请求的内容。
## 唯一资源标识符
我们如何索要容器?我们要求一个唯一的资源标识符(uri),大致以这种形式出现:
~~~
<registry>/<project>/<container>:<tag>@<digest>
~~~
对于许多用户,上面的示例以一种熟悉的格式给出-一个服务器(注册表)具有较高级别的项目或组织(项目),在该项目下,一组具有不同版本的容器名称(标记和digets)。有些人可能会将整个第一个地址合并到一个通用标签“namespace”中:
~~~
<namespace>:<tag>@<digest>
~~~
出于我们的目的,让我们使用语言来描述Docker Hub(注册表)上存储库的具体示例:
~~~
<registry>/<organization>/<repository>:<tag>@<digest>
~~~
* *注册表*:通常是一台运行带有API的软件的服务器,可与之交互以提取图像。在此示例中,Docker Hub是我们的注册表。
* *Organization*:是名称空间的一部分,并且是地址的一部分(更易于理解)。
* *存储库*是特定的容器。在Docker Hub上,这可能来自用户直接推送容器,或者来自连接的Webhook的自动构建。
让我们更具体地说明这个例子。这[是](https://hub.docker.com/_/busybox)Docker Hub上[的busybox](https://hub.docker.com/_/busybox)容器。我要拉它!
我可能会这样做:
~~~shell
$使用默认标签:最新
最新:从库/忙箱中拉出
697743189b6d:拉出完成
摘要:sha256:061ca9704a714ee3e8b80523ec720c64f6209ad3f97c0ff7cb9ec7d19f15149f
状态:为busybox下载的较新图像:最新
~~~
太好了,我最终得到一个特定的标签(默认为“ latest”,并显示了我的容器的摘要),但是如果我想再次拉出容器,是否以相同的方式进行操作?好吧,看看“最新”(最近更新)的更改,[您会发现](https://hub.docker.com/_/busybox?tab=tags)我可能会得到一个不同的容器。
一个(稍微)更好的交互可能一直在要求一个特定的标签:
~~~shell
$ docker pull busybox:1.30.1
1.30.1:从库/忙箱中拉出
摘要:sha256:061ca9704a714ee3e8b80523ec720c64f6209ad3f97c0ff7cb9ec7d19f15149f
状态:下载更新的图像为busybox的:1.30.1
~~~
引用容器的最佳方法可能不是最佳方法,因此所使用的方法会因项目而异。
~~~shell
$ docker pull busybox @ sha256:061ca9704a714ee3e8b80523ec720c64f6209ad3f97c0ff7cb9ec7d19f15149f
~~~