选择合适的 storage driver
Docker 支持多种不同的 storage driver, 使用 pluggable architecture。
storage driver决定了如何保存和管理image和container
选择合适的 storage driver,以下是几个比较重要的参考因素:
如果系统内核支持多种
storage driver,在没有指定storage driver的情况下,系统会按照以下优先级选择:aufs: 默认。最老的storage dirver,但是并不是所有系统都支持。btrfs,zfs: 使用配置最少的 。这些都依赖于文件系统(backing system) 正确配置- 否则,尝试在最常见的情况下使用具有最佳整体性能和稳定性的
storage driver。overlay2最佳,其次是overlay。这两者都不需要外配置。devicemapper再次,但要求direct-lvm的 生产环境(production environments),因为loopback-lvm在无配置的情况下,性能很低
- Docker 源码决定了
storage driver的顺序。
storage dirver可选列表依赖于docker 版本和系统版本aufs: Ubuntu and Debianbtrfs: SLES, 只支持 Docker EE- Support storage drivers per Linux distribution
部分
storage driver对文件系统有要求。结合以上限制,根据业务工作量选择合适的
storage driver。
Supported storage drivers per Linux distribution
不推荐使用需要 禁用(disable) 安全策略的 storage driver
- 在
CentOS上使用overlayoroverlay2需要禁用selinux
Docker EE and CS-Engine
看 Product compatibility matrix
Docker CE
In general, the following configurations work on recent versions of the Linux distribution
| Linux distribution | Recommended storage drivers |
|---|---|
| Docker CE on Ubuntu | aufs, devicemapper, overlay2 (Ubuntu 14.04.4 or later, 16.04 or later), overlay, zfs, vfs |
| Docker CE on Debian | aufs, devicemapper, overlay2 (Debian Stretch), overlay, vfs |
| Docker CE on CentOS | devicemapper, vfs |
| Docker CE on Fedora | devicemapper, overlay2 (Fedora 26 or later, experimental), overlay (experimental), vfs |
- 犹豫的时候,最好选用支持
overlay2的 linux 系统。 - 使用
Docker volume代替在writable layer上进行频繁的写入。 vfs不要选。除非你清楚的知道自己在做什么 its performance and storage characteristics and limitations.
注意:用常用的
storage drive才能方便的排错。
Docker for Mac and Docker for Windows
Docker for Mac and Docker for Windows are intended for development, rather than production. Modifying the storage driver on these platforms is not supported.
Supported backing filesystems
对 Docker 而言, backing filesystem 就是 /var/lib/docker/ 目录所在的文件系统格式。
一些 storage dirver 只能在特定的 backing filesystem 上工作
| Storage Driver | Supported backing filesystems |
|---|---|
overlay, overlay2 |
ext4, xfs |
aufs |
ext4, xfs |
devicemapper |
direct-lvm |
btrfs |
btrfs |
zfs |
zfs |
Other considerations
根据工作量选择
不同 storage driver 有不同的 特性 。
aufs,overlay,overlay2更适合操作文件(file)而不是block。 使用内存更有效率,但大量写入操作会使container's writable layer快速增大。devicemapper,btrfs,zfs更适合block操作。比如用做docker volumes- For
lots of small writesorcontainers with many layersordeep filesystems,overlay比overlay2更合适. btrfs和zfs对内存需求很高zfsis a good choice forhigh-density workloadssuch as PaaS.
Shared storage systems and the storage driver
If your enterprise uses SAN, NAS, hardware RAID, or other shared storage systems, they may provide high availability, increased performance, thin provisioning, deduplication, and compression. In many cases, Docker can work on top of these storage systems, but Docker does not closely integrate(整合,一体化) with them.
- 每个
docker storage driver都基于linux filesystem 或 volume manager。 - 使用时,确保所选的
dockter storage dirver在所在shared storage system上是最好的。
Stability
出于稳定性考虑,一般而言 aufs, overlay 和 devicemapper 优先级最高。
Experience and expertise
出于 maintaining (维护) 方便考虑。
Test with your own workloads
测试工作量后在决定。
Check and set your current storage driver
重要: 有些
storage driver, 例如devicemapper,btrfs,zfs需要对系统进行额外的配置。
使用 docker info 命令查看当前 Storage driver 信息
docker info
Containers: 0
Images: 0
Storage Driver: overlay
Backing Filesystem: extfs
...
<output truncated>
- 在 Docker 启动命令中,使用
--storage-driver标志可以设置storage driver - (推荐) 配置
daemon.json- Linux:
/etc/docker/daemon.json - Windows:
C:\programData\docker\config\daemon.json
- Linux:
例如,指定 devicemapper driver。
{
"storage-driver": "devicemapper"
}
注意: 在
ubuntu 16.04.3 x86_64 / docker-ce 17.06通过daemon.json配置registry-mirrors不成功。不知道
storage driver是否可以通过daemon配置,未测试。