Docker存储驱动及其选择
概述
理想情况下,只有很少的数据需要写入容器的可写层,更多的情形是用 Docker卷来写入数据。但是,有些工作负荷要求写入容器的可写层,这就需要使用存储驱动。存储驱动控制镜像和容器在 Docker主机上的存储和管理方式,Doker通过插件机制支持以下几种不同的存储驱动:
1.Docker存储驱动与联合文件系统
联合文件系统(Union file systems 或 UnionFS)是一种为 Linux、FreeBSD和 NetBSD 操作系统设计的,将其他文件系统合并到一个联合挂载点的文件系统,它通过创建层进行操作,非常轻巧和快速。Docker引擎使用它为容器提供内部存储。Docker引擎可以使用联合文件系统的多种变体,包括AUFS、OverlayFS、Btrfs、BFS 和 DeviceMapper等。
这些联合文件系统实际上是由存储驱动实现的,相应的存储驱动有 aufs、overlay、overlay2、devicemapper、btrfs、zfs、vfs等
2. 选择 Docker 存储驱动的总体原则
各种Docker存储驱动都能实现分层的架构,同时又有各自的特性。Docker本身仍然处于不断发展中,没有一个存储驱动能够适应所有的情形。但是,为工作负载选择适合的存储驱动可依据以下原则:
在最常用的场合使用具有最佳整体性能和稳定性的存储驱动
如果内核支持多个存储驱动,则Docker会提供要使用的存储驱动的优先级列表。存储驱动选择顺序是在Docker的源代码中定义的
优先使用Linux发行版默认的存储驱动。Docker安装时会根据当前系统的配置选择默认的存储驱动。如果没有显式配置存储驱动,则表明该存储驱动满足先决条件,这就是默认驱动。默认驱动具有较好的稳定性,已经在该发行版上经过了严格的测试。
一些存储驱动要求使用特定格式的底层文件系统,这可能会限制选择
选择存储驱动还要取决于工作负载的特征和所需的稳定性级别
3.主流的 Docker 存储驱动
对于所有当前支持的 Linux发行版,overlay2存储驱动是首选,不需要任何额外配置