docker中图层和图像之间的区别是什么?

时间:2015-09-23 11:24:03

标签: image docker

我知道图像由许多层组成。 例如,如果您运行“docker history [Image]”,您可以获得一系列ID,顶部的ID与图像ID相同,其余ID是图层ID。

在这种情况下,这些休息层ID是否与其他一些图像相对应?如果是,我可以将图层视为图像吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

来自docker documentation:

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

Docker如此轻量级的原因之一是因为这些层。当您更改Docker镜像时 - 例如,将应用程序更新为新版本 - 将构建一个新层。因此,不像替换虚拟机那样替换整个映像或完全重建,而是仅添加或更新该层。现在您不需要分发全新的图像,只需更新,从而使分发Docker图像的速度更快,更简单。

我喜欢看这些东西的方式就像备份类型。我们可以创建完整备份,然后创建增量备份。完整备份不会更改(尽管在某些系统中,为了减少每次增量备份后的恢复时间,更改完整备份以包含更改,但对于此讨论,我们可以忽略此情况)并且只是以单独的方式备份更改。所以我们可以有不同的备份层,就像我们有不同的图像层。

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

Docker image vs container

Finding the layers and layer sizes for each Docker image

答案 2 :(得分:0)

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

从Docker集线器中拉取映像时,“层”具有“”映像ID。 当您提交对本地生成的图像的更改时,这些图层将具有图像ID。直到您推送到Dockerhub为止。对于所有其他拉出您上传的图像的用户,只有叶子图像将具有图像ID。