【docker學習系列二】docker vs 虛擬機:本質的區別

搞清楚docker和虛擬機的區別是有意義的,這並不是說一方將取代一方,事實上,這兩種技術在可預計的將來將會共存。學習他們的區別有助於我們更好的理解和使用它們。

這裏引用《Kubernetes in Action》中的兩個圖片,這兩張圖片很細節的對比了docker和虛擬機的運行機制,比網絡上的其他圖更能反映本質。

首先,虛擬機在宿主機操作系統(host os)上運行一個管理程序(稱爲hypervisor),它管理多個虛機操作系統。每個虛機都運行着一個完整的發行版本的操作系統,包括內核+二進制和依賴庫等組成。在每個虛擬機之上,都運行着一個或多個服務。想要更好的瞭解虛擬機的底層實現原理(深入淺出、通俗易懂)請轉到 --> 虛擬機是怎麼實現的? - 高鵬的回答 - 知乎

在這裏插入圖片描述
再來看docker容器,明顯比虛擬機更加輕量。容器本質上是宿主機操作系統之上的一個進程,鏡像本質上是隔離的二進制和依賴庫,這也就不難理解爲何docker鏡像要明顯比系統鏡像要小。如何做到的呢?如果對Linux操作系統瞭解就不難理解。諸如centos、ubuntu這些系統是linux的發行版本,他們都使用了共同的linux的內核(內核的版本稱爲內核版本,通過uname -r可以查看)。centos、ubuntu這些操作系統包括了內核和“其他軟件”(包括系統實用程序、應用程序、shell以及公用函數庫等)。docker鏡像就是這裏的“其他軟件”。

此外,爲了進一步壓縮空間,docker鏡像是分層的、共用的。也就是說不同的app可以建立在不同的容器內部,而不同的容器可以基於相同的鏡像實例化。這樣在隔離app的同時,降低了開銷。

然而,docker在輕量的同時也帶來了侷限性。當鏡像或者應用對於內核的版本有要求時,就不能在宿主機上實例化容器(可以通過虛擬機或者模擬器實現)。除此之外,雖然容器通過namespace和cgroup實現了命名空間隔離和資源限制,但是由於共用內核,因此會有安全隱患。所以我們看到,在公有云提供商的雲主機業務中,是通過虛擬機來實現的。在不採用微服務架構的非互聯網企業(如政府、學校、傳統公司等等)中,使用虛擬化技術部署的私有云(VMware公司)幾乎獨佔了市場。
在這裏插入圖片描述
簡而言之,要性能,要微服務,要devops,選docker。而要安全、要兼容傳統架構,選虛擬機。

扯遠了,但這些是我對虛擬化技術與容器技術的理解。

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