图像和仓库之间有什么区别?
图像和仓库之间有什么区别?
我对Docker完全是新手,在遵循入门教程。在第7步中,它说:
输入
docker images
命令并按回车键。该命令列出本地系统上的所有映像。您应该在列表中看到docker / whalesay
。$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE docker/whalesay latest fb434121fc77 3 hours ago 247 MB hello-world latest 91c95931e552 5 weeks ago 910 B
但第一列明显显示“repository”,而不是“image name”等。我还注意到,在其他人的机器上,由于映像可以有多个标记,因此此列表通常包含重复条目-每个标记一个。那么这是映像列表,存储库列表,映像标签组合列表还是其他什么?映像和存储库之间有什么区别?
此外,鉴于映像和存储库是不同的事物,我如何只列出我的存储库?
这与容器无关。
引用自官方Docker文档:
一个存储库可能包含一个镜像的多个变体。
(见: https://docs.docker.com/userguide/dockerimages)
这意味着: 一个Docker镜像可以属于一个存储库,例如当它被推到Docker注册表(使用docker push my/reporitory:version1
)时。另一方面,存储库包含一个镜像的多个版本(=不同的标签)。因此,当您构建一个新版本的镜像时,可以给它一个标签(docker tag 518a41981a6a my/reporitory:version2
)并将其作为下一个版本(docker push my/reporitory:version2
)推送到您的存储库中。
这是来自Docker文档的一个示例(请参见上面的链接)。正如您所看到的,它显示了一个名为ouruser/sinatra
的存储库,其中包含同一个镜像的各种版本(latest
, devel
, v2
):
$ docker images ouruser/sinatra REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ouruser/sinatra latest 5db5f8471261 11 hours ago 446.7 MB ouruser/sinatra devel 5db5f8471261 11 hours ago 446.7 MB ouruser/sinatra v2 5db5f8471261 11 hours ago 446.7 MB
在您的示例中,您有两个存储库(docker/whalesay
和hello-world
),它们只包含一个已标记的镜像(称为latest
,这意味着实际上没有标记,显示的是最新的镜像)。
是的,这个术语非常令人困惑。
最简单的答案:
Image:单个镜像。
Repository:镜像集合。
详细说明:
Image:由唯一的Image ID
引用,即12位数字的十六进制代码(例如91c95931e552)。[1]
Repository:包含一个或多个图像。因此,hello-world
存储库可以包含两个不同的图像:91c95931e552
和1234abcd5678
。
Image alias
- 我将定义image alias
表示引用特定图像的别名。 image alias
的格式为repository:tag
。这样,您可以使用人性化的别名,例如hello-world:latest
,而不是12位数字代码。
例子:
假设我有这些图像:
REPOSITORY TAG IMAGE ID docker/whalesay latest fb434121fc77 hello-world latest 91c95931e552 hello-world v1.1 91c95931e552 hello-world v1.0 1234abcd5678
存储库为:docker/whalesay
,hello-world
。
图像为fb434121fc77
,91c95931e552
,1234abcd5678
。请注意,第2行和第3行具有相同的Image ID
,因此它们是相同的图像。
图像别名为:
docker/whalesay:latest hello-world:latest hello-world:v1.1 hello-world:v1.0
因此,hello-world:latest
和hello-world:v1.1
只是同一图像的两个别名。
其他详细资料:
-
Repository name
的格式也可以在使用Docker Hub等公共注册表时添加可选的用户或命名空间,这在避免存储库名称冲突时很有用。例如docker/whalesay
。否则,您将有很多存储库名称冲突。 -
如果在引用图像别名时省略了
tag
,系统将自动添加:latest
。因此,当您指定hello-world
时,它将被解释为hello-world:latest
。警告:实际上latest
并没有任何特殊含义,它只是默认标签。 -
[1]实际上,完整的Image ID是一个截断为12位数字的64位十六进制代码,但您不需要关心它。