分享方式:


容器與虛擬機器

適用于:Windows Server 2022、Windows Server 2019、Windows Server 2016

本主題會討論容器和虛擬機器 (VM) 的一些主要相似性與差異,以及其各自的可能使用時機。 容器和 VM 都有其用途:事實上,許多容器部署都會使用 VM 作為主機作業系統,而不是直接在硬體上執行,尤其是在雲端中執行容器時。

如需容器的概觀,請參閱 Windows 和容器

容器架構

容器是一個隔離且輕量型的定址接收器,用於在主機作業系統上執行應用程式。 容器是以主機作業系統的核心 (可視為作業系統的「地下管線」) 為基礎,而且只包含應用程式以及會在使用者模式下執行的一些輕量作業系統 API 和服務,如下圖所示。

顯示如何在核心上執行容器的架構圖

虛擬機器架構

與容器相比,VM 會執行完整的作業系統 (包括其自己的核心),如下圖所示。

顯示 VM 如何在主機作業系統旁執行完整作業系統的架構圖

容器與虛擬機器

下表顯示這兩種互補技術的一些相似性與差異。

功能 虛擬機器 容器
隔離 可與主機作業系統和其他 VM 徹底隔離。 如果強式安全性界限很重要 (例如,在相同伺服器或叢集上裝載來自競爭公司的應用程式),隔離便很有用。 一般可提供與主機和其他容器的輕量型隔離功能,但無法提供和 VM 一樣的強式安全性界限。 (您可以使用 Hyper-V 隔離模式在輕量型 VM 中隔離每個容器,以提升安全性)。
作業系統 會執行包含核心在內的完整作業系統,因此需要更多系統資源 (CPU、記憶體和儲存體)。 執行作業系統的使用者模式部分,而且可以量身打造而只包含應用程式所需的服務,因此使用的系統資源較少。
客體相容性 幾乎可以在虛擬機器內執行任何作業系統 會在與主機相同的作業系統版本上執行 (Hyper-V 隔離可讓您在輕量型 VM 環境中執行舊版的同款 OS)
部署 使用 Windows Admin Center 或 Hyper-V 管理員部署個別 VM;使用 PowerShell 或 System Center Virtual Machine Manager 部署多個 VM。 透過命令列使用 Docker 部署個別容器;使用協調器 (例如 Azure Kubernetes Service) 部署多個容器。
作業系統更新和升級 在每個 VM 上下載並安裝作業系統更新。 若要安裝新版作業系統,則必須升級,但通常會直接建立全新的 VM。 這可能非常耗時,特別是如果您有很多 VM 的話... 在容器內更新或升級作業系統檔案的方法相同:
  1. 編輯容器映像的組建檔案 (稱為 Dockerfile),以指向最新版的 Windows 基底映像。
  2. 使用這個新的基底映像重建容器映像。
  3. 將容器映像推送至容器登錄。
  4. 使用協調器重新部署。
    協調器提供了強大的自動化功能而可大規模執行此作業。 如需詳細資訊,請參閱教學課程:在 Azure Kubernetes Service 中更新應用程式
永續性儲存體 使用虛擬硬碟 (VHD) 作為單一 VM 的本機儲存體,或使用 SMB 檔案共用作為多部伺服器共用的儲存體 使用 Azure 磁碟作為單一節點的本機儲存體,或使用 Azure 檔案儲存體 (SMB 共用) 作為多個節點或伺服器共用的儲存體。
負載平衡 虛擬機器負載平衡功能會將執行中的 VM 移至容錯移轉叢集中的其他伺服器。 容器本身不會移動;相反地,協調器可以在叢集節點上自動啟動或停止容器,以管理負載和可用性的變更。
容錯 VM 可以容錯移轉至叢集中的其他伺服器,並在新的伺服器上重新啟動 VM 的作業系統。 如果叢集節點失敗,則協調器就會在其他叢集節點上快速重新建立任何在失敗節點上執行的容器。
網路功能 使用虛擬網路介面卡。 使用虛擬網路介面卡的隔離觀點,因此所提供的虛擬化功能較少 (主機的防火牆會與容器共用),但同時也使用較少資源。 如需詳細資訊,請參閱 Windows 容器的網路功能