按摘要拉取 docker 个图像
Pulling docker image by digest
请问为什么拉取docker镜像时需要同时指定name和digest?
docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
仅仅传递摘要还不够吗,或者摘要在整个docker存储库的上下文中不够唯一?
例如这样的:
docker pull sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
图像是从注册表中提取的。图像名称包括注册表,例如quay.io/yourgroup/yourimage
从 quay.io
服务器拉取。
但是ubuntu
不包括服务器名称,你说?
如果没有服务器名称,则默认为 Docker 集线器,又名 docker.io
。所以 ubuntu
与 docker.io/library/ubuntu
相同。
因此,您需要知道名称,以便它知道要与哪个图像注册服务器通信。
摘要在 docker 存储库中的所有图像中可能是唯一的,但您认为更常见的用法是什么?拉取名为 ubuntu
的镜像还是拉取名为 sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
的镜像?
使用摘要拉取也不常见。使用图像标签。
例如:docker pull ubuntu:16.04
解法:
您必须将 image 选项传递给您的命令,如下所示:
docker image pull [OPTIONS] NAME:[TAG@DIGEST]
例如:(ubuntu 18.04)
docker image pull ubuntu:18.04@sha256:98706f0f213dbd440021993a82d2f70451a73698315370ae8615cc468ac06624
由于注册表 API 的设计方式,因此需要该名称。图像拉入 docker 全部返回到注册表服务器上的存储库。存储库是服务器上的一条路径,包含多个图像清单以及其他 blob(图像配置、层,以及可能由摘要提取的其他数据)。
运行 所有 API 对存储库而不是整个注册表的请求的一个关键原因是处理授权。否则,每个摘要请求都需要对引用该摘要的所有存储库进行反向查找,并查看用户是否有权访问该摘要。
您也不会 运行 对某个全局注册表命名空间的请求,因为有多个注册表,并且可以轻松创建新的注册表。 Docker Hub 可能是最受欢迎的,但也有大多数云提供商的注册表,CI 提供商,如 GitHub 和 GitLab,以及公司网络上的自托管注册表,在他们自己的生产集群中,以及开发人员笔记本电脑。因此,该请求可能需要多长时间没有上限,并且需要一种发现方法来查找新的注册表,包括那些可能已经在您的专用网络中创建的注册表。
要进行更深入的研究,api for a pull 将请求:
GET /v2/<name>/manifests/<reference>
The name and reference parameter identify the image and are required. The reference may include a tag or digest.
(该文档中引用的“名称”是存储库名称。)
docker 命令反映了这个 API 设计,需要图像名称。如果您离开标签或摘要,它将使用“最新”作为默认值。当您离开注册表名称时,它默认为 Docker Hub。如果您还遗漏了用户名,它会在注册表名称前加上 library/
前缀,其中所有官方图像都位于 Docker Hub 上。
因此 ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
的拉取请求将变成对 registry-1.docker.io
(Docker Hub 的注册表 API 服务器)的请求 library/ubuntu
参考你列出的 sha256。
尝试从拉取中删除存储库名称将导致语法无效(docker 将此称为引用格式),因为它无法从无到有地推断存储库并且没有默认存储库名称。
请问为什么拉取docker镜像时需要同时指定name和digest?
docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
仅仅传递摘要还不够吗,或者摘要在整个docker存储库的上下文中不够唯一?
例如这样的:
docker pull sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
图像是从注册表中提取的。图像名称包括注册表,例如quay.io/yourgroup/yourimage
从 quay.io
服务器拉取。
但是ubuntu
不包括服务器名称,你说?
如果没有服务器名称,则默认为 Docker 集线器,又名 docker.io
。所以 ubuntu
与 docker.io/library/ubuntu
相同。
因此,您需要知道名称,以便它知道要与哪个图像注册服务器通信。
摘要在 docker 存储库中的所有图像中可能是唯一的,但您认为更常见的用法是什么?拉取名为 ubuntu
的镜像还是拉取名为 sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
的镜像?
使用摘要拉取也不常见。使用图像标签。
例如:docker pull ubuntu:16.04
解法:
您必须将 image 选项传递给您的命令,如下所示:
docker image pull [OPTIONS] NAME:[TAG@DIGEST]
例如:(ubuntu 18.04)
docker image pull ubuntu:18.04@sha256:98706f0f213dbd440021993a82d2f70451a73698315370ae8615cc468ac06624
由于注册表 API 的设计方式,因此需要该名称。图像拉入 docker 全部返回到注册表服务器上的存储库。存储库是服务器上的一条路径,包含多个图像清单以及其他 blob(图像配置、层,以及可能由摘要提取的其他数据)。
运行 所有 API 对存储库而不是整个注册表的请求的一个关键原因是处理授权。否则,每个摘要请求都需要对引用该摘要的所有存储库进行反向查找,并查看用户是否有权访问该摘要。
您也不会 运行 对某个全局注册表命名空间的请求,因为有多个注册表,并且可以轻松创建新的注册表。 Docker Hub 可能是最受欢迎的,但也有大多数云提供商的注册表,CI 提供商,如 GitHub 和 GitLab,以及公司网络上的自托管注册表,在他们自己的生产集群中,以及开发人员笔记本电脑。因此,该请求可能需要多长时间没有上限,并且需要一种发现方法来查找新的注册表,包括那些可能已经在您的专用网络中创建的注册表。
要进行更深入的研究,api for a pull 将请求:
GET /v2/<name>/manifests/<reference>
The name and reference parameter identify the image and are required. The reference may include a tag or digest.
(该文档中引用的“名称”是存储库名称。)
docker 命令反映了这个 API 设计,需要图像名称。如果您离开标签或摘要,它将使用“最新”作为默认值。当您离开注册表名称时,它默认为 Docker Hub。如果您还遗漏了用户名,它会在注册表名称前加上 library/
前缀,其中所有官方图像都位于 Docker Hub 上。
因此 ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
的拉取请求将变成对 registry-1.docker.io
(Docker Hub 的注册表 API 服务器)的请求 library/ubuntu
参考你列出的 sha256。
尝试从拉取中删除存储库名称将导致语法无效(docker 将此称为引用格式),因为它无法从无到有地推断存储库并且没有默认存储库名称。