根据联合文件系统,图像实际上是容器的另一个图像吗?

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

在Docker中,图像是一堆只读图像层。我们也知道图像共享图层或其他图像。我的问题是关于这种共享机制如何运作。

图像是否具有指向Docker存储驱动程序的指针,或者它们实际上是否包含其他图层?如果第一个是真的,这是否意味着Dockerfile将这些层保存到守护进程中,图像是按顺序检索这些层的指令?

docker device-mapper ufs
1个回答
0
投票

这取决于你的storage driver

docker layers

Docker使用存储驱动程序来管理图像层和可写容器层的内容。 每个存储驱动程序以不同方式处理实现,但所有驱动程序都使用可堆叠图像层和写时复制(CoW)策略。

写时复制是一种共享和复制文件的策略,可实现最高效率。

  • 如果文件或目录存在于图像中的较低层,而另一层(包括可写层)需要对其进行读访问,则它只使用现有文件。
  • 第一次另一个图层需要修改文件时(构建图像或运行容器时),文件将被复制到该图层并进行修改。这最小化了I / O和每个后续层的大小。

现在,在运行时:

启动容器时,会在其他图层的顶部添加一个薄的可写容器图层。容器对文件系统所做的任何更改都存储在此处。容器未更改的任何文件都不会复制到此可写层。这意味着可写层尽可能小。

当修改容器中的现有文件时,存储驱动程序将执行写时复制操作。涉及的具体步骤取决于特定的存储驱动程序。

默认驱动程序是aufs,以及overlayoverlay2驱动程序。 但是Btrfs,ZFS和其他驱动程序以不同的方式处理写时复制。

但无论如何,CoW仍然是关键:

写入时复制不仅节省了空间,而且还减少了启动时间。当您启动容器(或来自同一图像的多个容器)时,Docker只需要创建可写的容器图层。

如果Docker每次启动新容器时都必须制作底层映像堆栈的完整副本,则容器启动时间和使用的磁盘空间将显着增加。

在“Select a storage driver”上查看更多信息。

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