目录
Docker for Mac和Docker for Windows
Docker存储驱动所支持的底层文件系统 编辑 选择存储驱动需考虑的其他事项
默认在容器中创建的所有文件保存在可写的容器层中,这类存储的问题如下:
一、Docker存储驱动
联合文件系统(UnionFS)是一种为Linux、FreeBSD和NetBSD操作系统设计的,将其他文件系统合并到一个联合挂载点的文件系统
Docker引擎可以使用联合文件系统的多种变体
AUFS
OverlayFS
Btrfs
BFS
DeviceMapper
联合文件系统实际上是由存储驱动实现的,相应的存储驱动有aufs、overlay、overlay2、devicemapper、btrfs、zfs、vfs等
1、选择Docker存储驱动的总体原则
在最常用的场合使用具有最佳整体性能和稳定性的存储驱动
如果内核支持多个存储驱动,则Docker会提供要使用的存储驱动的优先级列表
优先使用Linux发行版默认的存储驱动
一些存储驱动要求使用特定格式的底层文件系统,这可能会限制选择
选择存储驱动还要取决于工作负载的特征和所需的稳定性级别
2、Docker版本所支持的存储驱动
Docker引擎企业版和Docker EE
对于Docker引擎企业版和Docker EE来说,支持存储驱动的决定性资源是产品兼容性矩阵。建议用户迁移到overlay2存储驱动
Docker CE
对于Docker CE来说,只有部分配置被测试过,并且操作系统的内核不可能支持每个存储驱动
最佳配置是使用带有支持overlay2存储驱动的内核的现代Linux发行版,并且对于大量的工作负载要使用Docker卷写入,而不是将数据写入容器的可写层
Docker for Mac和Docker for Windows
这两个版本的Docker仅用于开发,而不能用于生产环境,不支持定义存储驱动
Docker存储驱动所支持的底层文件系统
选择存储驱动需考虑的其他事项
适合工作负载
aufs、overlay和overlay2存储驱动的所有操作都在文件级而不是块级,能更有效地使用内存,但容器的可写层可能在写入繁重的工作负载中变得相当大
块级存储驱动(如devicemapper、btrfs和zfs存储驱动)在写入繁重的工作负载时表现得更好
写入大量的小数据,或有很多层的容器,或深层文件系统,overlay存储驱动比overlay2存储驱动性能更好
btrfs和zfs存储驱动需要更多内存
zfs存储驱动是高密度工作负载(如PaaS)的理想选择
共享存储系统
多数情况下Docker可以在SAN、NAS、硬件RAID或其他共享存储系统上工作,但Docker并没有与它们紧密集成
每个Docker存储驱动都基于Linux文件系统或卷管理器。
稳定性
overlay2、aufs、overlay和devicemapper存储驱动的稳定性更高
测试工作负载
在不同的存储驱动上运行工作负载时,可以测试Docker的性能
检查当前的存储驱动
使用docker info命令查看Docker当前使用的存储驱动,从输出的结果中查找“Storage Driver”部分:
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
可以根据需要更改现有的存储驱动
建议在改变存储驱动之前使用docker save命令导出已创建的镜像,或将它们推送到Docker Hub或其他镜像注册中心,以免今后重建它们
更改存储驱动会使得现有的容器和镜像不可访问