Docker OverlayFS 文件系统原理及容器镜像分析

💡 原文中文,约12000字,阅读约需29分钟。
📝

内容提要

Docker OverlayFS的发展分为两个阶段:2014年,OverlayFS第一个版本被合并到Linux内核3.18版本中,此时在Docker中被称为overlay文件驱动;Linux内核在4.0版本对overlay做了很多改进,此时的OverlayFS被称为overlay2。

🔎

延伸解读

overlay 与 overlay2 的演进与选择

OverlayFS 的发展分为两个阶段:2014 年合并到 Linux 内核 3.18 的版本在 Docker 中称为 overlay 文件驱动,但存在弊端,如运行一段时间后报“too many links problem”错误;Linux 内核 4.0 改进后称为 overlay2。因此,Docker 中 overlay 不推荐在生产环境使用,而 overlay2 更稳定,推荐生产环境使用。

使用 overlay2 的先决条件与配置要点

使用 overlay2 需满足:Docker 版本高于 17.06.02;RHEL/CentOS 内核版本 3.10.0-514 或更高,其他发行版内核高于 4.0;推荐使用 xfs 文件系统并开启 d_type(ftype=1)。生产环境中建议将 /var/lib/docker 挂载到单独磁盘或分区,并开启 pquota 防止空间溢出。配置步骤包括停止 Docker、备份目录、创建 daemon.json 指定存储驱动和大小限制,然后启动并验证。

overlay2 的联合挂载与写时复制机制

overlay2 通过联合挂载将镜像层(lowerdir)和容器层(upperdir)统一挂载到 merged 目录,最多支持 128 层叠加。读取文件时,若文件在容器层则直接读取,否则从镜像层读取;修改文件采用写时复制,首次修改时从镜像层复制整个文件到容器层再修改,大文件可能影响性能。删除文件时,overlay2 创建特殊文件阻止访问,而非真正删除镜像层内容。

❓

Q&A

OverlayFS的两个版本分别是什么?

OverlayFS的第一个版本在2014年合并到Linux内核3.18中,称为overlay;第二个版本在Linux内核4.0中改进,称为overlay2。

为什么不推荐在生产环境中使用早期的overlay?

早期的overlay存在很多弊端,例如运行一段时间后Docker会报“too many links problem”的错误,因此不推荐在生产环境中使用。

使用overlay2的先决条件是什么?

使用overlay2的先决条件包括Docker版本需高于17.06.02,Linux内核版本需高于4.0,并推荐使用xfs文件系统。

如何配置Docker使用overlay2文件驱动?

配置步骤包括停止Docker、备份/var/lib/docker、创建或修改daemon.json文件以指定overlay2为存储驱动,然后重启Docker并检查配置。

overlay2是如何处理文件读取和修改的?

overlay2通过读取容器层或镜像层的文件来处理文件读取,修改时采用写时复制机制,首次修改会复制文件到容器层。

overlay2的性能和稳定性如何?

overlay2在生产环境中具有高性能和稳定性,是Docker官方推荐的文件系统。

🏷️

标签

➡️

继续阅读