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