容器技術(shù)和虛擬機(jī)將會(huì)處于一個(gè)長(zhǎng)期共存的狀態(tài)。容器技術(shù)的技術(shù)出發(fā)點(diǎn)雖然更加輕量級(jí),部署運(yùn)行快速,但其共用了底層的kernel,因此與虛擬機(jī)方式在資源隔離性方面有先天的劣勢(shì),將暫時(shí)無(wú)法取代虛擬機(jī)模式。雖然每一個(gè)虛擬機(jī)都是一個(gè)完整的操作系統(tǒng),卻因?yàn)樾枰o其分配物理資源,當(dāng)虛擬機(jī)數(shù)量增多時(shí),操作系統(tǒng)本身消耗的資源勢(shì)必增多。
所以容器可以和虛擬機(jī)結(jié)合在一起使用,而且這也是目前主流的做法:
虛擬化技術(shù)出現(xiàn)以后,虛擬化技術(shù)會(huì)在本地操作系統(tǒng)之上加多一層 Hypervisor層,Hypervisor是一種運(yùn)行在物理服務(wù)器和操作系統(tǒng)之間的中間軟件層,可以虛擬化硬件資源,例如cpu、硬盤(pán)、內(nèi)存資源等。然后我們可以基于通過(guò)虛擬化出來(lái)的資源之上安裝操作系統(tǒng),這也就是所謂的虛擬機(jī)。
通過(guò)Hypervisor層,我們可以創(chuàng)建不同的虛擬機(jī),并且可以限定每個(gè)虛擬機(jī)的物理資源,并且每個(gè)虛擬機(jī)都是分離、獨(dú)立的。例如A虛擬機(jī)給它使用2個(gè)cpu、8g內(nèi)存、100g磁盤(pán),B虛擬機(jī)給它使用4個(gè)cpu、16g內(nèi)存、300g磁盤(pán)。。。等等,這樣就可以實(shí)現(xiàn)物理資源利用率的最大化。
如此一來(lái):
一臺(tái)物理機(jī)就可以部署多個(gè)應(yīng)用,每個(gè)應(yīng)用都可以獨(dú)立運(yùn)行在一個(gè)虛擬機(jī)里。
虛擬化技術(shù)
有了上面的理念,就可以重新認(rèn)識(shí)我們熟知的虛擬化技術(shù):
虛擬機(jī):存在于硬件層和操作系統(tǒng)層間的虛擬化技術(shù)。
虛擬機(jī)通過(guò)“偽造”一個(gè)硬件抽象接口,將一個(gè)操作系統(tǒng)以及操作系統(tǒng)層以上的層嫁接到硬件上,實(shí)現(xiàn)和真實(shí)物理機(jī)幾乎一樣的功能。
虛擬化技術(shù)的優(yōu)點(diǎn):
資源池——一個(gè)物理機(jī)的資源分配到了不同的虛擬機(jī)里
很容易擴(kuò)展——增加物理機(jī)或者虛擬機(jī)即可,因?yàn)樘摂M機(jī)是可以復(fù)制的
很容易云化——亞馬孫AWS,阿里云,谷歌云等
即然虛擬化技術(shù)已經(jīng)很強(qiáng)大了,為什么還需要容器技術(shù)呢?這就涉及到虛擬化技術(shù)所帶來(lái)的局限性了:
每一個(gè)虛擬機(jī)都是一個(gè)完整的操作系統(tǒng),所以需要給其分配物理資源,當(dāng)虛擬機(jī)數(shù)量增多時(shí),操作系統(tǒng)本身消耗的資源勢(shì)必增多
容器:存在于操作系統(tǒng)層和函數(shù)庫(kù)層之間的虛擬化技術(shù)。
容器通過(guò)“偽造”操作系統(tǒng)的接口,將API抽象層,函數(shù)庫(kù)層以上的功能置于操作系統(tǒng)上,以Docker為例,就是基于Linux操作系統(tǒng)的Namespace和CGroup功能實(shí)現(xiàn)的隔離容器,模擬操作系統(tǒng)的功能,因?yàn)樗忍摂M機(jī)高了一層,也就需要少一層?xùn)|西,所以容器占用資源少。
容器可以幫我們把開(kāi)發(fā)環(huán)境及應(yīng)用整個(gè)打包帶走,打包好的容器可以在任何的環(huán)境下運(yùn)行,這樣就可以解決開(kāi)發(fā)與運(yùn)維環(huán)境不一致的問(wèn)題了,所以:
容器解決了開(kāi)發(fā)和運(yùn)維之間的矛盾
在開(kāi)發(fā)和運(yùn)維之間搭建了一個(gè)橋梁,是實(shí)現(xiàn)devops的最佳解決方案
以上只是描述是容器解決了什么問(wèn)題,但是還沒(méi)有說(shuō)明什么是容器,不過(guò)其實(shí)簡(jiǎn)單幾句話(huà)就可以說(shuō)明容器了:
對(duì)軟件和其依賴(lài)環(huán)境的標(biāo)準(zhǔn)化打包
應(yīng)用之間相互隔離
共享一個(gè)OS Kernel
可以運(yùn)行在很多主流操作系統(tǒng)上
JVM:存在于函數(shù)庫(kù)層和應(yīng)用程序之間的虛擬化技術(shù)。
Java虛擬機(jī)具有跨平臺(tái)特性,所謂跨平臺(tái)特性實(shí)際上就是虛擬化的功勞,我們Java語(yǔ)言是調(diào)用操作系統(tǒng)函數(shù)庫(kù)的,然而不同操作系統(tǒng)的函數(shù)庫(kù)互不相同,JVM就是建立一個(gè)虛擬化層,對(duì)下通過(guò)不同的版本適應(yīng)不同的操作系統(tǒng),對(duì)上提供統(tǒng)一的運(yùn)行環(huán)境交給程序和開(kāi)發(fā)者。通過(guò)虛擬化實(shí)現(xiàn)了如今蔚為壯觀(guān)的Java生態(tài)圈以及建立在JVM基礎(chǔ)上的其他語(yǔ)言,如Scala,Clojure,Kotlin等。
幾乎所有的計(jì)算機(jī)遵守著相同的層級(jí)結(jié)構(gòu):硬件層>>硬件抽象層>>操作系統(tǒng)層>>API抽象層>>函數(shù)庫(kù)層>>應(yīng)用程序?qū)?/p>
由此,我們可知虛擬化技術(shù)中,不管虛擬機(jī),還是容器,還是JVM的跨平臺(tái),只是計(jì)算機(jī)不同層級(jí)結(jié)構(gòu)間的虛擬化運(yùn)用。在未來(lái)很長(zhǎng)的一段時(shí)間里,它們會(huì)根據(jù)實(shí)際的應(yīng)用場(chǎng)景,互相***,互相支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。