虚拟化和容器到底有什么异同?
9b3273bb-72af-41d8-bbc6-c296f038999b-image.png
半虚拟化半虚拟化(Paravirtualization)是虚拟化最初的技术形态。由于早期的CPU没有专门为虚拟化开发的相关硬件机制,但操作系统在运行时会执行可能会影响Hypervisor工作的敏感指令。因此早期的虚拟化技术需要修改虚拟机使用的操作系统,当修改后的操作系统执行涉及敏感指令的代码时,系统会以类似“系统调用”的方式“陷入”Hypervisor,由Hypervisor控制后续的执行过程。
全虚拟化全虚拟化(Full Virtualization)依赖CPU专为虚拟化开发的硬件虚拟化技术,主要包括CPU虚拟化(Intel为VT-x,ARM为Hyp)、内存虚拟化(Intel为EPT)和IO虚拟化(Intel为VT-d)在运行时,Hypervior首先会通过配置确定敏感指令的范围;之后,当虚拟机操作系统执行相关敏感指令时,CPU会自动暂停虚拟机的运行,并将控制权交给Hypervisor进行后续处理;最后,Hypervisor完成相关处理后,主动将控制权交还给虚拟机,并恢复虚拟机运行。
该过程类似大型操作系统的系统调用。
容器容器最大的特点是不同容器公用同一个系统内核 。容器在使用时不依赖硬件,但是需要操作系统内核提供相关隔离和内核数据虚拟,例如linux的cgroup等机制。
容器在操作系统提供的功能之上,构建包含独立文件系统的镜像(Image)并运行。