Docker中层(layer)和镜像(image)有什么区别?

7

我知道一张图片由许多层组成。

例如,如果您运行“docker history [Image]”,您可以得到一系列ID,顶部的ID与图像ID相同,其余ID是层ID。

在这种情况下,这些剩余的层ID是否对应于其他图像?如果是这样,我可以将一个层视为一张图片吗?

3个回答

4

是组成Docker镜像和Docker容器文件系统的基础。

多亏了层,当你拉取一个镜像时,你最终不需要下载其整个文件系统。如果你已经有另一个具有所拉取镜像某些层的镜像,则只会下载缺少的层。

这些剩余的层ID是否对应于其他镜像?

是的,它们就像镜像一样,但没有任何标签来识别它们。

我可以将一个层视为一个镜像吗?

可以。


展示案例

docker pull busybox
docker history busybox
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
d7057cb02084        39 hours ago        /bin/sh -c #(nop) CMD ["sh"]                    0 B
cfa753dfea5e        39 hours ago        /bin/sh -c #(nop) ADD file:6cccb5f0a3b3947116   1.096 MB
现在,从层cfa753dfea5e创建一个新的容器,就像它是一个镜像一样:
docker run -it cfa753dfea5e sh -c "ls /"
bin   dev   etc   home  proc  root  sys   tmp   usr   var

1

图层和镜像并非严格同义词。 https://windsock.io/explaining-docker-image-ids/

当你从Docker Hub拉取镜像时,"图层"具有"镜像ID"。 当你提交更改到本地构建的镜像时,这些图层将具有镜像ID,直到你将其推送到Docker Hub。只有叶子镜像将为所有其他用户拉取你上传的镜像的镜像ID。


0

来自docker文档:

Docker镜像是只读模板。例如,一个镜像可以包含安装了Ubuntu操作系统、Apache和您的Web应用程序的内容。镜像用于创建Docker容器。Docker提供了一种简单的方法来构建新的镜像或更新现有的镜像,或者您可以下载其他人已经创建的Docker镜像。Docker镜像是Docker的构建组件。 每个镜像由一系列层组成。Docker利用联合文件系统将这些层组合成单个镜像。联合文件系统允许透明地叠加分离的文件系统(称为分支)的文件和目录,形成一个统一的文件系统。

Docker如此轻量级的原因之一就是这些层。当您更改Docker镜像时,例如将应用程序更新到新版本,会构建一个新的层。因此,与虚拟机可能需要替换整个镜像或完全重建不同,只需添加或更新该层。现在,您不需要分发整个新镜像,只需更新,使分发Docker镜像更快速和简单。

我喜欢将这些事情看作是备份类型。我们可以创建完整的备份,然后创建增量备份。完整备份不会改变(尽管在某些系统中为了减少每个增量备份后恢复时间,完整备份会被更改以包含更改,但对于本讨论我们可以忽略此情况),只有更改以单独的方式进行备份。因此,我们可以拥有不同层次的备份,就像我们拥有不同层次的图像一样。

编辑: 查看以下链接获取更多信息:

Docker镜像与容器

查找每个Docker镜像的层和层大小


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接