图像和仓库之间有什么区别?

24 浏览
0 Comments

图像和仓库之间有什么区别?

我对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”等。我还注意到,在其他人的机器上,由于映像可以有多个标记,因此此列表通常包含重复条目-每个标记一个。那么这是映像列表,存储库列表,映像标签组合列表还是其他什么?映像和存储库之间有什么区别?

此外,鉴于映像和存储库是不同的事物,我如何只列出我的存储库?

这与容器无关。

admin 更改状态以发布 2023年5月24日
0
0 Comments

引用自官方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/whalesayhello-world),它们只包含一个已标记的镜像(称为latest,这意味着实际上没有标记,显示的是最新的镜像)。

0
0 Comments

是的,这个术语非常令人困惑。

最简单的答案:

Image:单个镜像。

Repository:镜像集合。

详细说明:

Image:由唯一的Image ID引用,即12位数字的十六进制代码(例如91c95931e552)。[1]

Repository:包含一个或多个图像。因此,hello-world存储库可以包含两个不同的图像:91c95931e5521234abcd5678

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/whalesayhello-world

图像为fb434121fc7791c95931e5521234abcd5678。请注意,第2行和第3行具有相同的Image ID,因此它们是相同的图像。

图像别名为:

docker/whalesay:latest
hello-world:latest
hello-world:v1.1
hello-world:v1.0

因此,hello-world:latesthello-world:v1.1只是同一图像的两个别名。

其他详细资料:

  • Repository name的格式也可以在使用Docker Hub等公共注册表时添加可选的用户或命名空间,这在避免存储库名称冲突时很有用。例如docker/whalesay。否则,您将有很多存储库名称冲突。

  • 如果在引用图像别名时省略了tag,系统将自动添加:latest。因此,当您指定hello-world时,它将被解释为hello-world:latest。警告:实际上latest并没有任何特殊含义,它只是默认标签。

  • [1]实际上,完整的Image ID是一个截断为12位数字的64位十六进制代码,但您不需要关心它。

0