Docker與虛擬化(虛擬機區別)

虛擬化

虛擬化(virtualization)技術是一個通用的概念,在不同領域有不同的理解。在計算領域,一般指的是計算虛擬化(computing virtualization),或通常說的服務器虛擬化。

維基百科上的定義如下:“在計算機技術中,虛擬化是一種資源管理技術,是將計算機的各種實體資源,如服務器、網絡、內存及存儲等,予以抽象、轉換後呈現出來,打破實體結構間的不可切割的障礙,使用戶可以用比原本的組態更好的方式來應用這些資源。”

可見,虛擬化的核心是對資源的抽象,目標往往是爲了在同一個主機上同時運行多個系統或應用,從而提高系統資源的利用率,並且帶來降低成本、方便管理和容錯容災等好處。

從大類上分,虛擬化技術可分爲基於硬件的虛擬化和基於軟件的虛擬化。

基於軟件的虛擬化從對象所在的層次,又可以分爲應用虛擬化和平臺虛擬化(通常說的虛擬機技術即屬於這個範疇)。前者一般指的是一些模擬設備或諸如Wine這樣的軟件,後者又可以細分爲幾個子類:

  • 完全虛擬化:虛擬機模擬完整的底層硬件環境和特權指令的執行過程,客戶操作系統無須進行修改。例如IBM p和z系列的虛擬化、VMware Workstation、VirtualBox、QEMU等;
  • 硬件輔助虛擬化:利用硬件(主要是CPU)輔助支持(目前x86體系結構上可用的硬件輔助虛擬化技術包括Intel-VT和AMD-V)處理敏感指令來實現完全虛擬化的功能,客戶操作系統無須修改,例如VMware Workstation, Xen, KVM;
  • 部分虛擬化:只針對部分硬件資源進行虛擬化,客戶操作系統需要進行修改。現在有些虛擬化技術的早期版本僅支持部分虛擬化;
  • 超虛擬化(paravirtualization):部分硬件接口以軟件的形式提供給客戶機操作系統,客戶操作系統需要進行修改,例如早期的Xen;
  • 操作系統級虛擬化:內核通過創建多個虛擬的操作系統實例(內核和庫)來隔離不同的進程。容器相關技術即在這個範疇。

可見,Docker以及其他容器技術都屬於操作系統虛擬化這個範疇,操作系統虛擬化最大的特點就是不需要額外的supervisor支持。Docker虛擬化方式之所以有衆多優勢,跟操作系統虛擬化技術自身的設計和實現是分不開的。
在這裏插入圖片描述

傳統方式是在硬件層面實現虛擬化,需要有額外的虛擬機管理應用和虛擬機操作系統層。Docker容器是在操作系統層面上實現虛擬化,直接複用本地主機的操作系統,因此更加輕量級。

Docker

Docker的構想是要實現“Build, Ship and Run Any App, Anywhere”,即通過對應用的封裝(Packaging)、分發(Distribution)、部署(Deployment)、運行(Runtime)生命週期進行管理,達到應用組件級別的“一次封裝,到處運行”。這裏的應用組件,既可以是一個Web應用、一個編譯環境,也可以是一套數據庫平臺服務,甚至是一個操作系統或集羣。

基於Linux平臺上的多項開源技術,Docker提供了高效、敏捷和輕量級的容器方案,並支持部署到本地環境和多種主流雲平臺。可以說,Docker首次爲應用的開發、運行和部署提供了“一站式”的實用解決方案。

IBM DeveloperWorks網站關於容器技術的描述十分準確:“容器有效地將由單個操作系統管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有衝突的資源使用需求。與虛擬化相比,這樣既不需要指令級模擬,也不需要即時編譯。容器可以在覈心CPU本地運行指令,而不需要任何專門的解釋機制。此外,也避免了準虛擬化(para-virtualization)和系統調用替換中的複雜性。”

簡單地講,可以將Docker容器理解爲一種輕量級的沙盒(sandbox)。每個容器內運行着一個應用,不同的容器相互隔離,容器之間也可以通過網絡互相通信。容器的創建和停止十分快速,幾乎跟創建和終止原生應用一致;另外,容器自身對系統資源的額外需求也十分有限,遠遠低於傳統虛擬機。很多時候,甚至直接把容器當作應用本身也沒有任何問題。

那Docker和虛擬機有哪些區別呢?

Docker與虛擬機

作爲一種輕量級的虛擬化方式,Docker在運行應用上跟傳統的虛擬機方式相比具有如下顯著優勢:

  • Docker容器很快,啓動和停止可以在秒級實現,這相比傳統的虛擬機方式(數分鐘)要快得多;
  • Docker容器對系統資源需求很少,一臺主機上可以同時運行數千個Docker容器(在IBM服務器上已經實現了同時運行10K量級的容器實例);
  • Docker通過類似Git設計理念的操作來方便用戶獲取、分發和更新應用鏡像,存儲複用,增量更新;
  • Docker通過Dockerfile支持靈活的自動化創建和部署機制,以提高工作效率,並標準化流程。

Docker容器除了運行其中的應用外,基本不消耗額外的系統資源,在保證應用性能的同時,儘量減小系統開銷。傳統虛擬機方式運行N個不同的應用就要啓用N個虛擬機(每個虛擬機需要單獨分配獨佔的內存、磁盤等資源),而Docker只需要啓動N個隔離得“很薄的”容器,並將應用放進容器內即可。應用獲得的是接近原生的運行性能。

使用Docker容器技術與傳統虛擬機技術的各種特性,可見容器技術在很多應用場景下都具有巨大的優勢(如下圖所示):
在這裏插入圖片描述

參考書籍《Docker技術入門與實踐(第三版)》
個人github賬號:https://github.com/SpecialAll

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