尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

一文理清 Overlay:从容器文件系统到网络与图像叠加

发布时间:2026/9/1 2:48:42

资讯中心
01
ARTICLE

一文理清 Overlay:从容器文件系统到网络与图像叠加

一文理清 Overlay:从容器文件系统到网络与图像叠加
从容器到网络再到相机一次讲透 Overlay 到底是什么意思如果你是一个后端开发者大概率在排查容器磁盘占用时见过overlay2如果你做云计算相关大概率听说过 VXLAN、Overlay 网络如果你是前端或客户端开发者可能每天都在和用户界面上的 overlay 组件打交道。但如果你问一句“overlay 到底是什么”很多人会给出完全不同的答案。这不是谁的理解错了而是“overlay”这个英文单词实在太通用以至于在技术领域被多个细分方向各自占用。这篇文章想做的事情很明确把开发工作中最常见的三类 overlay——文件系统层的 OverlayFS、网络层的 Overlay 网络、界面与图像层的 overlay 叠加——放在一起讲透。读完你会有三个收获彻底看懂容器里那个overlay2目录是怎么回事。理解 Kubernetes 里的 VXLAN 和 Overlay 网络为什么要存在以及它的代价是什么。知道“overlay 相机”这类热词背后对应的其实是图像叠加技术而不是什么新硬件。更重要的是我会把每一类 overlay 的“看起来是什么”和“实际怎么运作”拆开让你以后遇到相关问题不至于对着日志一头雾水。1. 先给 Overlay 做一个整体定位在动手看任何一个具体技术之前先退一步做一次概念分级。Overlay 在英文里的本义是“覆盖、叠加”。当它进入技术领域时不同方向只是借用了同一个词根各自表达“在已有东西之上再叠一层东西”的意思实质差异非常大。目前开发圈最常见的四类 overlay 如下领域常见形态一句话概括文件系统Docker/Containerd 的 overlay2、OverlayFS多个目录叠加成一个合并视图容器网络VXLAN、Flannel、Calico 的 Overlay 模式在物理网络上再建一层虚拟网络前端界面Modal 遮罩、CSS 绝对定位层页面元素在视觉上覆盖其他元素图像与相机AR 贴纸、实时滤镜、水印叠加在视频/照片画面上叠加动态图层注意这四个方向虽然名字都有 overlay但技术栈完全不同。一个做容器存储的工程师和一个做图像算法的工程师聊“overlay”时大概率谁也不知道对方在说什么。这就是这篇文章存在的价值帮你在头脑中建立一个“overlay 知识地图”。以后无论在哪个方向遇到这个词都能快速定位到它属于哪一层该用哪套知识体系去理解。小结论Overlay 不是某一个具体技术而是一种“叠加抽象”的通用思想。理解这个前提比记住某个具体命令更重要。2. 文件系统层的 Overlay容器镜像为什么能省空间先从容器开发最常遇到的overlay2讲起。2.1 OverlayFS 解决的核心问题如果你用 Docker 拉过镜像会发现一个现象多个镜像可能共享同一个基础层比如都基于ubuntu:22.04但磁盘上不会重复存储这些基础层。这就是 OverlayFS 的功劳。在 OverlayFS 之前Docker 用过 AUFS 作为存储驱动后来逐步迁移到 overlay2因为它的性能更好、实现更简洁。OverlayFS 的核心思想是把多个目录叠加成一个合并视图。这其中有几个关键角色Lowerdir低层目录只读层通常是镜像基础层。Upperdir上层目录可写层通常是容器运行时产生的修改。Mergedir合并视图对外暴露的统一目录。当你在容器里读取一个文件时OverlayFS 会先在上层找找不到再去下层找。当你在容器里修改一个文件时它会把下层文件“复制”到上层再修改这个机制叫copy-up。2.2 用一个小实验理解 OverlayFS下面用一个最小示例演示 OverlayFS 的合并过程。这个实验在 Linux 环境执行即可不需要容器。# 准备工作目录 mkdir -p /tmp/overlay-demo/{lower,upper,merged,work} # 在低层目录放一个文件 echo layer: lower /tmp/overlay-demo/lower/base.txt # 在上层目录放一个同名文件 echo layer: upper /tmp/overlay-demo/upper/base.txt # 在上层目录再放一个低层没有的文件 echo layer: upper only /tmp/overlay-demo/upper/extra.txt # 执行挂载 sudo mount -t overlay overlay \ -o lowerdir/tmp/overlay-demo/lower,upperdir/tmp/overlay-demo/upper,workdir/tmp/overlay-demo/work \ /tmp/overlay-demo/merged执行后查看合并目录cat /tmp/overlay-demo/merged/base.txt cat /tmp/overlay-demo/merged/extra.txt ls /tmp/overlay-demo/merged结果符合 OverlayFS 的设计base.txt显示为layer: upper说明同名文件优先取上层。extra.txt正常可见说明上层文件直接出现在合并视图里。低层独有的文件也会通过合并视图暴露出来这里只是没有在 lower 里放更多文件演示。再看一个关键机制——copy-up。在合并目录中修改低层文件echo modify in merged /tmp/overlay-demo/merged/base.txt cat /tmp/overlay-demo/upper/base.txt你会发现上层目录的base.txt已经变了而低层目录的base.txt保持原样。这就是容器镜像分层和容器可写层的底层逻辑。小白最容易误解的地方以为“容器里改了文件镜像也会被污染”。实际上因为有 copy-up 机制低层镜像始终只读容器的修改全部落在自己的可写层。这也是为什么多个容器可以共享同一个镜像层却互不影响。2.3 在 Docker 环境中验证如果你已经装好 Docker可以用更直接的方式观察# 查看当前存储驱动 docker info | grep Storage Driver # 查看容器的挂载信息 docker ps -q | head -1 | xargs -I{} docker inspect {} --format {{json .GraphDriver}} # 查看底层 overlay 挂载 mount | grep overlay在典型的 Docker 环境里你会看到类似Storage Driver: overlay2的输出同时在mount结果里有一大堆overlay on /var/lib/docker/overlay2/...的挂载记录。如果你遇到“容器磁盘占用过高”的问题通常需要关注/var/lib/docker/overlay2目录的大小。但注意不能直接删除里面的内容否则会损坏容器数据。正确的清理方式是docker system prune docker image prune小结论OverlayFS 用“多层目录叠加”换来了镜像层的极致复用是容器镜像机制能够成立的基石之一。理解 copy-up 和只读/可写层是排查容器文件系统问题的第一步。3. 网络层的 Overlay为什么要在物理网络上再建一张网如果说 OverlayFS 解决的是“磁盘空间和文件分层”的问题那么网络层的 Overlay Network 解决的则是“跨主机通信和网络隔离”的问题。3.1 为什么需要 Overlay 网络在传统物理网络里每台机器有一个 IP机器之间通过路由互通。但在容器和 Kubernetes 场景下事情变得复杂容器实例会频繁创建和销毁IP 不固定。一个 Pod 需要跨宿主机和另一个 Pod 通信。宿主机之间的网络往往由运维统一规划开发团队很难修改物理交换机配置。多租户场景要求不同用户的流量互相隔离。如果每次新建容器都要去改物理网络设备显然不可行。于是 Overlay 网络出现在现有物理网络之上构建一层虚拟网络容器只关心虚拟网络里的 IP真实的物理网络则负责把封装后的数据包从一台宿主机送到另一台宿主机。3.2 VXLAN最常见的 Overlay 实现VXLANVirtual Extensible LAN是目前实现 Overlay 网络最主流的协议之一。它的思路是用 UDP 封装原始的以太网帧让二层网络报文能跨越三层网络传输。一个 VXLAN 报文的基本结构是原始以太网帧 ↓ 封装 UDP头(端口4789) VXLAN头(VNI) 原始以太网帧 ↓ 再封装 外层IP头 外层UDP头 VXLAN头 原始以太网帧这里的 VNIVXLAN Network Identifier用来标识不同的虚拟网络类似 VLAN ID 的扩展版但数量从 4096 扩展到约 1600 万。在 Kubernetes 里很多 CNI 插件都使用 Overlay 模式。比如 Flannel 的 VXLAN 模式、Calico 的 VXLAN/IPIP 模式都是在节点之间建立隧道。下面是一段 Flannel 在 etcd 中的典型网络配置{ Network: 10.5.0.0/16, Backend: { Type: vxlan } }这段配置的含义是整个集群的 Pod 网段是10.5.0.0/16通过 VXLAN 进行 Overlay 封装。每个节点会分配一个子网比如节点 A 是10.5.1.0/24节点 B 是10.5.2.0/24。当节点 A 上的 Pod10.5.1.3访问节点 B 上的 Pod10.5.2.4时数据包的走向是Pod 发出原始报文源 IP 是 10.5.1.3目标 IP 是 10.5.2.4。宿主机上的 Flannel/VXLAN 模块收到这个报文识别出目标 IP 属于另一个节点。在报文外加一层 UDP 封装外层源 IP 是节点 A 的物理 IP外层目标 IP 是节点 B 的物理 IP。物理网络把 UDP 包从节点 A 送到节点 B。节点 B 拆掉 VXLAN 封装把原始报文交给目标 Pod。整个过程对 Pod 来说是透明的。Pod 感觉不到自己经过了封装和解封装。一个可执行的验证思路是在 Kubernetes 集群节点上观察ip -d link show或者使用ip route查看带vxlan字样的网卡可以看到类似flannel.1的虚拟网卡。再抓包时也会看到 UDP 4789 端口的流量。3.3 Overlay 网络的优势与代价优势是显著的对底层网络要求低不需要改造物理交换机。容器 IP 变化不影响通信虚拟网络自动感知。天然支持大规模多租户隔离。代价同样不可忽视性能开销每次跨节点通信都要封装和解封装CPU 和网络带宽都有额外消耗。排障复杂度更高出现问题时要同时看物理网络层和虚拟网络层现场定位成本明显增加。MTU 问题VXLAN 会额外占用约 50 字节如果物理网络 MTU 是 1500而虚拟网络也设置为 1500就会触发分片影响性能。通常需要把隧道接口的 MTU 设置为 1450 或更低。小结论Overlay 网络用“封装”换来了灵活性和隔离性但它不是免费的。在高性能场景下可以考虑用纯三层网络方案如 Calico BGP替代 Overlay但前提是你的底层网络能配合。4. 界面与图像层的 Overlay从前端弹窗到“overlay 相机”前面两类 overlay 偏向基础设施这一节更贴近普通用户和客户端开发者。4.1 前端 UI 里的 overlay在前端开发中overlay 最常见的含义是“覆盖在页面内容之上的界面层”。比如 Modal 弹窗、下拉菜单、Toast 提示、图片预览的遮罩层本质上都是一个 overlay。实现方式很简单核心就是 CSS 定位!-- 文件路径index.html -- div classmodal-overlay idmodal div classmodal-content p这是一个 Overlay 弹窗/p button onclickcloseModal()关闭/button /div /div/* 文件路径style.css */ .modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); display: none; justify-content: center; align-items: center; z-index: 1000; } .modal-overlay.active { display: flex; }// 文件路径script.js function openModal() { document.getElementById(modal).classList.add(active); } function closeModal() { document.getElementById(modal).classList.remove(active); }这里的关键点是z-index。Overlay 层必须拥有比页面其他元素更高的层级才能盖在它们上面。实际项目中还涉及焦点管理、滚动锁定、点击外部关闭、层级嵌套等问题非常容易出现“弹窗盖不住”“滚动穿透”等 bug。4.2 “overlay 相机”到底指什么再看热词“overlay 相机”。这个词听起来像是某种新型硬件但本质上它是图像叠加技术的应用。开发者在做拍照、直播、短视频类 App 时经常需要把多个图层叠加在一起摄像头实时帧作为底层画面。贴上滤镜效果。叠加贴纸、文字、水印。在人脸关键点上绘制 AR 动画。这个过程在计算机视觉里通常叫“图层合成”或“alpha blending”在多媒体框架里也经常叫 overlay。比如 FFmpeg 的overlay滤镜就是专门用来把两路视频叠加成一路的。一个 FFmpeg 叠加水印的示例命令ffmpeg -i input.mp4 -i logo.png \ -filter_complex overlay10:10 \ -codec:a copy output.mp4这条命令把logo.png放在视频的左上角坐标为 x10, y10右下角位置可以用overlayW-w-10:H-h-10表示。如果是在 iOS 上用 Metal 做实时相机 overlay通常会用到CAMetalLayer加多个纹理图层Android 端则会在SurfaceView或TextureView上叠加多个图层。小白最容易误解的地方以为“overlay 相机”是一个专门的相机品类。实际开发语境里它描述的是“在相机预览画面上叠加额外图层”的拍摄技术能力。最近大家在短视频 App 里看到的 AI 特效、贴纸、悬浮字幕都属于这一类能力的体现。小结论图像/界面层的 overlay核心是“图层叠加与合成”。它不涉及网络和存储但同样遵循“上层覆盖下层”的逻辑而且对性能要求极高尤其是实时视频场景。5. 三类 Overlay 的对比与适用场景为了帮你一眼定位自己的场景我把上面三类 overlay 做一个对比表格维度OverlayFSOverlay 网络UI/图像 Overlay核心问题磁盘空间、镜像分层跨主机通信、多租户隔离视觉叠加、交互层级典型技术overlay2 存储驱动VXLAN、FlannelCSS z-index、FFmpeg overlay核心机制目录合并 copy-upUDP 封装隧道图层合成、透明度混合主要代价磁盘 I/O 略降网络性能损耗、MTU 问题绘制性能、内存开销排查要点overlay2 目录、挂载配置隧道网卡、抓包 4789 端口层级、透明度、坐标适用角色后端/运维网络/平台工程师前端/客户端/音视频开发者从这张表可以看出三类 overlay 几乎不共享技术细节唯一的共同点是“在一层之上再叠一层”的抽象思想。理解这个共性和差异对职业发展也有帮助。当你看到一个新的技术名词里带 overlay 时第一反应不应该是“我见过这个词”而是“先搞清楚它在哪一层、解决什么问题”。这是技术人最值钱的分辨能力。6. Overlay 相关的常见问题与排查思路三类 overlay 的技术栈不同踩坑方式也完全不同。下面把最常见的问题汇总在一个表格里方便收藏备查。问题现象所属领域可能原因排查方式解决方案容器磁盘占用持续增大overlay2目录很大文件系统容器日志、临时文件、悬空镜像查看du -sh /var/lib/docker/overlay2并用docker system df分析清理悬空镜像、配置日志轮转、设置合理的日志驱动容器内修改文件后镜像也变了文件系统误操作宿主机 overlay 目录检查挂载配置确认镜像层只读不要直接操作 overlay2 底层目录统一通过容器管理接口操作跨节点 Pod 通信延迟高网络Overlay 封装导致 CPU/带宽损耗检查隧道网卡流量抓包看是否为 VXLAN 协议对延迟敏感业务使用宿主机网络或纯三层网络方案容器网络不通但物理网络正常网络VXLAN 4789 端口被防火墙拦截telnet 节点IP 4789或nc -uvz IP 4789放行 UDP 4789 端口检查 MTU 配置页面弹窗显示在其它元素下面UI Overlayz-index 层级不够或父级创建了层叠上下文用 devtools 检查元素层级提高 z-index或调整父级 transform/opacity 属性FFmpeg 叠加水印失败或花屏图像 Overlay视频尺寸、像素格式、输入流参数不匹配查看 ffmpeg 日志确认输入分辨率与像素格式加scale滤镜统一分辨率显式指定像素格式这里特别提醒两个在工程中最容易忽略的坑第一个是MTU 问题。Kubernetes 里如果遇到“小包正常、大包不通”的诡异网络故障十有八九是 MTU 不匹配。VXLAN 封装占用了额外字节但虚拟网络接口的 MTU 没有相应调小时数据包超过物理链路限制就会被丢弃。第二个是overlay2 目录被直接删除。有人为了腾磁盘空间去删/var/lib/docker/overlay2里的文件结果导致容器直接损坏。这个目录是 Docker 的存储引擎核心绝不能手动乱删。7. 工程实践中的最佳建议无论是哪一类 overlay进入生产环境前都有几条通用的实践建议。7.1 文件系统 Overlay 的维护建议使用 Docker 时定期执行docker system prune清理悬空镜像和停止的容器。设置日志轮转避免容器日志无限增长。推荐配置 log driver{ log-driver: json-file, log-opts: { max-size: 20m, max-file: 3 } }对 overlay2 目录的监控要纳入日常运维关注挂载点使用率避免写满磁盘后进程崩溃。不要把 overlay2 目录放在系统盘建议挂载到独立的数据盘。7.2 Overlay 网络的选型建议集群规模小、网络环境简单优先考虑直连模式或 BGP 模式。多租户隔离需求明显的场景选择支持 NetworkPolicy 的 Overlay CNI。对延迟敏感的核心业务尽量使用宿主机网络或使用支持 DPDK 加速的 Overlay 方案。在网络变更前先在测试集群验证 MTU 和防火墙规则避免直接在生产环境踩坑。记得监控 VXLAN 隧道数量和隧道状态隧道异常是很多“跨节点不通”问题的根源。7.3 UI/图像 Overlay 的开发建议为 overlay 层建立统一的组件规范避免到处散落z-index: 99999这种魔法值。在实时视频 overlay 中优先使用硬件加速渲染而不是 CPU 逐帧绘制。图层叠加顺序、透明度、坐标通过配置化方式管理方便后续做 A/B 测试或运营配置。性能优化时重点关注首帧耗时、丢帧率和内存占用三个指标。8. 总结Overlay 的本质与下一步学习方向这篇文章能帮你建立对 overlay 的整体认知框架并区分三层完全不同的含义文件系统层OverlayFS 用目录叠加实现镜像分层核心是 copy-up。网络层VXLAN/Overlay 网络用封装实现跨主机虚拟网络核心是隧道。界面与图像层Overlay 组件和 overlay 相机效果是图层叠加核心是合成。以后再看到“overlay”这个词可以按这三个方向快速分类先搞清楚它属于哪个技术栈再去找对应的解决方案。这个“先分类再深挖”的思路比多记几个命令更能解决问题。如果你现在是基础阶段建议这样安排学习顺序先在本地 Linux 环境把 OverlayFS 的命令跑一遍理解合并视图和 copy-up。再搭一个最小 Kubernetes 集群观察 Flannel 或 Calico 的 VXLAN 网卡和路由表。最后涉及前端或音视频时用 FFmpeg 的 overlay 滤镜做几个小实验打通图像叠加的知识。每一步都不难难的是把三层知识串起来。这篇文章的价值就在于此它不是教你某一个命令而是告诉你这一类技术背后的共同思维模式。下次再看到任何带 overlay 的功能你已经是一个有坐标的人而不只是听过这个词。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。