本文讲的是对Docker存储驱动的评价, 【编者的话】Docker 的生态系统不断完善,上到容器的编排发布,下到网络存储,都有着各种选择。对于Docker 最底层的存储驱动,也有着Overlay、Zfs等选择,各有利弊,本文从一位使用者的角度对不同的驱动发表了自己的看法,仅供参考。




温馨提示,本文的所有观念谨代表个人看法,所以不要因为你不同意我,就在Hacker News 上和我争论。我可以不那么公正,因为这是我自己的看法。

很坦率的说,我认为每种Docker存储驱动都不好用,所以你要决定哪一种最适合你。没有完美的选择,每一个都有缺陷,我会展示出来。开始吧。

Overlay


Overlay 在内核3.18中被加入。这很重要,因为如果你在3.18之前的内核上运行,你会:

  1. 不是运行的同样的overlay;
  2. 运行在带有overlay 补丁的内核上,也就是我们说的“改造内核”。改造内核不可信。这不是说它行不通,它可能工作的很好,但是不可信。


Overlay很棒,但是你需要一个最新的内核。也有一些关于socket和python包的令人费解的内核bug,参见

docker/docker#12080

。我个人使用overlay,没有遇到过这些bug,我所有的100多个dockerfile 使用overlay在服务器上运行持续构建,它们运行正常。

Aufs


Aufs 也很棒。但是默认情况下它不在内核中。在Ubuntu/Debian 发行版中很容易作为内核扩展包安装,但是在其他发行版中它可能没那么简单。

Btrfs


Btrfs 也很棒,但是你首先需要对 /var/lib/docker

使用的硬盘进行分区。这是一道坎,我想很多人不会这样做。

Zfs


Zfs 还不错,当然,就像Btrfs一样,它需要一些配置,并安装 zfs.ko

到系统中。如果Ubuntu 16.10 默认支持zfs,它会变得更加流行。

Devicemapper


老实说这让我很失望,但是你要当心。再加上,它存在内核中。你一定要完美的配置所有的 devicemapper 选项

,否则你会发现你只能运行2个左右的容器。


让我告诉你一个故事。



我妈妈曾经询问她朋友著名的鸡肉卷菜谱,这样她能自己做。朋友给了她菜谱,但是漏了一项关键原料,以至于我的妈妈从来都没有做出正确的味道。总是有什么东西不对劲。



这就是我对devicemapper的想法。



它适用于RedHat。


Vfs


我真的很希望你只是用于测试,否则你就是疯了。


这就是全部,感谢你的阅读。





选自官方文档



本文作者:qinlu1988