Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

隔离的边界:虚拟机与容器

本章为进阶内容,零基础读者可以跳过,不影响后续阅读。

复习

  • 断电时写到一半怎么办:崩溃一致性与写入顺序
  • 日志文件系统:先记下修改意图,再安全地更新真实结构
  • 用户、权限与访问控制:操作系统怎样判断谁能读文件、操作进程和使用设备

TL;DR

  • 虚拟机隔离的是一整台“机器”,每个虚拟机里有自己的操作系统内核
  • 容器隔离的是一组进程,它们共享同一个内核
  • 两者隔离的“边界”不同:一个隔到硬件层,一个隔到进程层
  • 边界不同,则启动速度、资源开销、隔离强度都不同

正文

  前面讲的隔离,都是同一台操作系统内部的:进程之间、用户之间。可有时我们想要更强的隔离——比如在一台机器上跑好几个互不干扰的“系统”。这就引出了两种不同的边界。

虚拟机:假装是一台完整的机器

  虚拟机(virtual machine)的思路是:在硬件之上放一层虚拟机监控器(Hypervisor),它把一台物理机“切”成好几台逻辑上的独立机器。

  每一台虚拟机里,都装着一套完整的操作系统(有自己的内核、自己的启动过程)。虚拟机之间,就像几台真正分开的电脑。

  • 隔离边界:硬件层,连内核都是各管各的
  • 好处:隔离强,一台虚拟机崩溃不牵连别的
  • 代价:每一台都要跑一整套系统,启动慢、内存开销大

容器:隔开进程,共用内核

  容器(container)的边界要浅得多:它们不是各带一套系统,而是共用宿主机的同一个内核

  那怎么隔开呢?靠内核提供的一整套机制:

  • 命名空间:让每个容器看到自己的进程、网络、文件等视图,仿佛独占机器

  • 资源限制:限制每个容器能用多少 CPU、内存,防止互相抢

  • 再加上权限控制,把容器的活动范围框住

  • 隔离边界:进程层,内核是共享的

  • 好处:轻量、启动快、开销小

  • 代价:隔离不如虚拟机彻底,因为它们终究共用一个内核

边界不同,取舍就不同

虚拟机容器
隔离边界硬件层进程层
内核各自独立共享宿主机内核
启动
开销
隔离强度较弱

  一句话总结:虚拟机隔离“机器”,容器隔离“进程”。 想要强隔离、跑不同系统,选虚拟机;想要轻量、快速部署大量服务,选容器。两者不是谁取代谁,而是不同边界下的不同工具——又是一次“没有最好,只有合适”。

思考题

  容器共享同一个内核,这意味着什么?为什么这既是容器“轻量”的原因,也是它“隔离较弱”的原因?

小结

知识点

  • 虚拟机:Hypervisor 把物理机切成多台逻辑机器
  • 容器:共享内核,靠命名空间和资源限制隔离进程
  • 隔离边界不同:硬件层 vs 进程层
  • 边界决定启动速度、开销与隔离强度

参考资料

  1. Wikipedia(zh):虚拟机:virtual machine
  2. Wikipedia(zh):操作系统级虚拟化:container
  3. Wikipedia(zh):Hypervisor:虚拟机监控器

思考题答案(仅供参考)

  共享内核意味着:多个容器其实是同一个操作系统里的不同进程组,只是被“障眼法”隔开了视野。正因为不用各跑一套内核,容器才轻量、启动快——省掉了重复的系统开销。可也正因为共用同一个内核,一旦内核本身有漏洞或出了问题,隔离就可能被突破,几个容器的相互影响也更难完全避免。所以“同源”既是它的优点,也是它的软肋。隔离的边界越浅,越轻便,也越难做到滴水不漏。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪