docker中的图层和图像有啥区别?
Posted
技术标签:
【中文标题】docker中的图层和图像有啥区别?【英文标题】:What's the differences between layer and image in docker?docker中的图层和图像有什么区别? 【发布时间】:2015-12-20 16:39:04 【问题描述】:我知道图像由许多层组成。 例如,如果你运行“docker history [Image]”,你可以得到一个id的序列,并且最上面的ID与图像id相同,其余的ID都是层ID。
在这种情况下,这些休息层 ID 是否对应于其他一些图像?如果是真的,我可以将图层视为图像吗?
【问题讨论】:
【参考方案1】:Layers 是 Docker 镜像和 Docker 容器的文件系统。
感谢层,当您pull a image 时,您最终不必下载其所有文件系统。如果您已经有另一个图像,其中包含您拉取的图像的某些层,则实际上只会下载缺少的层。
这些休息层 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
【讨论】:
【参考方案2】:图层和图像并非严格意义上的同义词。 https://windsock.io/explaining-docker-image-ids/
当您从 Docker 中心拉取图像时,“层”具有“”个图像 ID。 当您提交对本地构建的图像的更改时,这些层将具有图像 ID。直到你推送到 Dockerhub。只有叶图像具有所有其他用户拉取您上传的图像的图像 ID。
【讨论】:
【参考方案3】:来自docker documentation:
Docker 映像是只读模板。例如,图像可能包含安装了 Apache 和 Web 应用程序的 Ubuntu 操作系统。镜像用于创建 Docker 容器。 Docker 提供了一种构建新镜像或更新现有镜像的简单方法,或者您可以下载其他人已经创建的 Docker 镜像。 Docker 镜像是 Docker 的构建组件。 每个图像由一系列层组成。 Docker 利用联合文件系统将这些层组合成一个图像。联合文件系统允许不同文件系统(称为分支)的文件和目录透明地叠加,形成一个单一的连贯文件系统。
Docker 如此轻量级的原因之一是这些层。当您更改 Docker 映像时(例如,将应用程序更新到新版本)时,将构建一个新层。因此,不像您对虚拟机所做的那样替换整个映像或完全重建,只需添加或更新该层。现在您无需分发全新的镜像,只需更新即可,让 Docker 镜像的分发更快更简单。
我喜欢看待这些事情的方式就像备份类型。我们可以创建完整备份,然后创建增量备份。完整备份不会更改(尽管在某些系统中为了减少每次增量备份后的还原时间,完整备份会更改以包含更改,但对于本次讨论,我们可以忽略这种情况)并且仅以单独的方式备份更改。所以我们可以有不同的备份层,就像我们有不同的图像层一样。
编辑: 查看以下链接了解更多信息:
Docker image vs container
Finding the layers and layer sizes for each Docker image
【讨论】:
以上是关于docker中的图层和图像有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
alpine docker image 和 busybox docker image 有啥区别?