容器與虛擬機(jī)——這兩種虛擬化解決方案有什么區(qū)別?一方面,您擁有容器化,它可以虛擬化操作系統(tǒng) (OS),并允許多個工作負(fù)載在其上運行。另一方面,您擁有基于虛擬機(jī)的虛擬化,可以虛擬化硬件并允許多個操作系統(tǒng)實例在其上運行。這篇文章首先定義虛擬機(jī)和容器,然后討論它們最顯著的區(qū)別,然后討論它們?nèi)绾卧谝粋€環(huán)境中協(xié)同工作,包括一個使用Parallels ? Remote Application Server (RAS)管理的環(huán)境。
什么是虛擬機(jī)?
想象虛擬機(jī)是什么的最簡單方法可能是想象計算機(jī)運行在純軟件的計算機(jī)之上。相比之下,運行這些“基于軟件的計算機(jī)”的計算機(jī)只是一臺普通計算機(jī),即由硬件和軟件組成的計算機(jī)。例如,它具有物理 CPU、內(nèi)存和存儲(本文將其稱為資源),而那些“基于軟件的計算機(jī)”則沒有。
在虛擬化術(shù)語中,那些“基于軟件的計算機(jī)”被稱為虛擬機(jī)或 VM。VM 具有從底層物理資源分配給它們的虛擬化資源。創(chuàng)建 VM 時,會為該 VM 保留一部分物理資源。此外,這些虛擬機(jī)中的每一個都有一個操作系統(tǒng)和一個或多個應(yīng)用程序。
使一個或多個 VM 在物理計算機(jī)上運行并與 VM 共享物理資源的軟件稱為管理程序。一些管理程序運行在主機(jī)操作系統(tǒng)之上,而其他管理程序運行在裸機(jī)(無主機(jī)操作系統(tǒng))上,即它們直接安裝在物理服務(wù)器上。
作為軟件,每個虛擬機(jī)都封裝在一個文件中。作為文件,它們比物理文件更便攜。您可以復(fù)制或克隆它們。您可以通過網(wǎng)絡(luò)傳輸它們。您可以在不再需要時丟棄或刪除它們。您甚至可以創(chuàng)建一個“黃金映像”作為模板,然后以編程方式(或通過管理員控制臺)從該模板創(chuàng)建數(shù)百甚至數(shù)千個 VM。
由于這些特性,虛擬機(jī)極大地簡化了 IT 管理員的生活。虛擬機(jī)使 IT 管理員和員工能夠?qū)⒎?wù)器和桌面的配置和部署時間從幾小時縮短到幾分鐘,或者在涉及大量(100 或 1,000 個端點)時,從幾周或幾個月縮短到幾天。它們可用于創(chuàng)建測試環(huán)境、在主機(jī)操作系統(tǒng)上運行遺留應(yīng)用程序或非本地應(yīng)用程序、檢查受惡意軟件感染的文件等。
什么是容器?
容器有點類似。與虛擬機(jī)一樣,它們采用某種形式的虛擬化。但容器不是虛擬化底層硬件,而是虛擬化主機(jī)操作系統(tǒng),即容器運行的操作系統(tǒng)。容器共享主機(jī)操作系統(tǒng)內(nèi)核,但主機(jī)操作系統(tǒng)的其他元素(例如,在用戶模式下運行的系統(tǒng)文件或庫)根據(jù)特定容器需要的文件/庫并入每個容器內(nèi)。
通常,容器包括應(yīng)用程序、該應(yīng)用程序所需的操作系統(tǒng)文件以及其他依賴項和相關(guān)配置文件。因為大部分操作系統(tǒng)(內(nèi)核)不包含在容器中,所以容器通常比 VM 小得多。如果虛擬機(jī)的大小可以達(dá)到千兆字節(jié),那么容器可能只有幾十兆字節(jié)。
由于占用空間小,容器的啟動和部署速度比虛擬機(jī)快得多——容器的啟動時間不到一秒,而虛擬機(jī)的啟動時間只需幾分鐘。而且因為容器共享一個主機(jī)操作系統(tǒng),所以在主機(jī)操作系統(tǒng)上進(jìn)行的任何修補/更新都會被它上面的容器繼承(這僅適用于內(nèi)核中運行的文件。每個單獨容器中的其他文件必須單獨更新)。
由于它們具有極高的可移植性,并且它們已經(jīng)包含容器化應(yīng)用程序獨立運行所需的所有代碼和信息,因此容器在自動化 DevOps 管道中非常有用。實施持續(xù)集成/部署 (CI/CD) 的 DevOps 團(tuán)隊經(jīng)常使用容器來簡化和加速這些流程。這種可移植性也使容器適用于多云環(huán)境。
容器圖像可以上傳到存儲庫以與希望使用它們的其他人共享。這些鏡像可以是數(shù)據(jù)庫、操作系統(tǒng)、內(nèi)容管理系統(tǒng) (CMS)、Web 服務(wù)器,以及幾乎所有的容器化應(yīng)用程序。開發(fā)人員、IT 人員和其他人可以使用這些映像來構(gòu)建他們自己的應(yīng)用程序。
容器與虛擬機(jī):有什么區(qū)別?
一般來說,容器更便于移植,而虛擬機(jī)具有更嚴(yán)格的隔離。但這并不是兩者之間唯一的區(qū)別。以下是關(guān)于這兩個特征以及其他一些差異的更多信息:
- 可移植性。容器和基于 VM 的應(yīng)用程序都具備運行所需的一切。因此,您可以說它們都是便攜式的。但是,由于容器不包含操作系統(tǒng)內(nèi)核,而只是利用底層主機(jī)操作系統(tǒng)提供的資源,因此它們比虛擬機(jī)更小,因此更便攜。
- 隔離。虛擬機(jī)與其周圍環(huán)境更加隔離,無論是主機(jī)操作系統(tǒng)還是相鄰的虛擬機(jī)。這種隔離級別是在同一物理服務(wù)器上托管不同組織的虛擬服務(wù)器安全的原因之一。雖然容器也具有高度的隔離性,但它們?nèi)匀荒J(rèn)訪問主機(jī)操作系統(tǒng),并且不像 VM 那樣隔離。
- 部署。您需要一個虛擬機(jī)管理程序,例如 Microsoft Hyper-V、VMware ESXi 或 Citrix Hypervisor 來部署 VM。另一方面,要部署容器,您需要 Docker 或類似的解決方案(盡管目前使用最廣泛的是 Docker)。您需要使用腳本或 System Center Virtual Machine Manager 等工具進(jìn)行大規(guī)模 VM 部署。對于容器,大規(guī)模部署、自動化和編排的實際解決方案是 Kubernetes。
- 持久存儲。虛擬機(jī)和容器都可以是無狀態(tài)的。在這種情況下,運行時創(chuàng)建的所有文件僅在 VM 或容器的生命周期內(nèi)保留。但是,即使在 VM 或容器已終止/銷毀后,您也可能希望保留特定文件。對于 VM,您可以通過創(chuàng)建虛擬硬盤 (VHD) 來獲得持久存儲。對于容器,您可以使用卷或綁定掛載。
容器與虛擬機(jī):它們可以一起工作嗎?
雖然單獨使用,但容器和虛擬機(jī)在很大程度上可以共存。在某些情況下,如果他們這樣做會更好。以下是一些組合容器和虛擬機(jī)有意義的用例。
提高容器可移植性
到目前為止,這篇文章對容器的超便攜性贊不絕口。盡管有這種看法,但容器在該部門確實有一些限制。如果您還記得,容器使用其主機(jī)的操作系統(tǒng)內(nèi)核。因此,您不能在 Linux 主機(jī)上運行基于 Windows 的容器,反之亦然。
這也意味著如果你有一堆容器在 Linux 主機(jī)上運行,??你就不能在 Windows 主機(jī)上傳輸和運行這些容器。您只能在另一臺 Linux 主機(jī)上運行它們。容器可移植性如此之多。如果您利用虛擬機(jī),這應(yīng)該不是問題。
在上面的場景中,你可以在你的 Windows 主機(jī)上安裝一個虛擬機(jī)管理程序,在它上面設(shè)置一個 Linux VM,然后——瞧——你已經(jīng)有了一個可以運行 Linux 容器的環(huán)境。
利用 VM 隔離
在同一主機(jī)上運行的所有容器共享該主機(jī)的內(nèi)核,這是一個安全風(fēng)險。主機(jī)操作系統(tǒng)中的錯誤理論上可以允許惡意或受惡意軟件感染的容器到達(dá)同一主機(jī)上運行的其他容器。此外,如果內(nèi)核存在漏洞,它可能會影響在其上運行的所有容器。
由于虛擬機(jī)具有更強大的隔離性,因此在 VM 上運行的容器可以利用該安全功能。例如,您可以將需要更強安全性的容器組合在一起,并在單獨的 VM 上運行它們(可能使用強化的操作系統(tǒng))。相比之下,其他安全要求較低的容器在另一個 VM 上運行。
讓基于容器的應(yīng)用程序與現(xiàn)有的基于虛擬機(jī)的應(yīng)用程序通信
如果您已經(jīng)在 VM 上運行了應(yīng)用程序,則可以讓運行在容器上的應(yīng)用程序與它們通信。例如,您可以讓容器化移動應(yīng)用程序連接到在 VM 上運行的數(shù)據(jù)庫,或者讓容器化客戶端應(yīng)用程序連接到在 VM 上運行的服務(wù)器應(yīng)用程序。