虛擬機與Docker有何不一樣?

譯者按: 各類虛擬機技術開啓了雲計算時代;而Docker,做爲下一代虛擬化技術,正在改變咱們開發、測試、部署應用的方式。那虛擬機Docker究竟有何不一樣呢?前端

原文: Comparing Virtual Machines vs Docker Containersdocker

譯者: Fundebug數據庫

爲了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原做者全部,翻譯僅用於學習編程

首先,你們須要明確一點,Docker容器不是虛擬機後端

2014年,當我第一次接觸Docker的時候,我把它比作一種輕量級的虛擬機。這樣作無可厚非,由於Docker最初的成功祕訣,正是它比虛擬機更節省內存,啓動更快。Docker不停地給你們宣傳,"虛擬機須要數分鐘啓動,而Docker容器只須要50毫秒"。服務器

然而,Docker容器並不是虛擬機,咱們不妨來比較一下它們。編程語言

理解虛擬機

使用虛擬機運行多個相互隔離的應用時,以下圖:學習

輸入圖片說明

從下到上理解上圖:

  • 基礎設施(Infrastructure)。它能夠是你的我的電腦,數據中心的服務器,或者是雲主機
  • 主操做系統(Host Operating System)。你的我的電腦之上,運行的多是MacOSWindows或者某個Linux發行版。
  • 虛擬機管理系統(Hypervisor)。利用Hypervisor,能夠在主操做系統之上運行多個不一樣的從操做系統。類型1的Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V以及支持Linux的KVM。類型2的Hypervisor有VirtualBox和VMWare。
  • 從操做系統(Guest Operating System)。假設你須要運行3個相互隔離的應用,則須要使用Hypervisor啓動3個從操做系統,也就是3個虛擬機。這些虛擬機都很是大,也許有700MB,這就意味着它們將佔用2.1GB的磁盤空間。更糟糕的是,它們還會消耗不少CPU和內存。
  • 各類依賴。每個從操做系統都須要安裝許多依賴。若是你的的應用須要鏈接PostgreSQL的話,則須要安裝libpq-dev;若是你使用Ruby的話,應該須要安裝gems;若是使用其餘編程語言,好比Python或者Node.js,都會須要安裝對應的依賴庫。
  • 應用。安裝依賴以後,就能夠在各個從操做系統分別運行應用了,這樣各個應用就是相互隔離的。

理解Docker容器

使用Docker容器運行多個相互隔離的應用時,以下圖:測試

不難發現,相比於虛擬機Docker要簡潔不少。由於咱們不須要運行一個臃腫的從操做系統了。雲計算

從下到上理解上圖:

  • 基礎設施(Infrastructu](https://static.oschina.net/uploads/img/201705/31092636_YZIq.jpg "在這裏輸入圖片標題")](https://static.oschina.net/uploads/img/201705/31092636_YZIq.jpg "在這裏輸入圖片標題")re)
  • 主操做系統(Host Operating System)。全部主流的Linux發行版均可以運行Docker。對於MacOS和Windows,也有一些辦法"運行"Docker。
  • Docker守護進程(Docker Daemon)。Docker守護進程取代了Hypervisor,它是運行在操做系統之上的後臺進程,負責管理Docker容器。
  • 各類依賴。對於Docker,應用的全部依賴都打包在Docker鏡像中,Docker容器是基於Docker鏡像建立的。
  • 應用。應用的源代碼與它的依賴都打包在Docker鏡像中,不一樣的應用須要不一樣的Docker鏡像。不一樣的應用運行在不一樣的Docker容器中,它們是相互隔離的。

對比虛擬機與Docker

 Docker守護進程能夠直接與主操做系統進行通訊,爲各個Docker容器分配資源;它還能夠將容器與主操做系統隔離,並將各個容器互相隔離。虛擬機啓動須要數分鐘,而Docker容器能夠在數毫秒內啓動。因爲沒有臃腫的從操做系統,Docker能夠節省大量的磁盤空間以及其餘系統資源。

說了這麼多Docker的優點,你們也沒有必要徹底否認虛擬機技術,由於二者有不一樣的使用場景。虛擬機更擅長於完全隔離整個運行環境。例如,雲服務提供商一般採用虛擬機技術隔離不一樣的用戶。而Docker一般用於隔離不一樣的應用,例如前端後端以及數據庫

若是你對Docker感興趣的話,不妨學習一下Dive Into Docker course

歡迎加入咱們FundebugDocker技術交流羣: 305097057

輸入圖片說明

版權聲明:

轉載時請註明做者Fundebug以及本文地址: https://blog.fundebug.com/2017/05/31/docker-and-vm/

相關文章
相關標籤/搜索