2.1 虛擬化技術
虛擬機Virtual Machine與容器化技術(代表Docker)都是虛擬化技術,兩者的區別在於虛擬化的程度不同。
Docker為代表的容器化技術並不是虛擬機。
虛擬機是在物理資源層面實現的隔離,相對於虛擬機,Docker是你APP層面實現的隔離,並且省去了虛擬機操作系統(Guest OS)),從而節省了一部分的系統資源;Docker守護進程可以直接與主操作系統進行通信,為各個Docker容器分配資源;它還可以將容器與主操作系統隔離,並將各個容器互相隔離。虛擬機啟動需要數分鍾,而Docker容器可以在數毫秒內啟動。由於沒有臃腫的從操作系統,Docker可以節省大量的磁盤空間以及其他系統資源。
虛擬機與容器docker的區別,在於vm多了一層guest OS,虛擬機的Hypervisor會對硬件資源也進行虛擬化,而容器Docker會直接使用宿主機的硬件資源。
下面我們采用形象的比喻區分兩者的隔離級別:
服務器:比作一個大型的倉管基地,包含場地與零散的貨物——相當於各種服務器資源。
虛擬機技術:比作倉庫,擁有獨立的空間堆放各種貨物或集裝箱,倉庫之間完全獨立——倉庫相當於各種系統,獨立的應用系統和操作系統。
Docker:比作集裝箱,操作各種貨物的打包——將各種應用程序和他們所依賴的運行環境打包成標准的容器,容器之間隔離。
2.2 虛擬技術對比
隔離性
在於隔離性上面,由於vm對操作系統也進行了虛擬化,隔離的更加徹底。而Docker共享宿主機的操作系統,隔離性較差。
運行效率
由於vm的隔離操作,導致生成虛擬機的速率大大低於容器Docker生成的速度,因為Docker直接利用宿主機的系統內核。比如openstack能夠以10台/min的速度創建虛擬機,而docker可以做到在幾秒鍾之內創建大量容器,它們的啟動速度是在數量級上的差距。
因為虛擬機增加了一層虛擬硬件層,運行在虛擬機上的應用程序在進行數值計算時是運行在Hypervisor虛擬的CPU上的;另外一方面是由於計算程序本身的特性導致的差異。虛擬機虛擬的cpu架構不同於實際cpu架構,數值計算程序一般針對特定的cpu架構有一定的優化措施,虛擬化使這些措施作廢,甚至起到反效果。
資源利用率
在資源利用率上虛擬機由於隔離更徹底,因此利用率也會相對較低。
因為虛擬機增加了一層虛擬硬件層,運行在虛擬機上的應用程序在進行數值計算時是運行在Hypervisor虛擬的CPU上的;另外一方面是由於計算程序本身的特性導致的差異。虛擬機虛擬的cpu架構不同於實際cpu架構,數值計算程序一般針對特定的cpu架構有一定的優化措施,虛擬化使這些措施作廢,甚至起到反效果。比如對於本次實驗的平台,實際的CPU架構是2塊物理CPU。