Docker系列開篇之Virtual Machine VS Container(一)

Docker系列開篇之Virtual Machine VS Container(一)
前言
本節開始我們正式進入Docker系列,網上關於Docker相關文章如數家珍,寫博客至今,我也一直在朝着如何寫出通俗易懂且不枯燥的文章這個目標前進,喃喃自語的同時也希望看到文章的童鞋能明白我在講什麼,將知識點敘述清楚沒有,講解的效果如何,是否有啓發或收穫,能夠得到及時的反饋當然也能讓我理解的更透徹,好了,我們開始吧。

Virtual Machine VS Container
開篇我不打算直接講解各個概念,將虛擬機和容器作比較至關重要,這都是基本概念。既然是系列文章也要適合如我一樣作爲初學者的入門指南,希望本系列文章能幫助到大家。容器和虛擬機的問世是解決什麼問題呢?換句話說它兩的作用是什麼呢?

容器和虛擬機的作用相似:都是將應用程序及其依賴隔離到可以在任何地方運行的獨立單元,同時二者都消除了對物理硬件的需求,能更有效的使用計算機資源

討論完相似,當然我也得說說二者的不同之處在哪裏?區別在於二者的架構處理。下面我們來分別講講虛擬機和容器。

Virtual Machine
虛擬機的本質上對真實計算機的仿真,就好比玩具槍對真實槍支的仿真或模擬一樣,功能類似,虛擬機借用Hypervisor(管理程序)在物理機器上運行,既然虛擬機可以在Hypervisor上運行,反之,Hypervisor可以在主機上運行,也可以直接在裸機上運行。說到這裏,我們又得講講Hypervisor是啥玩意,剛纔我們講了Hypervisor(下面我們用管理程序代替)是虛擬機運行的軟件,管理程序本身是運行在物理計算機上,這裏的物理計算機我們稱爲【主機】,主機可以爲虛擬機提供RAM和CPU,通俗一點講則是爲虛擬機提供內存存儲和計算資源,主機爲虛擬機提供了RAM和CPU,那麼在一臺主機上若有多臺虛擬機,我們根據需要爲多臺虛擬機來劃分或分發這些資源,因此,如果一臺虛擬機運行着更多的應用程序,那麼我們可能需要爲其分配更多的資源,而不是爲在一臺主機上運行其他的虛擬機分配更多的資源。

在主機上使用管理程序運行的虛擬機,我們稱爲【客戶機】,該客戶機包含運行的應用程序以及應用程序所需要的任何內容,比如依賴的庫等等,同時客戶機還擁有自己的整個虛擬化硬件堆棧,比如包括虛擬化網絡適配器、存儲、CPU等等,通過這樣描述,我們知道客戶機擁有屬於自己的一套完整的客戶機操作系統,從內部來看,客戶機有自己的專屬資源,從外部來看,客戶機共享主機資源。

綜上所述,客戶機可以託管虛擬機管理程序或裸機虛擬機管理程序而運行,那麼這二者又有什麼差異呢?

託管虛擬機管理程序運行在主機的操作系統上,比如運行OSX(蘋果操作系統)的計算機可以在該OS(操作系統)之上運行Virual Box或Virtual Machine,同時最重要的一點是,因爲虛擬機共享主機資源,所以虛擬機無法直接訪問硬件,必須藉助主機操作系統來進行訪問。想必到了這裏我們知道了託管虛擬機管理程序的好處是它並不需要關心底層硬件,也就是說底層硬件對虛擬機管理程序來說並不重要,就好比我們直奔菜市場,我們的任務或者重心放在買當天所需要的菜,而並不是關心菜是怎麼種出來的一樣,這個例子也恰巧說明了面向對象和麪向過程的概念。而主機的操作系統負責硬件驅動程序而不是虛擬機管理程序本身,因爲虛擬機管理程序和硬件之間多了夾帶了附加層,所以帶來了更多了資源開銷,從而降低了虛擬機的性能。

裸機虛擬機管理程序通過在主機的硬件上安裝和運行,因爲它直接與底層硬件連接或打交道,所以解決了性能問題,它完全不需要運行主機操作系統,作爲安裝在主機上的操作系統當然主要就是爲了管理程序,裸機虛擬機管理程序與託管虛擬機管理程序不同的是,裸機虛擬機管理程序擁有屬於自己的設備驅動程序,可以直接與底層每個組件進行交互,以執行任何I/O或處理操作系統上特定的任務,如此可以在可伸縮性或穩定上而獲得更好的性能。好了,到了這裏我們討論完了虛擬機管理程序和裸機虛擬機管理程序的區別,可能有一個大大的疑問,爲何在虛擬機和主機之間要附帶額外的這一層呢?因爲虛擬機有屬於自己一套虛擬化操作系統,而主機也有一套真實的操作系統,所以虛擬機管理程序爲虛擬機提供管理和在執行虛擬機操作系統的平臺上發揮着重要的作用,它允許主機在作爲客戶端運行的虛擬機共享其資源。

如下圖(圖片來源於園友:純潔的微笑),虛擬機包含虛擬硬件、內核(即操作系統)、用戶空間。

Container
我們來揭開容器的面紗,與虛擬化硬件的虛擬機不同的是,容器通過抽象用戶空間來提供操作系統級虛擬化,如下圖(圖片來源於網絡):

如上圖僅僅只打包用戶空間而不包含內核和虛擬硬件,每個容器都有屬於自己的獨立用戶空間,以此來允許多個容器運行在單個主機上,也就是網上很多資料所提及的容器進一步封裝了linux,佔用資源少。同時我們也可以看到所有操作系統級的體系結構都在容器之間共享,這也就是網上很多資料所提及的容器輕巧的原因。

總結
本節內容我們就到這裏,內容太多也容易引起視覺疲勞,不出意外的話,關於Docker系列,應該會堅持每日一更,感謝閱讀,下節再會。
原文地址https://www.cnblogs.com/CreateMyself/p/10702559.html

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