熱銷產(chǎn)品
選擇虛機還是容器,先來搞懂容器和虛擬主機的區(qū)別
在互聯(lián)網(wǎng)技術(shù)日益革新、產(chǎn)品快速迭代的今天,如何在提高資源使用率、提升效率的同時又兼顧互不干涉、安全隔離的原則,促使了虛擬化技術(shù)和容器技術(shù)的相繼誕生。
虛擬化技術(shù)有KVM、VMWare等并駕齊驅(qū),容器技術(shù)為docker獨領(lǐng)風騷,Docker這幾年的迅猛發(fā)展讓容器重新流行起來,不過但很多資料里介紹Docker時都說是 "新瓶裝舊酒"。除了容器外虛擬機也是我們或多或少會接觸到的虛擬化技術(shù)。虛擬機和容器都用于創(chuàng)建隔離的虛擬環(huán)境,但是這兩種虛擬化技術(shù)有顯著的不同,今天的文章就來聊一下它們之間的區(qū)別。
虛擬機
虛擬機(VM)是共享一個服務(wù)器的物理資源的操作系統(tǒng)。它是主機硬件上的Guest,因此也被稱為Guest虛擬機。
虛擬機由幾層組成。支持虛擬化的層是hypervisor。hypervisor是一種虛擬化服務(wù)器的軟件。
虛擬機是怎么工作的
運行應用程序所需的一切都包含在虛擬機里--虛擬化的硬件,操作系統(tǒng)以及任何所需的二進制文件和庫。因此,虛擬機具有自己獨立的基礎(chǔ)架構(gòu)。
虛擬機的優(yōu)勢
虛擬機可減少在服務(wù)器設(shè)備上的支出,可以利用一個物理服務(wù)器資源切分成多個獨立的虛擬機來完成許多工作。
由于只有一臺主機,因此可以利用虛擬機管理程序的集中功能高效地管理所有虛擬環(huán)境。這些系統(tǒng)完全相互獨立,這意味著你可以在不同的虛擬機里安裝不同的系統(tǒng)環(huán)境。
最重要的是,虛擬機與主機操作系統(tǒng)隔離,是進行實驗和開發(fā)應用程序的安全場所。
虛擬機的劣勢
虛擬機可能占用主機的大量系統(tǒng)資源,虛擬機的大小為數(shù)GB。在虛擬服務(wù)器上運行單個應用程序意味著還要運行Guest OS以及Guest OS運行所需的所有硬件的虛擬副本。這樣很快就增加了很多RAM和CPU資源消耗。
遷移虛擬機上運行的應用程序的過程也可能很復雜,因為它始終附加在操作系統(tǒng)上。因此,必須同時遷移應用程序和操作系統(tǒng)。同樣,在創(chuàng)建虛擬機時,系統(tǒng)管理程序會分配專用于VM的硬件資源。不過與運行單獨的實體服務(wù)器相比,這仍然是經(jīng)濟的。
容器
容器是一個不依賴于操作系統(tǒng),運行應用程序的環(huán)境。它通過Linux的Namespaces和Cgroups技術(shù)對應用程序進程進行隔離和限制的,Namespace的作用是隔離,它讓應用進程只能看到該Namespace內(nèi)的世界;而Cgroups 的作用是限制分配給進程的宿主機資源。但對于宿主機來說,這些被“隔離”了的進程跟其他進程并沒有太大區(qū)別。
容器只是運行在宿主機上的一種特殊的進程,多個容器之間使用的還是同一個宿主機的操作系統(tǒng)內(nèi)核。
關(guān)于Namespaces和Cgroups后面再詳細介紹,這里你只知道他們是啟動隔離和限制應用進程的就行了。
容器是怎么工作的
Namespace的作用是隔離,它讓應用進程只能看到該Namespace內(nèi)的世界;而Cgroups的作用是限制,它給這個世界圍上了一圈看不見的墻。通過Mount Namespace可以修改容器進程對自己的文件系統(tǒng) "掛載點"的認知。在容器進程啟動之前重新掛載它的整個根目錄"/"(通過pivot_root系統(tǒng)調(diào)用改變進程的文件系統(tǒng),如果系統(tǒng)不支持,則使用chroot),而由于Mount Namespace的存在,這個掛載對宿主機不可見的。這個掛載在容器根目錄上、用來為容器進程提供隔離后執(zhí)行環(huán)境的文件系統(tǒng),就是所謂的“容器鏡像”。它還有一個更為專業(yè)的名字,叫做:rootfs(根文件系統(tǒng))。rootfs只是一個操作系統(tǒng)所包含的文件、配置和目錄,并不包括操作系統(tǒng)內(nèi)核。
所以說,rootfs 只包括了操作系統(tǒng)的 "軀殼",并沒有包括操作系統(tǒng)的內(nèi)核。同一臺機器上的所有容器,都會共享宿主機操作系統(tǒng)的內(nèi)核。
這就意味著,如果容器里的應用程序需要配置內(nèi)核參數(shù)、跟內(nèi)核進行直接的交互,這些都是操作的宿主機操作系統(tǒng)的內(nèi)核,它對于該機器上的所有容器來說是一個“全局變量”,牽一發(fā)而動全身。這也是容器相比于虛擬機的主要缺陷之一:畢竟虛擬機有模擬出來的硬件機器充當沙盒,而且每個虛擬機里還運行著一個完整Guest OS讓應用隨便折騰。不過由于rootfs里打包的不只是應用,而是整個操作系統(tǒng)的文件和目錄,也就意味著,應用以及它運行所需要的所有依賴,都被封裝在了一起。這就賦予了容器所謂的一致性:無論在本地、云端,還是在一臺任何地方的機器上,用戶只需要解壓打包好的容器鏡像,那么這個應用運行所需要的完整的執(zhí)行環(huán)境就能被重現(xiàn)出來。
容器的優(yōu)勢
容器占用的大小比虛擬機小很多,甚至可以小到10MB,可以輕松限制容器的內(nèi)存和CPU使用率。與部署應用需要部署整個操作系統(tǒng)的虛擬機相比,容器非常輕巧且啟動迅速。這樣讓我們可以快速擴展容器并添加相同的容器。
同樣,容器對于持續(xù)集成和持續(xù)部署(CI / CD)實施也是極好的選擇。他們通過在開發(fā)人員之間分發(fā)和合并鏡像來促進協(xié)作開發(fā)。
容器的劣勢
容器仍無法提供與虛擬機相同的安全性和穩(wěn)定性。由于它們共享主機的內(nèi)核,因此不能像虛擬機一樣完全隔離。
容器是進程級的隔離,一個容器可以通過影響宿主機內(nèi)核的穩(wěn)定性來影響其他容器。
一旦容器執(zhí)行了任務(wù),它就會關(guān)閉并刪除其中的所有數(shù)據(jù)。如果希望數(shù)據(jù)保留下來,則必須使用"數(shù)據(jù)卷"進行保存,這需要在主機上進行手動配置。
容器還是虛擬機
上面我們列出了容器和虛擬機各自的優(yōu)勢和劣勢,我們在因為優(yōu)勢選擇了其一后默認就要其忍受劣勢所帶來的副作用,凡事都有兩面性沒有東西可以只有優(yōu)點沒缺點的。就容器和虛擬機來說,因為其完整的隔離和安全性虛擬機通常用于要求苛刻的應用程序,網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)以及能消耗VM大部分資源的應用程序。而容器通常用于Web應用,微服務(wù)。
聲明:免責聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認相關(guān)法律責任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請發(fā)
送郵件至:operations@xinnet.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時
需注明出處:新網(wǎng)idc知識百科