docker與虛擬機

  Docker是近年來新興的虛擬化工具,它可以和虛擬機一樣實現資源和系統環境的隔離。但是它們之間也是有區別的,

  比較兩圖的差異,左圖虛擬機的Guest OS層和Hypervisor層在docker中被Docker Engine層所替代。虛擬機的Guest OS即爲虛擬機安裝的操作系統,它是一個完整操作系統內核;虛擬機的Hypervisor層可以簡單理解爲一個硬件虛擬化平臺,它在Host OS是以內核態的驅動存在的。

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

  通過docker和虛擬機實現原理的比較,我們大致可以得出一些結論:

  1、docker有着比虛擬機更少的抽象層。由於docker不需要Hypervisor實現硬件資源虛擬化,運行在docker容器上的程序直接使用的都是實際物理機的硬件資源。因此在CPU、內存利用率上docker將會在效率上有優勢。在IO設備虛擬化上,docker的鏡像管理有多種方案,比如利用Aufs文件系統或者Device Mapper實現docker的文件管理,各種實現方案的效率略有不同。

  2、docker利用的是宿主機的內核,而不需要Guest OS。因此,當新建一個容器時,docker不需要和虛擬機一樣重新加載一個操作系統內核。我們知道,引導、加載操作系統內核是一個比較費時費資源的過程,當新建一個虛擬機時,虛擬機軟件需要加載Guest OS,這個新建過程是分鐘級別的。而docker由於直接利用宿主機的操作系統,則省略了這個過程,因此新建一個docker容器只需要幾秒鐘。另外,現代操作系統是複雜的系統,在一臺物理機上新增加一個操作系統的資源開銷是比較大的,因此,docker對比虛擬機在資源消耗上也佔有比較大的優勢。事實上,在一臺物理機上我們可以很容易建立成百上千的容器,而只能建立幾個虛擬機。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章