容器與虛擬機 (VM):有何區別?
如果最近才開始學習虛擬化工具,可能想知道圍繞容器與虛擬機 (VM) 的技術對話有何不同。容器已經成為云原生開發的主導力量 ,因此了解它們是什么以及它們不是什么很重要。雖然容器和 VM 具有截然不同和獨特的特征,但它們的相似之處在于它們都可以提高 IT 效率、提供應用程序可移植性并增強 DevOps 和軟件開發生命周期。
虛擬化的工作原理
虛擬化是使用軟件在計算機硬件上創建抽象層的過程,該抽象層允許將單個計算機的硬件元素劃分為多個虛擬計算機。
所使用的軟件稱為 管理程序 ——一個小層,可以讓多個操作系統并排運行,共享相同的物理計算資源。當在數據中心的物理計算機或服務器(也稱為裸機服務器)上使用管理程序時 ,它允許物理計算機將其操作系統和應用程序與其硬件分開。然后,它可以將自己分成幾個獨立的“虛擬機”。
什么是虛擬機?
虛擬機 (VM) 是一種用于構建虛擬化計算環境的技術。它們已經存在了很長一段時間,被認為是第一代云計算的基礎 。
簡而言之,虛擬機是物理計算機的仿真。VM 使團隊能夠在一臺計算機上運行看似多臺具有多個操作系統的機器。VM 通過使用稱為管理程序的輕量級軟件層與物理計算機交互。管理程序可以將 VM 彼此分開,并在它們之間分配處理器、內存和存儲。
VM 也稱為虛擬服務器、虛擬服務器實例和虛擬專用服務器。
什么是容器?
容器是處理虛擬化的一種更輕量級、更敏捷的方式——由于它們不使用管理程序,可以享受更快的資源配置和新應用程序的更快可用性。
容器化不是啟動整個虛擬機,而是 將運行單個應用程序或微服務所需的一切打包在一起(連同它們需要運行的運行時庫)。容器包括所有代碼、其依賴項甚至操作系統本身。這使應用程序幾乎可以在任何地方運行——臺式計算機、傳統 IT 基礎設施或云。
容器使用一種操作系統 (OS) 虛擬化形式。簡而言之,它們利用主機操作系統的特性來隔離進程并控制進程對 CPU、內存和桌面空間的訪問。
容器已經存在了幾十年,但普遍的共識是現代容器時代始于 2013 年 Docker 的引入,Docker 是一個用于構建、部署和管理容器化應用程序的開源平臺。 詳細了解 Docker、Docker 容器、Dockerfile(容器映像的構建文件)以及生態系統在過去十年中如何隨著容器技術的發展而發展。
容器與 VM:有何區別?
在傳統虛擬化中,虛擬機管理程序虛擬化物理硬件。結果是每個虛擬機都包含一個來賓操作系統、操作系統運行所需的硬件的虛擬副本以及應用程序及其關聯的庫和依賴項。具有不同操作系統的虛擬機可以運行在同一臺物理服務器上。例如,VMware VM 可以在 Linux VM 旁邊運行,而 Linux VM 可以在 Microsoft VM 旁邊運行,等等。
容器不是虛擬化底層硬件,而是虛擬化操作系統(通常是 Linux 或 Windows),因此每個單獨的容器 只包含 應用程序及其庫和依賴項。容器體積小、速度快且可移植,因為與虛擬機不同,容器不需要在每個實例中都包含來賓操作系統,而是可以簡單地利用主機操作系統的功能和資源。
就像虛擬機一樣,容器允許開發人員提高物理機的 CPU 和內存利用率。然而,容器更進一步,因為它們還支持微服務架構,在微服務架構中可以更精細地部署和擴展應用程序組件。這是一個有吸引力的替代方案,因為單個組件正在努力應對負載,因此必須擴展整個單體應用程序。
為什么是容器?
雖然仍然有很多理由使用 VM,但容器提供了一定程度的靈活性和可移植性,非常適合多云世界。當開發人員創建新應用程序時,他們可能不知道需要部署它的所有位置。今天,一個組織可能在其私有云上運行應用程序,但明天可能需要將其部署在來自不同提供商的公共云上。 容器化 應用程序為團隊提供了處理現代 IT 的眾多軟件環境所需的靈活性。
容器也是自動化和 DevOps 管道的理想選擇,包括持續集成和持續部署(CI/CD) 實施。
管理多云容器
盡管容器有很多好處,而且在無數用例中它們是最佳選擇,但它們也確實面臨著一些挑戰。大型企業應用程序可能包含大量容器,容器管理給團隊帶來了一些嚴重問題。如何才能了解正在運行的內容和位置?如何處理安全性和合規性等關鍵問題?如何始終如一地管理應用程序?