1. 程式人生 > >知道docker與虛擬機的性能區別嗎?

知道docker與虛擬機的性能區別嗎?

虛擬化 docker容器

1)docker與虛擬機實現的原理是怎樣的呢?

技術分享圖片

從結構 來看,左圖虛擬機的Guest OS層和Hypervisor層在docker中已經被Docker Engine層所取代,在這裏我們 需要知道的是Guest OS是虛擬機安裝的操作系統,是一個完整的系統內核,另外,Hypervisor可以理解為一個硬件 虛擬化平臺,它在Host OS層是以內核驅動狀態存在的;虛擬機實現資源隔離的方式就是利用獨立的Guest OS,並Hypervisor虛擬化CPU,內存,IO等設備實現

對比虛擬機實現資源和環境隔離的方案,docker顯然就是簡練的很多,Docker Engine可以看成linux的namespace,cgroup,鏡像管理文件系統操作的封裝,docker並沒有和虛擬機一樣利用一個完全獨立的Guest OS實現環境隔離,利用的是目前linux內核本身支持的容器方式實現的資源和環境隔離,簡單的來說,docker就是利用namespace實現的系統環境的隔離,利用cgroup實現資源限制;利用鏡像實現根環境的的隔離

上述 簡單的總結一下:

#docker有著比虛擬機更少的抽象層,由於docker不需要Hypervisor實現硬件資源虛擬化,運行在docker容器上的程序直接使用的都是實際物理機的硬件資源,因此,在CPU,內存利用率上,docker將會在效率上更有優勢;

#docker利用宿主機的內核,不需要Guest OS,從而減少了加載操作系統內核的時間和資源的消耗;

2)docker與虛擬機啟動的時間及資源消耗的比較

docker之所有如此受到關註,另外一個重要原因是啟動docker的系統代價比啟動一臺虛擬機的代價要低得多;無論是從啟動時間還是從啟動資源消耗的角度來說,docker直接利用宿主機的系統內核,避免了虛擬機啟動時所需要的系統引導時間和操作系統運行的資源消耗,利用docker能在幾秒鐘之內啟動大量的容器,這是虛擬機無法辦到的,快速啟動,低資源消耗的優點使得docker在彈性雲平臺和自動運維系統方面有著很好的應用前景

3)docker的劣勢

上述論述了docker相對於虛擬機的優勢,但是docker也有不完美的地方,如下:

#資源給方面不如虛擬機,docker是利用cgroup實現資源隔離的,只能限制資源消耗的最大值,而不能隔絕其他應用程序占用自己的資源;

#安全性問題,docker目前並不能分辨出具體執行指令的用戶 ,只要一個用戶擁有執行docker的權限,那麽就可以對docker的容器進行所有操作;

#兼容性問題,docker目前還在版本快速更新中,細節功能調整較大,一些核心的模塊依賴於高版本的內核,存在兼容性的問題

知道docker與虛擬機的性能區別嗎?