Docker容器 vs 全虛擬化

虛擬機(VM)是對某種計算機操做系統的模擬,虛擬機的實現是基於計算機虛擬化的架構和指令,具體可能須要特定的硬件、軟件、或軟硬件同時的支持。在本文中希雲將爲你們揭曉Docker容器和全虛擬化之間的區別。
圖1docker

Docker是一個建立封裝好的隔離計算機環境,每一個封裝好的環境都被稱爲容器。架構

啓動一個Docker容器很是迅速,由於:spa

  • 每一個容器共享宿主系統的內核操作系統

    • 然而,各個容器都運行着一個Linux的副本翻譯

    • 這意味着沒有hypervisor,並且不須要額外的啓動進程

對比之下,KVM, VirtualBox 或者 VMware之類的虛擬機實現是不一樣的。ip

  • 宿主系統 vs 客戶系統資源

    • 若是是安裝在虛擬機上,客戶系統能夠與宿主系統不一樣get

    • 若是是安裝在一個磁盤分區上,客戶系統必須與宿主系統相同虛擬機

    • 宿主系統
      是直接安裝在計算機上的原生系統

    • 客戶系統
      是安裝在一個虛擬機上,或者在宿主機的一個分區上的系統

  • Hypervisor (虛擬機監視器)

    • 是一種計算機軟件、固件或者硬件,用於建立並運行虛擬機的

    • 一個系統中安裝着hypervisor,裏邊運行着一個或多個虛擬機,這個系統可被定義爲宿主機

    • 各個虛擬機被定義爲客戶機

  • Docker容器

    • 使用Linux虛擬機去運行容器

    • 基於Linux內核提供的組件構建的(特別是cgroups和namespaces)

    • 不像虛擬機,不須要包含一個獨立的操做系統

    • 由Docker建立的一個封閉計算環境

    • Linux平臺上的Docker

    • 非Linux平臺上的Docker

  • Docker守護進程

    • 是管理容器的持久進程

    • 使用Linux特定的內核特性去實現

全虛擬化的系統分配到的是獨有的一組資源,只有極少許的資源會共享,是有更強的隔離性,可是更加劇了(須要更加多的資源)。用Docker容器有弱些的隔離性,可是它們更加輕量,須要更少的資源,因此你能夠絕不費力地啓動上千個容器。

基本上,Docker容器和全虛擬化VM有着本質上不一樣的目標

  • VM是用於徹底模擬一個外部環境

    • 相反地,容器的系統(或者更準確來講,是內核)必須與宿主系統一致,並且與容器和宿主間共享着

    • 在一個全虛擬化VM的實現上,Hypervisor主要做用是翻譯客戶系統和宿主系統之間的指令

    • 每一個虛擬機中,應用以及相關依賴運行在一個完整的操做系統上

    • 若是你須要同時運行不一樣的操做系統(如Windows, OS/X 或 BSD),或者須要爲特定平臺的系統編譯程序,那你須要的是一個全虛擬化VM的實現

  • 容器使應用具備可移植性,並能自包含

    • 這意味着沒有hypervisor,並且不須要額外的系統啓動

    • 容器引擎負責啓動或中止容器,這與虛擬機實現中的hypervisor相似

    • 然而,容器中運行的進程與宿主系統的進程是同行級別的,因此不會被相關的hypervisor殺掉
      各容器共享着宿主機的內核

    • 各容器共享着宿主機的內核

在本文中,咱們只關注了Linux平臺下的Docker實現,換言之,咱們討論的是排除掉了非Linux平臺(也就是Windows,Mac OS X等等),由於Docker守護進程使用特定的Linux內核特性,你不能在Windows 或 Mac OS X直接運行原生的Docker。在非Linux平臺上,Docker使用Linux虛擬機去運行容器。

相關文章
相關標籤/搜索