容器和虛擬機 (VM) 相似且互補。兩者都增強了應用程序的可移植性、效率并增強了組織中的開發和運營 (DevOps),盡管存在架構差異。容器在操作系統 (OS) 級別創建抽象層,允許開發人員專注于應用程序,而運營團隊則專注于基礎架構。相比之下,虛擬機利用管理程序通過應用程序開發復制底層硬件資源的功能。在容器還是 VM 之間進行選擇取決于部署系統的要求。
容器和虛擬機如何工作
容器和 VM 都是創建獨立的虛擬化程序包的技術。因此,了解它們如何工作的最簡單方法是從定義“虛擬化”開始。虛擬化允許您將操作系統與底層硬件隔離開來。因此,您可以在同一臺物理機上運行多個操作系統,例如 Linux 和 Windows。
傳統的虛擬化依賴于管理程序來創建虛擬機。管理程序隔離和編排可用的硬件資源,例如處理器、內存、存儲和網絡,根據需要將一部分分配給每個虛擬機。
什么是虛擬機?
最終,每個 VM 都包含來賓操作系統、來賓操作系統需要運行的虛擬化硬件以及已安裝的應用程序,包括相關的依賴項和庫。通常,VM 作為獨立的 PC運行,底層基礎設施可以針對不同的工作負載運行多個獨立的虛擬機。由于每個虛擬機都需要自己的來賓操作系統,因此虛擬機操作是資源密集型的。在大多數情況下,您很少會發現工作負載操作會占用 VM 中的所有可用資源。
您也無法在虛擬化環境中運行單獨的應用程序功能,除非您為不同的軟件模塊化元素使用單獨的 VM。此外,要在不同的虛擬機或數據中心之間遷移應用程序,您必須將整個操作系統與其一起遷移。正是這個缺點使得容器的采用和使用得到了普及。
什么是容器?
與使用虛擬化硬件的 VM 不同,容器將操作系統虛擬化,允許軟件的獨立、模塊化和不同的功能獨立執行。每個容器共享只讀主機操作系統的內核,包括二進制文件和庫。
容器在它們運行的??每個實例中不需要來賓操作系統——它們只是使用主機操作系統的資源和功能。共享操作系統資源允許服務器在同一個操作系統上運行多個工作負載。因此,容器很輕——它們占用幾兆字節——而且與 VM 相比速度很快。
與 VM 一樣,容器允許開發人員提高物理機的處理器、內存和存儲利用率。然而,容器甚至走得更遠。它們促進了微服務架構,您可以在其中高效地精細部署和擴展應用程序組件。
虛擬化的工作原理
虛擬化是使用軟件在硬件之上構建抽象層的技術,允許將單個計算機的硬件拆分為多個虛擬計算機。管理程序是一個微小的軟件層,它允許各種操作系統在共享相同物理計算機資源的同時同時運行。當管理程序安裝在數據中心的物理計算機或網絡(也稱為裸機服務器)上時,它允許操作系統和應用程序與硬件分離。然后它可以被分成多個獨立的“虛擬機”。
容器和虛擬機有何不同
容器和 VM在許多方面有所不同,如下表所總結:
特征 | 容器 | 虛擬機 |
操作系統 | 它僅運行操作系統的用戶模式部分。您可以通過僅選擇應用程序需要的服務來自定義容器。 | 它運行整個操作系統,包括內核。它是資源密集型的。 |
隔離 | 它不會將主機與其他容器完全隔離。因此,與虛擬機相比,它不提供強大的安全邊界。 | 它提供了主機操作系統和其他虛擬機之間的完全隔離。因此,它為在同一服務器或集群上托管應用程序的組織提供了強大的安全性。 |
來賓兼容性 | 它運行在與主機相同的操作系統版本上。 | 它可以運行 VM 內的任何操作系統。 |
操作系統更新和升級 | 您可以通過兩種方式更新或升級容器的操作系統文件。首先,您可以編輯和重建圖像文件。其次,您可以使用容器化編排器。 | 您可以通過在每個虛擬機上下載和安裝更新來更新或升級 VM 的操作系統。如果您有很多 VM,這將是乏味且耗時的。 |
聯網 | 它使用虛擬網絡適配器 (VNA) 的隔離視圖。這提供了主機防火墻與其他容器共享的輕量級虛擬化。 | 它使用具有完全虛擬化的 VNA。 |
容錯性 | 萬一集群節點出現故障,編排器會自動將在其上運行的任何容器重新創建到另一個節點。 | 虛擬機快速故障轉移到集群中的另一個節點,來賓操作系統自動重新啟動。 |
負載均衡 | 編排器自動啟動或停止集群節點上的容器以處理負載和可用性的變化。容器不動。 | VM 負載平衡將正在運行的虛擬機移動到故障轉移群集中的其他節點。 |
如何在容器和虛擬機 (VM) 之間做出選擇
容器和 VM 各有利弊,因此會影響您做出的決定。最終,您的選擇主要取決于兩件事:
- 您是否需要一個輕量級實例以便在裸機系統之間輕松遷移?
- 您想要一個半永久性的 IT 資源分配解決方案嗎?
集裝箱
容器很輕。您可以在不同的服務器和不同的云部署之間快速移動它們,包括私有、公共和混合環境。如果您的首要任務是在最少數量的服務器上最大化應用程序的數量,則可以考慮使用容器。
如果您想部署利用微服務架構的云原生應用程序,以實現跨私有云、公共云和混合云環境的一致開發和部署,容器也是理想之選。容器的唯一警告是它們必須與底層操作系統兼容。
如果你想,你可以考慮容器:
- 實施云原生應用程序。
- 封裝微服務。
- 堅持 DevOps 和持續集成/持續部署 (CI/CD) 實踐。
- 在共享同一操作系統的不同 IT 環境中移動可擴展的應用程序。
虛擬機
相比之下,虛擬機可以運行比單個容器更多的操作。VM 非常適合需要操作系統的所有資源和功能的單一工作負載。然而,擴展的功能使得 VM 的可移植性不如容器。如果你想:你可以考慮虛擬機:
- 托管遺留和單體應用程序。
- 配置服務器、存儲和網絡等 IT 資源。
- 隔離有風險的開發環境。
何時一起使用容器和虛擬機
您可能想知道為什么有人想要同時使用容器和虛擬機。好吧,容器共享主機的操作系統內核,包括二進制文件和庫。跨不同發行版運行 Linux 容器不是問題,因為大多數 Linux 發行版都構建在同一內核之上。
例如,您可以在基于 CentOS 的主機上高效地運行 Ubuntu 容器。但是,內核共享事實意味著您不能在 Linux 主機上運行 Windows 容器,反之亦然。要運行這些容器,您需要在各自的主機上創建一個 VM。例如,您可以在 Linux 主機上創建 Windows VM 來運行 Windows 容器。這是可能的,因為虛擬機利用自己的操作系統,允許操作系統支持容器引擎。
在 VM 內運行容器可將其隔離,從而限制漏洞攻擊的范圍。例如,如果 500 個容器在裸機服務器上共享一個操作系統內核,并且操作系統出現故障,則所有 500 個容器都會受到損害。另一方面,如果托管 50 個或更少容器的 VM 受到威脅,它只會影響這些容器。此故障不會影響同一服務器或集群中運行不同容器的其他虛擬機。
您還可以集成容器和 VM 以實現容量優化。虛擬化在企業 IT 領域很流行,因為它促進了服務器的利用。一臺服務器可以托管多個虛擬機,每個虛擬機托管多個容器主機。此外,每臺服務器都可以托管許多傳統的單體虛擬機。將容器與傳統的整體式 VM 集成使 IT 管理員能夠最大限度地利用物理服務器。