容器和虛擬機器在哪裡使用?
容器和虛擬機器都是部署技術。在軟體開發生命週期中,部署是使應用程式在伺服器或裝置上高效執行的機制。該應用程式需要若干稱為相依項的附加軟體元件,這些元件與伺服器的底層作業系統密切相關。應用程式的程式碼與實體裝置之間所有這些不同的軟體層,稱為應用程式環境。
軟體部署方面的挑戰
在發佈新功能之前,組織通常不得不在多個環境中部署應用程式,例如,在 Linux 環境中開發,並在 Windows 中進行測試。在環境之間移動應用程式可能會導致錯誤和故障,由於缺少相依性,這會導致生產率下降。同時,僅在一個環境中建置和測試應用程式會限制其實用性。以下是一些範例:
- 您可能需要針對不同作業系統的使用者開發不同的版本
- 您的管理員必須統一更新和維護所有環境,從而增加開發成本
- 您可能會發現,將應用程式從內部部署資料中心移至雲端,或在不同的雲端環境之間移動極具挑戰性
虛擬機器的用途
從歷史上看,開發虛擬機器技術是為了有效地利用不斷增加的實體硬體容量和處理能力。在單一實體伺服器上執行單一應用程式環境,並未充分利用硬體資源。虛擬機器可讓組織在同一實體機器上,安裝多個作業系統並建立多個環境。
容器的用途
之所以建立容器,是為了在多個環境中以可預測和可重複的方式封裝和執行應用程式。您無須重新建立環境,而是將應用程式封裝,以在所有類型的實體或虛擬環境中執行。這類似於讓宇航員穿上宇航服,而不是在另一個星球上為他們重建地球大氣層。
容器和虛擬機器之間的相似之處
容器和虛擬機器允許應用程式完全隔離,以便您在多個環境中執行。其可虛擬或抽象可底層基礎設施,因此使用者不必為此擔憂。此外,其還可讓您將軟體基礎結構封裝至稱為影像檔案的單一檔案中。您可以使用影像檔案,隨時隨地快速設定並執行您的應用程式。此外,您還可以使用軟體程序來管理系統組態或擴展,進而同時管理數千個應用程式。然而,容器和虛擬機器的作用和使用範圍因應用程式的部署位置和方式而異。
主要差異:容器與虛擬機器
容器可虛擬化作業系統,因此應用程式可在任何平台獨立執行。虛擬機器超越了實體機器虛擬化,因此您可以有效地使用硬體資源。下面列出了更多不同之處。
運作方式
容器技術包括建立自給自足的軟體套件,這些套件不論在哪部機器上都可一致執行。軟體開發人員建立和部署容器映像,即包含執行應用程式所需資訊的檔案。容器映像是唯讀的,電腦系統無法變更。
虛擬機器技術涉及在實體伺服器或電腦上安裝虛擬化軟體。實體電腦稱為主機電腦,虛擬機器稱為客體電腦。您可以根據需要設定和更新客體作業系統及其應用程式,而不影響主機作業系統。
核心技術
虛擬機器使用 Hypervisor,在客體作業系統與主機作業系統之間進行通訊。Hypervisor 可協調資源共用,因此,虛擬機器與同一硬體上的多個其他虛擬機器會隔離執行。
另一方面,容器使用容器引擎或容器執行時間。這是充當容器與作業系統之間中介代理的軟體,提供和管理應用程式所需的資源。Docker 是最熱門的開放原始碼容器引擎。
大小
虛擬機器映像檔案較大 (幾 GB),因為其包含自己的作業系統。增加的資源意味著您可以複製、拆分、抽象和模擬整個伺服器、資料庫、桌面和網路。容器檔案更輕量,能夠以 MB 為單位進行量測。容器僅封裝執行單一應用程式所需的資源。
何時使用容器與虛擬機器
在這裡,我們給出了在虛擬機器與容器之間進行應用程式部署選擇時,需要考慮的一些因素。
環境設定
虛擬機器讓開發人員能夠更好地控制應用程式的環境。他們可以手動安裝系統軟體、快照組態狀態,並在需要時將其還原至之前的狀態。其對於構思和實驗,或測試不同的環境以提高應用程式的效能很有用。
一旦選擇最佳組態,容器即可提供組態的靜態定義。
軟體開發速度
虛擬機器是全堆疊系統,建置和重新產生可能很費力。驗證任何修改都非常耗時,因為您必須重新產生環境。
如果您想要經常建置、測試和發佈新功能,容器是更好的選擇。由於其只包含高階軟體,因此修改和反覆運作速度非常快。
可擴展性
虛擬機器佔用更多儲存空間,並且需要您在內部部署資料中心佈建更多硬體。切換至雲端執行個體可降低成本,但遷移整個環境也會帶來自身挑戰。
容器會佔用更少的空間並且更易於擴展。更重要的是,容器可讓您使用微型服務,來提供對應用程式可擴展性的精細控制。微型服務是一種架構式和組織式的軟體開發方法,其中軟體由小型獨立服務組成,並透過定義良好的 API 進行通訊。容器可讓您根據需要擴展個別微型服務。
差異摘要:容器與虛擬機器
特性 |
容器 |
虛擬機器 |
定義 |
軟體程式碼套件包含應用程式的程式碼、程式庫,以及構成應用程式執行環境的其他相依項。 |
實體機器的數位副本。將實體硬體分割為多個環境。 |
虛擬化 |
虛擬化作業系統。 |
虛擬化底層實體基礎設施。 |
封裝 |
執行應用程式或應用程式元件所需的作業系統之上的軟體層。 |
作業系統、其上的所有軟體層、多個應用程式。 |
技術 |
容器引擎與資源的底層作業系統協調。 |
Hypervisor 與底層作業系統或硬體協調。 |
大小 |
更輕量 (以 MB 為單位)。 |
大得多 (以 GB 為單位)。 |
控制 |
對容器外環境的控制較少。 |
更好地控制整個環境。 |
靈活性 |
比較靈活。您可以在內部部署環境與以雲端為中心的環境之間快速遷移。 |
不太靈活。遷移具有挑戰性。 |
可擴展性 |
高度可擴展。微型服務可實現精細可擴展性。 |
擴展可能代價高昂。需要從內部部署執行個體切換至雲端執行個體,以實現經濟高效的擴展。 |
進一步了解有關容器的資訊 | 進一步了解有關虛擬機器的資訊 |
AWS 如何協助您處理容器與虛擬機器?
AWS 提供多種服務,來支援您的所有應用程式部署需求。以下是一些範例:
- AWS App2Container 是一種容器化工具,可讓軟體開發人員將舊式應用程式現代化。開發人員使用 AWS App2Container 將 Java 和 .NET 應用程式轉換為容器化應用程式。
- Amazon Elastic Container Registry (Amazon ECR) 是高度可用且安全的私有容器儲存庫,可讓您輕鬆存放和管理 Docker 容器映像。
- Amazon Elastic Container Service (Amazon ECS) 是可高度擴展的高效能容器協同運作服務,能夠在 AWS 雲端執行 Docker 容器。
- Amazon Elastic Compute Cloud (Amazon EC2) 可讓您對雲端執行個體進行精細控制,並選擇所需的處理器、儲存和網路。
- AWS Fargate 是 Amazon ECS 採用的技術,可讓您執行 Docker 容器,無須部署或管理基礎設施。
- VMWare Cloud on AWS 可讓您簡化並加速任務關鍵型生產工作負載從內部部署虛擬機器到 AWS 雲端的遷移。
立即建立免費的 AWS 帳戶,開始虛擬化和容器化。