×

選擇虛機(jī)還是容器,先來(lái)搞懂容器和虛擬主機(jī)的區(qū)別

分類:虛機(jī)資訊 編輯:IT觀察 瀏覽量:1003
2020-09-24 16:54:54

在互聯(lián)網(wǎng)技術(shù)日益革新、產(chǎn)品快速迭代的今天,如何在提高資源使用率、提升效率的同時(shí)又兼顧互不干涉、安全隔離的原則,促使了虛擬化技術(shù)和容器技術(shù)的相繼誕生。

虛擬化技術(shù)有KVM、VMWare等并駕齊驅(qū),容器技術(shù)為docker獨(dú)領(lǐng)風(fēng)騷,Docker這幾年的迅猛發(fā)展讓容器重新流行起來(lái),不過(guò)但很多資料里介紹Docker時(shí)都說(shuō)是 "新瓶裝舊酒"。除了容器外虛擬機(jī)也是我們或多或少會(huì)接觸到的虛擬化技術(shù)。虛擬機(jī)和容器都用于創(chuàng)建隔離的虛擬環(huán)境,但是這兩種虛擬化技術(shù)有顯著的不同,今天的文章就來(lái)聊一下它們之間的區(qū)別。


虛擬機(jī)
虛擬機(jī)(VM)是共享一個(gè)服務(wù)器的物理資源的操作系統(tǒng)。它是主機(jī)硬件上的Guest,因此也被稱為Guest虛擬機(jī)。

虛擬機(jī)由幾層組成。支持虛擬化的層是hypervisor。hypervisor是一種虛擬化服務(wù)器的軟件。

虛擬機(jī)是怎么工作的
運(yùn)行應(yīng)用程序所需的一切都包含在虛擬機(jī)里--虛擬化的硬件,操作系統(tǒng)以及任何所需的二進(jìn)制文件和庫(kù)。因此,虛擬機(jī)具有自己獨(dú)立的基礎(chǔ)架構(gòu)。

虛擬機(jī)的優(yōu)勢(shì)
虛擬機(jī)可減少在服務(wù)器設(shè)備上的支出,可以利用一個(gè)物理服務(wù)器資源切分成多個(gè)獨(dú)立的虛擬機(jī)來(lái)完成許多工作。

由于只有一臺(tái)主機(jī),因此可以利用虛擬機(jī)管理程序的集中功能高效地管理所有虛擬環(huán)境。這些系統(tǒng)完全相互獨(dú)立,這意味著你可以在不同的虛擬機(jī)里安裝不同的系統(tǒng)環(huán)境。

最重要的是,虛擬機(jī)與主機(jī)操作系統(tǒng)隔離,是進(jìn)行實(shí)驗(yàn)和開(kāi)發(fā)應(yīng)用程序的安全場(chǎng)所。

虛擬機(jī)的劣勢(shì)
虛擬機(jī)可能占用主機(jī)的大量系統(tǒng)資源,虛擬機(jī)的大小為數(shù)GB。在虛擬服務(wù)器上運(yùn)行單個(gè)應(yīng)用程序意味著還要運(yùn)行Guest OS以及Guest OS運(yùn)行所需的所有硬件的虛擬副本。這樣很快就增加了很多RAM和CPU資源消耗。

遷移虛擬機(jī)上運(yùn)行的應(yīng)用程序的過(guò)程也可能很復(fù)雜,因?yàn)樗冀K附加在操作系統(tǒng)上。因此,必須同時(shí)遷移應(yīng)用程序和操作系統(tǒng)。同樣,在創(chuàng)建虛擬機(jī)時(shí),系統(tǒng)管理程序會(huì)分配專用于VM的硬件資源。不過(guò)與運(yùn)行單獨(dú)的實(shí)體服務(wù)器相比,這仍然是經(jīng)濟(jì)的。

容器
容器是一個(gè)不依賴于操作系統(tǒng),運(yùn)行應(yīng)用程序的環(huán)境。它通過(guò)Linux的Namespaces和Cgroups技術(shù)對(duì)應(yīng)用程序進(jìn)程進(jìn)行隔離和限制的,Namespace的作用是隔離,它讓?xiě)?yīng)用進(jìn)程只能看到該Namespace內(nèi)的世界;而Cgroups 的作用是限制分配給進(jìn)程的宿主機(jī)資源。但對(duì)于宿主機(jī)來(lái)說(shuō),這些被“隔離”了的進(jìn)程跟其他進(jìn)程并沒(méi)有太大區(qū)別。

容器只是運(yùn)行在宿主機(jī)上的一種特殊的進(jìn)程,多個(gè)容器之間使用的還是同一個(gè)宿主機(jī)的操作系統(tǒng)內(nèi)核。

關(guān)于Namespaces和Cgroups后面再詳細(xì)介紹,這里你只知道他們是啟動(dòng)隔離和限制應(yīng)用進(jìn)程的就行了。

容器是怎么工作的
Namespace的作用是隔離,它讓?xiě)?yīng)用進(jìn)程只能看到該Namespace內(nèi)的世界;而Cgroups的作用是限制,它給這個(gè)世界圍上了一圈看不見(jiàn)的墻。通過(guò)Mount Namespace可以修改容器進(jìn)程對(duì)自己的文件系統(tǒng) "掛載點(diǎn)"的認(rèn)知。在容器進(jìn)程啟動(dòng)之前重新掛載它的整個(gè)根目錄"/"(通過(guò)pivot_root系統(tǒng)調(diào)用改變進(jìn)程的文件系統(tǒng),如果系統(tǒng)不支持,則使用chroot),而由于Mount Namespace的存在,這個(gè)掛載對(duì)宿主機(jī)不可見(jiàn)的。這個(gè)掛載在容器根目錄上、用來(lái)為容器進(jìn)程提供隔離后執(zhí)行環(huán)境的文件系統(tǒng),就是所謂的“容器鏡像”。它還有一個(gè)更為專業(yè)的名字,叫做:rootfs(根文件系統(tǒng))。rootfs只是一個(gè)操作系統(tǒng)所包含的文件、配置和目錄,并不包括操作系統(tǒng)內(nèi)核。

所以說(shuō),rootfs 只包括了操作系統(tǒng)的 "軀殼",并沒(méi)有包括操作系統(tǒng)的內(nèi)核。同一臺(tái)機(jī)器上的所有容器,都會(huì)共享宿主機(jī)操作系統(tǒng)的內(nèi)核。

這就意味著,如果容器里的應(yīng)用程序需要配置內(nèi)核參數(shù)、跟內(nèi)核進(jìn)行直接的交互,這些都是操作的宿主機(jī)操作系統(tǒng)的內(nèi)核,它對(duì)于該機(jī)器上的所有容器來(lái)說(shuō)是一個(gè)“全局變量”,牽一發(fā)而動(dòng)全身。這也是容器相比于虛擬機(jī)的主要缺陷之一:畢竟虛擬機(jī)有模擬出來(lái)的硬件機(jī)器充當(dāng)沙盒,而且每個(gè)虛擬機(jī)里還運(yùn)行著一個(gè)完整Guest OS讓?xiě)?yīng)用隨便折騰。不過(guò)由于rootfs里打包的不只是應(yīng)用,而是整個(gè)操作系統(tǒng)的文件和目錄,也就意味著,應(yīng)用以及它運(yùn)行所需要的所有依賴,都被封裝在了一起。這就賦予了容器所謂的一致性:無(wú)論在本地、端,還是在一臺(tái)任何地方的機(jī)器上,用戶只需要解壓打包好的容器鏡像,那么這個(gè)應(yīng)用運(yùn)行所需要的完整的執(zhí)行環(huán)境就能被重現(xiàn)出來(lái)。

容器的優(yōu)勢(shì)
容器占用的大小比虛擬機(jī)小很多,甚至可以小到10MB,可以輕松限制容器的內(nèi)存和CPU使用率。與部署應(yīng)用需要部署整個(gè)操作系統(tǒng)的虛擬機(jī)相比,容器非常輕巧且啟動(dòng)迅速。這樣讓我們可以快速擴(kuò)展容器并添加相同的容器。

同樣,容器對(duì)于持續(xù)集成和持續(xù)部署(CI / CD)實(shí)施也是極好的選擇。他們通過(guò)在開(kāi)發(fā)人員之間分發(fā)和合并鏡像來(lái)促進(jìn)協(xié)作開(kāi)發(fā)。

容器的劣勢(shì)
容器仍無(wú)法提供與虛擬機(jī)相同的安全性和穩(wěn)定性。由于它們共享主機(jī)的內(nèi)核,因此不能像虛擬機(jī)一樣完全隔離。

容器是進(jìn)程級(jí)的隔離,一個(gè)容器可以通過(guò)影響宿主機(jī)內(nèi)核的穩(wěn)定性來(lái)影響其他容器。

一旦容器執(zhí)行了任務(wù),它就會(huì)關(guān)閉并刪除其中的所有數(shù)據(jù)。如果希望數(shù)據(jù)保留下來(lái),則必須使用"數(shù)據(jù)卷"進(jìn)行保存,這需要在主機(jī)上進(jìn)行手動(dòng)配置。

容器還是虛擬機(jī)
上面我們列出了容器和虛擬機(jī)各自的優(yōu)勢(shì)和劣勢(shì),我們?cè)谝驗(yàn)閮?yōu)勢(shì)選擇了其一后默認(rèn)就要其忍受劣勢(shì)所帶來(lái)的副作用,凡事都有兩面性沒(méi)有東西可以只有優(yōu)點(diǎn)沒(méi)缺點(diǎn)的。就容器和虛擬機(jī)來(lái)說(shuō),因?yàn)槠渫暾母綦x和安全性虛擬機(jī)通常用于要求苛刻的應(yīng)用程序,網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)以及能消耗VM大部分資源的應(yīng)用程序。而容器通常用于Web應(yīng)用,微服務(wù)。

聲明:免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)

送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)

需注明出處:新網(wǎng)idc知識(shí)百科

免費(fèi)咨詢獲取折扣

Loading