容器和图像。

图像是一堆只读层的统一透视图。也许这个定义有些难以理解。下图可以帮助读者理解图像的定义。

从左边,我们看到多个只读层,它们重叠在一起。除了底层,其他所有层都有一个指向下一层的指针。这些层是Docker内部的实现细节,可以在主机的文件系统中访问。Union文件系统技术可以将不同的层集成到一个文件系统中,为这些层提供统一的视角,从而隐藏多个层的存在。从用户的角度来看,只有一个文件系统。我们可以在图的右边看到这个透视图的形式。

您可以在您的主机文件系统上找到关于这些层的文件。应该注意的是,这些层在运行的容器中是不可见的。

/var/lib/docker/

├── aufs

├──集装箱

├──图

├──初始化

├──链接图. db

├──知识库

├── tmp

├──信托

└──卷

7个目录,2个文件

容器的定义和图像几乎一样,也是一堆层的统一视角。唯一的区别是容器的顶层是可读和可写的。

容器的定义没有提到容器是否正在运行。

重点:容器=镜像+可读层。并且容器的定义没有提到是否运行容器。

运行容器定义为一个读写统一的文件系统加上一个隔离的进程空间和其中包含的进程。下图显示了运行中的容器。

正是文件系统隔离技术使Docker成为一项有前途的技术。容器中的进程可以修改、删除和创建文件,这些更改将应用于读写层。下图就是这种行为。

即使ubuntu容器不再运行,新文件仍然可以在主机的文件系统中找到。

/var/lib/docker/aufs/diff/860 a7b...889/happy . txt

为了整合分散的数据,我们提出了图像层的概念。下图描述了一个镜像层。通过图片我们可以发现,一个层不仅包含了文件系统的变化,还包含了其他重要信息。

元数据是关于这一层的额外信息,它不仅使Docker能够在运行时和构建时获得信息,还包括父层的层次信息。应当注意,只读层和读写层都包含元数据。

此外,每个层都包含一个指向父层的指针。如果一个层没有这个指针,这意味着它在底部。

元数据位置:

在我自己的主机上,图像层的元数据保存在一个名为“json”的文件中,例如:

/var/lib/docker/graph/e809f 156 DC 985.../json

E809f156dc985...是这层楼的id。

一个容器的元数据似乎被分成了许多文件,但是可以在/var/lib/docker/containers/中找到

参考docker容器和镜像差异