Sta*_*tko 11 hash docker dockerhub docker-pull
我想问一下为什么在拉docker镜像时需要指定名称和摘要?
docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Run Code Online (Sandbox Code Playgroud)
仅仅传递摘要是不够的,还是摘要在整个 docker 存储库的上下文中不够独特?
例如像这样:
docker pull sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Run Code Online (Sandbox Code Playgroud)
BMi*_*tch 20
由于注册表 API 的设计方式,该名称是必需的。docker 中的镜像全部返回到注册服务器上的存储库。存储库是服务器上的路径,包含多个图像清单以及其他 blob(图像配置、图层以及摘要拉取的可能其他数据)。
针对存储库而不是整个注册表运行所有 API 请求的一个关键原因是处理授权。否则,每个摘要请求都需要对引用该摘要的所有存储库进行反向查找,并查看用户是否有权访问该摘要。
您也不会针对某些全局注册表名称空间运行请求,因为有多个注册表,并且可以轻松创建新注册表。Docker Hub 可能是最受欢迎的,但也有大多数云提供商、CI 提供商(如 GitHub 和 GitLab)的注册表,以及公司网络、自己的生产集群和开发人员笔记本电脑上的自托管注册表。因此,该请求可能花费的时间没有上限,并且需要一种发现方法来查找新的注册表,包括那些可能已在您的专用网络中创建的注册表。
为了更深入地了解,pull 的 api将请求:
Run Code Online (Sandbox Code Playgroud)GET /v2/<name>/manifests/<reference>
名称和参考参数用于标识图像并且是必需的。参考文献可以包括标签或摘要。
(该文档中引用的“名称”是存储库名称。)
docker 命令反映了此 API 设计,需要镜像名称。如果您省略标签或摘要,它将使用“最新”作为默认值。当您省略注册表名称时,它默认为 Docker Hub。如果您还省略了用户名,它会在注册表名称前加上library/
Docker Hub 上所有官方映像所在位置的前缀。
因此,拉取请求ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
将变成对registry-1.docker.io
存储库(Docker Hub 的注册表 API 服务器)的请求library/ubuntu
,并引用您列出的 sha256。
尝试从拉取中省略存储库名称将导致无效的语法(docker 将其称为参考格式),因为它无法从无到有推断存储库并且没有默认存储库名称。
您必须将图像选项传递给您的命令,如下所示:
docker image pull [OPTIONS] NAME:[TAG@DIGEST]
例如:
docker image pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Run Code Online (Sandbox Code Playgroud)
Ita*_*ing -2
图像是从注册表中提取的。镜像名称包含注册表,例如quay.io/yourgroup/yourimage
从quay.io
服务器拉取。
但ubuntu
你说不包括服务器名称?
如果没有服务器名称,则默认为 Docker Hub,又名docker.io
。所以ubuntu
与 相同docker.io/library/ubuntu
。
因此,您需要拥有名称,以便它知道要与哪个映像注册服务器通信。
归档时间: |
|
查看次数: |
6354 次 |
最近记录: |