如果从同一个docker文件中推送两个图像,Docker注册表空间

问题描述 投票:0回答:1

当从同一个docker文件创建映像时,docker注册表服务器空间端会发生什么。因此,例如在下面的情况下,如果我使用标签1.0推送图像,然后使用相同的docker文件创建另一个图像并使用标签1.1推送它。是否会在docker注册表中占用任何额外空间?

docker build . -t myRegistry.com/myImage:1.0
docker push myRegistry.com/myImage:1.0

docker build . -t myRegistry.com/myImage:1.1
docker push myRegistry.com/myImage:1.1

docker build . -t myRegistry.com/myImage:1.2
docker push myRegistry.com/myImage:1.2

docker build . -t myRegistry.com/myImage:1.3
docker push myRegistry.com/myImage:1.3
docker docker-registry
1个回答
1
投票

在您的示例中,容器注册表将使用相同的图像,该图像由图像的sha256值(也称为IMAGE ID)计算 - 标记只是该唯一图像的别名。

这是一对多关系,即您可以将许多标签指向同一图像。您可以使用docker images --no-trunc查看IMAGE ID的完整值。 (注意,如果使用常见标记(如“latest”或“develop”)存在一致性问题,这很有用,因为除非使用sha256值,否则无法确定它实际上是哪个图像。)

对于不同机器/环境上的构建,使用具有相同文件的相同Dockerfile可能会产生相同的哈希值,但depends on many variables表示依赖项的动态性,时间戳已更改等。

正如@Henry所提到的,这进一步适用于(主要是在幕后)图像的各个层:

Docker镜像具有中间层,通过允许缓存每个步骤来提高可重用性,减少磁盘使用并加速docker build。默认情况下不显示这些中间层。

see docs

顺便说一句,要查看容器的sha256值以查看它来自哪个图像,你可以inspect它,例如,docker inspect --format='{{index .RepoDigests 0}}' mongo:3.4-jessie

© www.soinside.com 2019 - 2024. All rights reserved.