隔离的边界:虚拟机与容器
本章为进阶内容,零基础读者可以跳过,不影响后续阅读。
复习
- 断电时写到一半怎么办:崩溃一致性与写入顺序
- 日志文件系统:先记下修改意图,再安全地更新真实结构
- 用户、权限与访问控制:操作系统怎样判断谁能读文件、操作进程和使用设备
TL;DR
- 虚拟机隔离的是一整台“机器”,每个虚拟机里有自己的操作系统内核
- 容器隔离的是一组进程,它们共享同一个内核
- 两者隔离的“边界”不同:一个隔到硬件层,一个隔到进程层
- 边界不同,则启动速度、资源开销、隔离强度都不同
正文
前面讲的隔离,都是同一台操作系统内部的:进程之间、用户之间。可有时我们想要更强的隔离——比如在一台机器上跑好几个互不干扰的“系统”。这就引出了两种不同的边界。
虚拟机:假装是一台完整的机器
虚拟机(virtual machine)的思路是:在硬件之上放一层虚拟机监控器(Hypervisor),它把一台物理机“切”成好几台逻辑上的独立机器。
每一台虚拟机里,都装着一套完整的操作系统(有自己的内核、自己的启动过程)。虚拟机之间,就像几台真正分开的电脑。
- 隔离边界:硬件层,连内核都是各管各的
- 好处:隔离强,一台虚拟机崩溃不牵连别的
- 代价:每一台都要跑一整套系统,启动慢、内存开销大
容器:隔开进程,共用内核
容器(container)的边界要浅得多:它们不是各带一套系统,而是共用宿主机的同一个内核。
那怎么隔开呢?靠内核提供的一整套机制:
-
命名空间:让每个容器看到自己的进程、网络、文件等视图,仿佛独占机器
-
资源限制:限制每个容器能用多少 CPU、内存,防止互相抢
-
再加上权限控制,把容器的活动范围框住
-
隔离边界:进程层,内核是共享的
-
好处:轻量、启动快、开销小
-
代价:隔离不如虚拟机彻底,因为它们终究共用一个内核
边界不同,取舍就不同
| 虚拟机 | 容器 | |
|---|---|---|
| 隔离边界 | 硬件层 | 进程层 |
| 内核 | 各自独立 | 共享宿主机内核 |
| 启动 | 慢 | 快 |
| 开销 | 大 | 小 |
| 隔离强度 | 强 | 较弱 |
一句话总结:虚拟机隔离“机器”,容器隔离“进程”。 想要强隔离、跑不同系统,选虚拟机;想要轻量、快速部署大量服务,选容器。两者不是谁取代谁,而是不同边界下的不同工具——又是一次“没有最好,只有合适”。
思考题
容器共享同一个内核,这意味着什么?为什么这既是容器“轻量”的原因,也是它“隔离较弱”的原因?
小结
知识点
- 虚拟机:Hypervisor 把物理机切成多台逻辑机器
- 容器:共享内核,靠命名空间和资源限制隔离进程
- 隔离边界不同:硬件层 vs 进程层
- 边界决定启动速度、开销与隔离强度
参考资料
- Wikipedia(zh):虚拟机:virtual machine
- Wikipedia(zh):操作系统级虚拟化:container
- Wikipedia(zh):Hypervisor:虚拟机监控器
思考题答案(仅供参考)
共享内核意味着:多个容器其实是同一个操作系统里的不同进程组,只是被“障眼法”隔开了视野。正因为不用各跑一套内核,容器才轻量、启动快——省掉了重复的系统开销。可也正因为共用同一个内核,一旦内核本身有漏洞或出了问题,隔离就可能被突破,几个容器的相互影响也更难完全避免。所以“同源”既是它的优点,也是它的软肋。隔离的边界越浅,越轻便,也越难做到滴水不漏。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪