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