首页 › programming › 容器不是虚拟机:一条神课深读

容器不是虚拟机:一条神课深读

2026年,只要你让AI替你写过一次代码、用过一次云上的自动部署,你就已经生活在一个被“容器”包裹的世界里:Agent要沙箱、代码解释器要隔离、CI/CD要环境一致,工程上的第一道闸门几乎都是容器。但用容器的人多,能说清“容器到底是什么”的人极少。本文深读的这条视频,就是业内公认把这个概念拆到骨头里的一次现场演出——GOTO 2017大会上,Liz Rice的《Containers from Scratch》(从零手写一个容器)。她当着全场观众,用一段不长的Go代码,从最普通的进程开始,一层一层“手工造出”一个容器。看完这条视频你会明白:Docker没有变魔法,容器不是小号虚拟机,它只是一个被切掉了视野、限定了资源的普通进程。

说明:本篇撰写环境无法联网实时抓取,播放量等动态数据请以频道页面实时显示为准;视频主线内容依据视频整理,延伸分析均已标注。

视频基本信息

项目 内容
视频标题 Containers from Scratch(《从零手写一个容器》)
频道 GOTO Conferences(欧洲老牌开发者大会官方频道)
演讲者 Liz Rice——资深工程师,后任eBPF公司Isovalent的CTO,O'Reilly图书《Container Security》作者
发布时间 2017年(GOTO Chicago 2017场次的现场演讲录像)
播放数据 未能实时核验(据GOTO频道页面,属该频道长尾经典场次,数十万量级)
核心主题 不用Docker、不用任何容器工具,只用Linux系统调用,现场造一个容器
时长 以频道页面为准(完整大会场次)

核心主张拆解:一具容器的“解剖现场”

一、开场暴论:容器就是一个进程

【视频主线】演讲第一页幻灯片就把行业黑话掀翻了:容器不是虚拟机,里面没有虚拟化的内核,没有第二台计算机在启动。所谓“运行一个容器”,本质上是在你的Linux宿主机上,多跑了一个普普通通的进程——只不过这个进程看见的世界,被系统地裁剪过。

【延伸分析】这句开场之所以是暴论,是因为它直接对抗了大多数人的直觉模型。很多人心里装的是“容器=轻量级虚拟机”:以为Docker run等于开机了一台微型小电脑。这个误解的后果很实际——做容量规划的人会按“台数”去想,做安全评估的人会高估隔离强度,排障的人会去找一台根本不存在的“虚拟机”去登录。把心智模型从“小电脑”修正为“受限进程”,是这条视频送给观众的第一件礼物,也是后十几年整个云原生行业反复科普的那句话的最早出处之一。

二、第一刀:chroot,把地面换成一块新地板

【视频主线】她从1979年就存在的古老系统调用chroot开始:把进程的根目录指向一个从busybox解包出来的目录树,从此这个进程眼里“整个文件系统”其实只是宿主机磁盘上的一个文件夹。现场效果是:进程以为自己拥有全世界,实际上只分到了一平方米。

【延伸分析】这一步藏着两个常被忽略的知识点。其一,隔离的思路从1979年的第七版Unix就有了,容器并不是2013年Docker发明的新东西,Docker只是把几件积木攒成了一套顺手的玩具。其二,chroot单独用并不是安全边界——一个有root权限的进程有经典手法逃出chroot牢笼(这也是安全社区的共识),所以它只能算“换地板”,不能算“修围墙”。这个细节为后面“ namespaces才是围墙”的推进埋好了伏笔。

三、第二刀:namespaces,把眼睛蒙上

【视频主线】接下来是全片高潮。她演示在创建进程时传入一系列CLONE_NEW*标志——mount、PID、network、UTS、IPC等namespace(命名空间),每加一个,进程视野里就少一层宿主机的痕迹。最戏剧性的一幕是在容器里敲ps:进程列表里只有它自己,自己是PID 1。它不是看不到别的进程,而是内核压根没给它看。

【延伸分析】namespace和chroot的本质区别在于:chroot只是换了一个视角点,namespace是让内核维护多套“账本”——每个命名空间里的进程表、网卡、挂载点互相不可见。这才是隔离感的真正来源。理解这一点,很多日常怪象瞬间解释得通:为什么容器里top看到的内存和宿主机监控对不上(/proc的视图不同)、为什么容器里ps aux看不到宿主机进程、为什么每个容器都有一块叫eth0的网卡却互不冲突——因为它们看到的根本不是同一本账。

四、第三刀:cgroups,发一张限额餐券

【视频主线】蒙上眼睛还不够,还得限量。她接着引入cgroups(控制组):把进程挂进一个控制组,就能给这个组设定内存上限、CPU份额。于是这个“容器进程”不仅视野被裁剪,饭量也被定量供应。

【延伸分析】namespace解决“看得见什么”,cgroups解决“用得了多少”,这两件事正交,缺一不可。只有限额没有隔离,进程会互相看见并打架;只有隔离没有限额,一个失控进程能吃光整台宿主机。cgroups于2008年进入Linux 2.6.24内核,由Google工程师主导开发——这段历史也解释了为什么Google内部跑了十几年“一切皆容器”的基础设施(Borg及后来的Kubernetes)在Linux上是顺理成章的:内核能力早就备好了,缺的只是好用的门面。

五、收束:Docker不过是一层人体工学

【视频主线】演讲的最后,她把手工造的“土法容器”和Docker逐项对照,得出结论:Docker做的事,核心就是她刚才手搓的这几刀;在此之上,它加的是工程便利——镜像分层与打包、镜像仓库、网络配置的默认值、一条命令的启动体验。

【延伸分析】这个对照是全篇最有认知价值的一幕:当你知道一个工具是由哪几块积木拼成的,工具就再也吓不到你了。2013年Docker在PyCon上被Solomon Hykes演示并开源后迅速引爆,靠的不是发明了新内核机制——它依赖的所有内核能力早已存在多年——而是把“用容器”的门槛从“读内核文档”降到了“敲一行命令”。2015年,Docker把底层运行时捐给开放容器计划(OCI),催生了标准运行时runc,从此“容器”有了行业统一的语言。

知识与理论溯源

这条视频的每一个演示,背后都有扎实的官方文档与历史事件可查:

批判性审查:哪些话要听,哪些话要打折

证据充分的部分:“容器是受限进程”这一点有内核文档直接背书,属于教科书级事实;“namespace与cgroups的组合是容器的心脏”也没有争议。视频的演示路径(chroot→namespace→cgroups→对照Docker)与OCI运行时runc的真实工作原理完全吻合。

需要打折的部分。第一,“just a process”为了教学效果刻意抹平了安全边界问题:Linux内核社区多年来反复强调命名空间的设计目标不是完整的安全边界——2016年的Dirty COW内核漏洞(CVE-2016-5195)可被用于逃出容器,2024年初runc曝出高危漏洞CVE-2024-21626(文件描述符泄漏导致容器逃逸),都提醒我们:视野隔离挡不住内核级漏洞。第二,视频没有展开Docker默认还会叠加的能力削减(capabilities裁剪)、seccomp系统调用过滤与AppArmor/SELinux策略——这些才是生产环境容器安全的三件套。第三,以2026年回望2017年的演讲,“容器与虚拟机二选一”的框架已经过时:AI时代让生成代码跑起来之前,主流做法是容器装不下就上gVisor/Kata这类强隔离层,或直接用Firecracker级微虚拟机——光谱的两端在向中间走。

一句话总结:作为“容器去魅”的教学,这条视频近乎完美;作为“容器安全指南”,它只讲了一半——而那另一半,恰恰要靠你看懂它之后再自己去补。

认知提升与实用启示

1. 让AI动手之前,先想清楚沙箱的强度。给AI Agent的生成代码一个裸容器,在安全设计上只是及格线:它能防误删(视野隔离),防不住恶意代码利用内核漏洞出逃。判断标准很简单——问一句“如果这段代码有内核0day,我承受得起吗”;承受不起,就升级到gVisor、Kata或Firecracker级别。这个判断力,正是“知道容器是什么”带来的:你不会再把“有Docker”误当成“有隔离”。

2. 学会带着“分层之眼”读Dockerfile。知道镜像是逐层叠加的联合文件系统(OverlayFS),你的操作立刻升级:把依赖安装的指令放在前面以命中构建缓存,把频繁变动的COPY放在最后以减小重建范围;多个镜像共享同一个基础层,磁盘上只存一份——理解了层,镜像瘦身的所有技巧都是从同一条原理里推出来的,不需要背。

3. 排障时切换“内外视角”。容器里的世界是裁剪过的视图:PID 1是它自己、/proc是它自己的、网卡是虚拟的。所以容器内排障看“局部账本”,宿主机上看“全局账本”,两边对不上的地方往往就是问题所在——内存对不上查cgroups限额,网络不通查veth与桥接,文件“消失”了查OverlayFS的上层下层。工具用的还是那些,但你知道每个数字分别是谁的账本。

视频论证结构图

flowchart TD
    A[一个普通进程] --> B[chroot 换掉根目录]
    B --> C[mount ns 换文件视野]
    C --> D[pid ns 独享进程表]
    D --> E[net uts ipc 各切一层]
    E --> F[cgroups 限定资源]
    F --> G[OCI runc 标准化]
    G --> H[Docker 加人体工学层]
    F --> I[视野隔离非安全边界]
    I --> J[强隔离上微虚拟机]

延伸阅读

  1. Liz Rice《Container Security》(O'Reilly,2020)——本条视频作者亲手补全的“另一半”:从内核机制到供应链攻击的容器安全全景。
  2. Firecracker项目主页(firecracker-microvm.github.io)——AWS开源的微虚拟机,看“当容器不够用”时行业走到的那一端。

参考来源

注:本篇撰写环境无法联网实时抓取,以下均为长期稳定的公认来源;视频播放量等动态数据以页面实时显示为准。

  1. GOTO 2017 · Containers from Scratch · Liz Rice(YouTube检索入口) — 本文分析的核心视频
  2. namespaces(7) — Linux man-pages — 命名空间机制的权威定义
  3. cgroups(7) — Linux man-pages — 控制组机制的权威定义
  4. Open Container Initiative 官网 — 容器行业标准组织,runc规范所在地
  5. Firecracker microVM — AWS开源微虚拟机,容器与虚拟机光谱的另一端

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入