Docker 存储
UnionFS 联合文件系统
联合文件系统(Union File System,Unionfs)是一种分层的轻量级文件系统,它可以把多个目录内容联合挂载到同一目录下,从而形成一个单一的文件系统,这种特性可以让使用者像是使用一个目录一样使用联合文件系统。
联合文件系统是 Docker 镜像和容器的基础,可以使 Docker 把镜像做成分层的结构,从而使得镜像的每一层可以被共享。例如两个业务镜像都是基于 CentOS 7 镜像构建的,那么这两个业务镜像在物理机上只需要存储一次 CentOS 7 这个基础镜像即可,从而节省大量存储空间。
联合文件系统在主机上使用多层目录存储,但最终呈现给用户的则是一个普通单层的文件系统,我们把多层以单一层的方式呈现出来的过程叫作联合挂载。
Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是UnionFS,UnionFS是一种分层、轻量级并且高性能的文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
Docker 中使用的 AUFS(Advanced Multi-Layered Unification Filesystem)就是一种联合文件系统。 AUFS
支持为每一个成员目录(类似 Git 的分支)设定只读(readonly)、读写(readwrite)和写出(whiteout-able)权限, 同时 AUFS
里有一个类似分层的概念, 对只读权限的分支可以逻辑上进行增量地修改(不影响只读部分的)。
Docker 目前支持的联合文件系统包括 OverlayFS
, AUFS
, Btrfs
, VFS
, ZFS
和 Device Mapper
。
各 Linux 发行版 Docker 推荐使用的存储驱动如下表。
Docker on Ubuntu
overlay2
(16.04 +)
Docker on Debian
overlay2
(Debian Stretch), aufs
, devicemapper
Docker on CentOS
overlay2
Docker on Fedora
overlay2
在可能的情况下,推荐 使用 overlay2
存储驱动,overlay2
是目前 Docker 默认的存储驱动,以前则是 aufs
。
最后更新于