虛擬機Virtual Machine與容器化技術(代表Docker)都是虛擬化技術,兩者的區別在于虛擬化的程度不同。
舉個例子
服務器:比作一個大型的倉管基地,包含場地與零散的貨物——相當于各種服務器資源。虛擬機技術:比作倉庫,擁有獨立的空間堆放各種貨物或集裝箱,倉庫之間完全獨立——倉庫相當于各種系統,獨立的應用系統和操作系統。Docker:比作集裝箱,操作各種貨物的打包——將各種應用程序和他們所依賴的運行環境打包成標準的容器,容器之間隔離。
基于一個圖解釋
虛擬機管理系統(Hypervisor)。利用Hypervisor,可以在主操作系統之上運行多個不同的從操作系統。類型1的Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V以及支持Linux的KVM。類型2的Hypervisor有VirtualBox和VMWare。Docker守護進程(Docker Daemon)。Docker守護進程取代了Hypervisor,它是運行在操作系統之上的后臺進程,負責管理Docker容器。vm多了一層guest OS,虛擬機的Hypervisor會對硬件資源也進行虛擬化,而容器Docker會直接使用宿主機的硬件資源
基于虛擬化角度
隔離性 由于vm對操作系統也進行了虛擬化,隔離的更加徹底。而Docker共享宿主機的操作系統,隔離性較差。運行效率 由于vm的隔離操作,導致生成虛擬機的速率大大低于容器Docker生成的速度,因為Docker直接利用宿主機的系統內核。因為虛擬機增加了一層虛擬硬件層,運行在虛擬機上的應用程序在進行數值計算時是運行在Hypervisor虛擬的CPU上的;另外一方面是由于計算程序本身的特性導致的差異。虛擬機虛擬的cpu架構不同于實際cpu架構,數值計算程序一般針對特定的cpu架構有一定的優化措施,虛擬化使這些措施作廢,甚至起到反效果。資源利用率 在資源利用率上虛擬機由于隔離更徹底,因此利用率也會相對較低。