[Docker] 容器與虛擬機

Docker - 容器 (Container) 與虛擬機 (VM)

簡單來說:

  • 虛擬機 (Virtual Machine) 以作業系統為中心
  • 容器 (Container) 以應用程式為中心
ContainerVM
應用程式為單位作業系統為單位
依賴 Host OS 的 kernel任意 Guest OS
封裝應用程式與相依性資源的執行環境配置好各種虛擬資源,如: CPU、記憶體與硬碟的作業系統
Container 間是彼此隔離的VM 會因版本不同造成環境的衝突
佔用的硬體資源少佔用的硬體資源多
微服務 (Microservices)較大型的服務

What is Virtual Machine (VM)

虛擬機 (Virtual Machine) 以作業系統為中心`

虛擬化的目標:

將一個應用程式所需的執行環境打包起來,
建立一個獨立環境,方便在不同的硬體中移動。

虛擬機器通常簡稱為 VM,是一種特殊的軟體(通常稱作映像檔)。其具有專屬的作業系統應用程式,也有獨享的虛擬資源,包括: CPU、記憶體、硬碟、網路介面和其他介面等。實際上,這些資源來自執行虛擬機器的實體主機。

虛擬機又稱訪客(Guest),用來執行的實體機器則稱為主機(Host)。 一部主機上可同時存在多個虛擬機,每個虛擬機器都有自己的作業系統 (OS) 和應用程式。 若使用的主機是伺服器,則須透過虛擬機器監視器的軟體來管理不同的虛擬機器。商務上,虛擬機器可滿足眾多使用者的運算需求,這就是所謂的虛擬化

虛擬機器無法與實體電腦直接互動,而是需要藉助一個叫做 Hypervisor 的輕量型軟體層,在虛擬機器和底層的實體硬體之間進行協調。 Hypervisor 負責將實體運算資源配置給每個虛擬機器。它讓虛擬機器之間相互分開,這樣就不會互相干擾。

https://oer.gitlab.io/oer-on-oer-infrastructure/figures/OS/virtual-machines.png

VM 的優缺點

優點:

  • 安全性較高: 因為硬體層以上都虛擬化,因此安全性會相對較高。
  • 系統的選擇較多: 在 VM 可以選擇各種不同的 OS。
  • 應用程式不須要被拆分: 不需要降低應用程式內服務的耦合性。

缺點:

  • VM 的 Image 較大: 通常為GB以上,較 Container大。
  • 啟動速度慢: 通常要花個幾分鐘,因此服務重啟的速度較慢。
  • 資源使用較多: 因為不只給應用程式本身,還要將一部分資源分給 Guest OS。

What is Docker

容器 (Container) 以應用程式為中心

容器化的目標:

改善虛擬機器因為需要額外裝作業系統 (Guest OS)
導致啟動慢,佔較大記憶體的問題。

容器(Container)是在作業系統層上虛擬化,透過 Container Manager 直接將一個應用程式所需的程式碼、函式庫打包,建立資源控管機制隔離各個容器,並分配 Host OS 上的系統資源。透過容器,應用程式不需要再另外安裝作業系統(Guest OS)也可以執行。

Container 以應用程式為核心虛擬化,
取代傳統需要 Guest OS 的虛擬化技術

Docker 是開放原始碼專案,就是幫我們提供管理容器(Container Manager)技術的服務,提供「應用層級」的虛擬化技術,可讓您快速地開發、測試和部署(交付, shipping)應用程式。

Docker 的優缺點

優點:

  • 成本更低
  • 可攜式性高
  • Contianer 的 Image 較小: 通常幾 MB。
  • 啟動速度較快: 通常幾秒就能生成一個 Container。
  • 效率更高: 因為免去了去在執行一個 Guest OS 的資源。所以能將更多資源運用在跑服務上。
  • 更新較為容易: 只需要利用新的 Image 重新啟動就會更新了。

缺點:

  • 安全性較 VM 差: 因為環境和硬體都是與本機共用。
  • Container通常切分成微服務(Microservices)的方式做部署,在各元件中的網路連結會比較複雜。