先来看一下docker文件系统的一览图

docker文件add docker文件管理系统_数据

这张图可以基本说明docker存储结构的两种大的基本方式:

  1. 数据卷

数据卷即是我们可以通过-v 参数将主机目录或者主机设备挂载在我们的docker container中,这种方式是在I/O传输中最快的方式,因为不用通过docker文件系统,直接到达主机目录,适用于数据持久化和大文件传输。下面是数据卷系统的一览图:

docker文件add docker文件管理系统_文件系统_02

顺带一提的是,有不少研究docker存储系统与PM(持久化内存)结合的论文,都是用数据卷来进行研究。
从上面的volume存储层次可以看到:
Data Volume(数据卷) --> Backing File system(XFS,EXT4,etc.) -->就直接到了主机的设计(逻辑卷+物理卷)–> 到设备

  1. 不使用数据卷

如果不使用数据卷的话,就要通过一次的Storage Driver。由于有两种不同的文件系统,分别针对不同linux的发行版来定制,我们所采用的系统是centos,所以就以devicemapper为例:

docker文件add docker文件管理系统_docker_03

对于Docker来说,devicemapper存储驱动直接控制的是block device,我们利用LVM将block device视为我们的物理卷,然后进行对于不同的存储层分出逻辑卷来进行操作。
所以,针对于Docker 文件系统的层次,先由的APP -> Docker本身的分层文件系统的相关机制 -> 然后再到Backing File System(我们要针对block device 进行刷盘的操作):EXT4 -> 然后才是我们分出的逻辑卷的block device。

接下来就是我们的Host机,我们先来做一个验证,验证host上的块设备:

docker文件add docker文件管理系统_docker_04


Host机中,可以看到有loop1这个块设备,然后下面每一个挂载上去的子设备都是一个container,即每一个container的存储实际上是在对docker进行一个挂载。

docker文件add docker文件管理系统_docker_05

这是在Host机上面的所对应的两种映射方式,一个Direct-LVM ,一个Loop-LVM

docker文件add docker文件管理系统_docker_06

在Loop-LVM情况下,对于docker机来说的device,对于host机就成为了一个Data,MetaData两个文件。
如果是文件,那自然是要通过Host机的相关文件系统,才能到我们实际的SSD设备。
Direct-LVM可以直接拿Host机的块设备来使用,但不提供持久化的功能。