Docker容器 vs 全虛擬化
虛擬機(VM)是對某種計算機操作系統的模擬,虛擬機的實現是基于計算機虛擬化的架構和指令,具體可能需要特定的硬件、軟件、或軟硬件同時的支持。在本文中希云將為大家揭曉Docker容器和全虛擬化之間的區別。
Docker是一個創建封裝好的隔離計算機環境,每個封裝好的環境都被稱為容器。
啟動一個Docker容器非常迅速,因為:
* 每個容器共享宿主系統的內核
* 然而,各個容器都運行著一個Linux的副本
* 這意味著沒有 hypervisor ,而且 不需要額外的啟動
對比之下,KVM, VirtualBox 或者 VMware之類的虛擬機實現是不同的。
* 宿主系統 vs 客戶系統
* 宿主系統
是直接安裝在計算機上的原生系統
* 客戶系統
是安裝在一個虛擬機上,或者在宿主機的一個分區上的系統
* 如果是安裝在虛擬機上,客戶系統可以與宿主系統不同
* 如果是安裝在一個磁盤分區上,客戶系統必須與宿主系統相同
- Hypervisor (虛擬機監視器)
- 是一種計算機軟件、固件或者硬件,用于創建并運行虛擬機的
- 一個系統中安裝著hypervisor,里邊運行著一個或多個虛擬機,這個系統可被定義為宿主機
- 各個虛擬機被定義為客戶機
- [Docker容器]( https://en.wikipedia.org/wiki/Docker_ (software)
- 由Docker創建的一個封閉計算環境
- Linux平臺上的Docker
- 基于 Linux內核 提供的組件構建的(特別是cgroups和namespaces) * 不像虛擬機,不需要包含一個獨立的操作系統
- 非Linux平臺上的Docker
- * 使用[Linux虛擬機](https://en.wikipedia.org/wiki/Virtual_machine)去運行容器
- Docker守護進程
- 是管理容器的持久進程 * 使用<u>Linux特定的內核特性去實現</u>
全虛擬化的系統分配到的是獨有的一組資源,只有極少量的資源會共享,是有<u>更強的隔離性</u>,但是更加重了(需 要更加多的資源)。用Docker容器有弱些的隔離性,但是它們<u>更加輕量</u>,需要更少的資源,所以你可以毫不費力地 啟動上千個容器。
基本上,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虛擬機 去運行容器。