为什么Docker需要联盟文件系统

Docker如何使用Union File系统(如AUFS)来创build容器? 如果Docker不得不使用常规文件系统而不是联合文件系统,那么会有什么缺点呢?

我正在寻找具体的技术细节/内部,而不是一个高层次的答案。

它用于:

  • 避免每次将图像作为新容器运行时复制一组完整的文件
  • 隔离对其自身层中的容器文件系统的更改,从而允许从已知内容重新启动相同的容器(因为当容器被移除时具有更改的层将被解除)

联盟 :

为其他文件系统实现联合安装 。 它允许单独的文件系统(称为分支)的文件和目录被透明地覆盖,形成一个统一的文件系统。
在合并的分支中具有相同path的目录的内容将在新的虚拟文件系统中的一个合并目录中一起被看到。

这允许文件系统显示为可写,但实际上不允许写入来更改文件系统,也称为写时复制

如果你没有使用UnionFS,一个200MB镜像运行5次5分离容器就意味着1GB的磁盘空间。

请参阅“ Docker映像如何工作? ”。
有关更多技术细节,请参阅:

  • “ Docker存储驱动程序 ”
  • JérômePetazzoni( jpetazzo )的 “ 容器jpetazzo :命名空间,cgroups和一些文件系统魔术 ”。