我知道一张图片由许多层组成。
例如,如果您运行“docker history [Image]”,您可以得到一系列ID,顶部的ID与图像ID相同,其余ID是层ID。
在这种情况下,这些剩余的层ID是否对应于其他图像?如果是这样,我可以将一个层视为一张图片吗?
层是组成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
图层和镜像并非严格同义词。 https://windsock.io/explaining-docker-image-ids/
当你从Docker Hub拉取镜像时,"图层"具有"镜像ID"。 当你提交更改到本地构建的镜像时,这些图层将具有镜像ID,直到你将其推送到Docker Hub。只有叶子镜像将为所有其他用户拉取你上传的镜像的镜像ID。
Docker镜像是只读模板。例如,一个镜像可以包含安装了Ubuntu操作系统、Apache和您的Web应用程序的内容。镜像用于创建Docker容器。Docker提供了一种简单的方法来构建新的镜像或更新现有的镜像,或者您可以下载其他人已经创建的Docker镜像。Docker镜像是Docker的构建组件。 每个镜像由一系列层组成。Docker利用联合文件系统将这些层组合成单个镜像。联合文件系统允许透明地叠加分离的文件系统(称为分支)的文件和目录,形成一个统一的文件系统。
Docker如此轻量级的原因之一就是这些层。当您更改Docker镜像时,例如将应用程序更新到新版本,会构建一个新的层。因此,与虚拟机可能需要替换整个镜像或完全重建不同,只需添加或更新该层。现在,您不需要分发整个新镜像,只需更新,使分发Docker镜像更快速和简单。
我喜欢将这些事情看作是备份类型。我们可以创建完整的备份,然后创建增量备份。完整备份不会改变(尽管在某些系统中为了减少每个增量备份后恢复时间,完整备份会被更改以包含更改,但对于本讨论我们可以忽略此情况),只有更改以单独的方式进行备份。因此,我们可以拥有不同层次的备份,就像我们拥有不同层次的图像一样。
编辑: 查看以下链接获取更多信息: