虛擬機(Virtual Machine)和容器(Container)的對比


    目前雲計算平台常用的虛擬化技術有虛擬機(Virtual Machine)和容器(Container)兩種。虛擬機已經是比較成熟的技術,容器技術作為下一代虛擬化技術,國內的各廠商應用還不廣,但似乎其代表着未來的發展方向。

    先來看一下虛擬機和容器的架構圖:

左圖是虛擬機

從下到上理解:

  • 基礎設施(Infrastructure)。它可以是你的個人電腦,數據中心的服務器,或者是雲主機
  • 主機操作系統(Host Operating System)
  • 虛擬機管理系統(Hypervisor)。利用Hypervisor,可以在主操作系統之上運行多個不同的從操作系統。類型1的Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V、Xen以及KVM。類型2的Hypervisor有VirtualBox和VMWare workstation。
  • 客戶機操作系統(Guest Operating System)。假設你需要運行3個相互隔離的應用,則需要使用Hypervisor啟動3個客戶機操作系統,也就是3個虛擬機。這些虛擬機都非常大,也許有700MB,這就意味着它們將占用2.1GB的磁盤空間。更糟糕的是,它們還會消耗很多CPU和內存。
  • 各種依賴。每一個客戶機操作系統都需要安裝許多依賴。如果你的應用需要連接PostgreSQL的話,則需要安裝libpq-dev;如果你使用Ruby的話,應該需要安裝gems;如果使用其他編程語言,比如Python或者Node.js,都會需要安裝對應的依賴庫。
  • 應用。安裝依賴之后,就可以在各個客戶機操作系統分別運行應用了,這樣各個應用就是相互隔離的。

由於有了多個操作系統,所以虛擬機的架構中我們知道每個虛機中都有一個獨立的Kernel.

什么是Kernel?

簡單來講Kernel 就是連接操作系統(OS)和硬件(Hardware)的一個中間組件。

大概個架構圖如下

 

上面的右圖是

從下到上理解上圖:

  • 基礎設施(Infrastructure)
  • 主操作系統(Host Operating System)。所有主流的Linux發行版都可以運行Docker。對於MacOS和Windows,也有一些辦法”運行”Docker。
  • Docker守護進程(Docker Daemon)。Docker守護進程取代了Hypervisor,它是運行在操作系統之上的后台進程,負責管理Docker容器。
  • 各種依賴。對於Docker,應用的所有依賴都打包在Docker鏡像中,Docker容器是基於Docker鏡像創建的。
  • 應用。應用的源代碼與它的依賴都打包在Docker鏡像中,不同的應用需要不同的Docker鏡像。不同的應用運行在不同的Docker容器中,它們是相互隔離的。

很明顯圖中只有一個操作系統,即只有一個獨立的Kernel.

我們知道每個操作系統有多個進程(Process)

簡單來講容器可以理解為進程沙盒(sandbox)

那到底這個進程沙盒里裝了些什么呢?

  • process namespace (進程命名空間): 來規定可以使用什么資源
  • Cgroups (控制組) : 來規定可以用多少資源:如CPU,內存, 網絡等
  • Union-capable file system: 把不同文件聯合到一個掛載點的文件系統服務

在linux系統中有6種Namespace可以給linux資源提供進程級別的隔離。Namespace保證了每個容器只可以看到它自己所擁有的環境,並且不會影響運行在其他容器中的進程。

Namespace也讓容奇港擁有自己的網絡設備,因此每一個容器都有自己的IP地址和主機名,這讓容器之間可以相互獨立。 

相對虛擬機架構來講,容器架構有什么好處呢?

左圖的虛擬機架構中,我們的主機有Host 三個不同的操作系統,這個就意味着需要模擬(emulate) 三個操作系統。
對比右圖的容器架構中,我們的3個容器都在一個操作系統上運行,並不需要模擬任何操作系統。所以相對左圖我們會消耗更少的資源,並達到跟虛擬機架構中等同的效果。

用一張圖大概描述容器相對虛擬機的優勢


 
對比圖
  • 容器架構降低了硬件成本
  • 更快速的部署開發/測試/生產環境
  • 更簡便的維護開發/測試/生產環境
  • 與微服務架構更為契合
 
參考:
https://www.jianshu.com/p/d132333dbf40
https://www.zhihu.com/question/48174633/answer/180743885

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM