上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.5 容器与虚拟机
Hypervisor通过硬件虚拟化模拟出可以运行操作系统的各种硬件,比如 CPU、内存、I/O 设备等。然后在这些虚拟的硬件上安装一个新的操作系统 GuestOS,这样用户的应用就可以运行在这台虚拟机中,该应用只能看到GuestOS的文件和目录,以及这台虚拟机里的虚拟设备,从而实现了将不同的应用进程相互隔离。因为在虚拟机中必须运行一个完整的 GuestOS,才能执行用户的应用进程,所以就不可避免地带来了额外的资源和时间的消耗。
容器被称为轻量级的虚拟化技术,它并没有一个真正的容器层运行在宿主机上,而是帮助应用进程在创建过程中加上各种各样的namespace参数。这时容器进程就会觉得自己是各自PID namespace里的第1号进程,只能看到各自mount namespace里挂载的目录和文件,只能访问各自network namespace里的网络设备,就像运行在一个个隔离的“容器”里面,但其实这只是一个被逻辑构建出来的“虚拟沙箱”。相比虚拟机,容器化的应用只是宿主机上的普通进程,这就意味着不存在虚拟化带来的性能损耗。使用 namespace 作为隔离手段的容器并不需要单独的GuestOS,这就使得容器额外的资源占用几乎可以忽略不计。
不同于虚拟机对底层硬件设备进行抽象处理,容器只对操作系统进行抽象处理,容器有自己的CPU、内存、文件系统,能够像虚拟机一样独立运行却占用更少的资源。长期来看,容器技术将以其轻量化、快速化的优势取代虚拟化技术,为应用运行提供最好的支持,但是诸如安全隔离、底层资源供给等问题仍需要通过虚拟化来解决。
容器与虚拟机的对比如图4-7所示。
图 4-7