虛擬化
虛擬化(virtualization)技術(shù)是一個(gè)通用的概念,在不同領(lǐng)域有不同的理解。在計(jì)算領(lǐng)域语婴,一般指的是計(jì)算虛擬化(computing virtualization),或通常說的服務(wù)器虛擬化。
維基百科上的定義如下:“在計(jì)算機(jī)技術(shù)中首有,虛擬化是一種資源管理技術(shù),是將計(jì)算機(jī)的各種實(shí)體資源枢劝,如服務(wù)器井联、網(wǎng)絡(luò)、內(nèi)存及存儲(chǔ)等您旁,予以抽象烙常、轉(zhuǎn)換后呈現(xiàn)出來,打破實(shí)體結(jié)構(gòu)間的不可切割的障礙鹤盒,使用戶可以用比原本的組態(tài)更好的方式來應(yīng)用這些資源蚕脏。”
可見侦锯,虛擬化的核心是對資源的抽象驼鞭,目標(biāo)往往是為了在同一個(gè)主機(jī)上同時(shí)運(yùn)行多個(gè)系統(tǒng)或應(yīng)用,從而提高系統(tǒng)資源的利用率尺碰,并且?guī)斫档统杀菊踝亍⒎奖愎芾砗腿蒎e(cuò)容災(zāi)等好處译隘。
從大類上分,虛擬化技術(shù)可分為基于硬件的虛擬化和基于軟件的虛擬化穴张。
基于軟件的虛擬化從對象所在的層次细燎,又可以分為應(yīng)用虛擬化和平臺(tái)虛擬化(通常說的虛擬機(jī)技術(shù)即屬于這個(gè)范疇)。前者一般指的是一些模擬設(shè)備或諸如Wine這樣的軟件皂甘,后者又可以細(xì)分為幾個(gè)子類:
完全虛擬化:虛擬機(jī)模擬完整的底層硬件環(huán)境和特權(quán)指令的執(zhí)行過程玻驻,客戶操作系統(tǒng)無須進(jìn)行修改。例如IBM p和z系列的虛擬化偿枕、VMware Workstation璧瞬、VirtualBox、QEMU等渐夸;
硬件輔助虛擬化:利用硬件(主要是CPU)輔助支持(目前x86體系結(jié)構(gòu)上可用的硬件輔助虛擬化技術(shù)包括Intel-VT和AMD-V)處理敏感指令來實(shí)現(xiàn)完全虛擬化的功能嗤锉,客戶操作系統(tǒng)無須修改,例如VMware Workstation, Xen, KVM墓塌;
部分虛擬化:只針對部分硬件資源進(jìn)行虛擬化瘟忱,客戶操作系統(tǒng)需要進(jìn)行修改。現(xiàn)在有些虛擬化技術(shù)的早期版本僅支持部分虛擬化苫幢;
超虛擬化(paravirtualization):部分硬件接口以軟件的形式提供給客戶機(jī)操作系統(tǒng)访诱,客戶操作系統(tǒng)需要進(jìn)行修改,例如早期的Xen韩肝;
操作系統(tǒng)級(jí)虛擬化:內(nèi)核通過創(chuàng)建多個(gè)虛擬的操作系統(tǒng)實(shí)例(內(nèi)核和庫)來隔離不同的進(jìn)程触菜。容器相關(guān)技術(shù)即在這個(gè)范疇。
可見哀峻,Docker以及其他容器技術(shù)都屬于操作系統(tǒng)虛擬化這個(gè)范疇涡相,操作系統(tǒng)虛擬化最大的特點(diǎn)就是不需要額外的supervisor支持。Docker虛擬化方式之所以有眾多優(yōu)勢剩蟀,跟操作系統(tǒng)虛擬化技術(shù)自身的設(shè)計(jì)和實(shí)現(xiàn)是分不開的催蝗。
傳統(tǒng)方式是在硬件層面實(shí)現(xiàn)虛擬化,需要有額外的虛擬機(jī)管理應(yīng)用和虛擬機(jī)操作系統(tǒng)層喻旷。Docker容器是在操作系統(tǒng)層面上實(shí)現(xiàn)虛擬化生逸,直接復(fù)用本地主機(jī)的操作系統(tǒng),因此更加輕量級(jí)且预。
Docker
Docker的構(gòu)想是要實(shí)現(xiàn)“Build, Ship and Run Any App, Anywhere”槽袄,即通過對應(yīng)用的封裝(Packaging)、分發(fā)(Distribution)锋谐、部署(Deployment)遍尺、運(yùn)行(Runtime)生命周期進(jìn)行管理,達(dá)到應(yīng)用組件級(jí)別的“一次封裝涮拗,到處運(yùn)行”乾戏。這里的應(yīng)用組件迂苛,既可以是一個(gè)Web應(yīng)用、一個(gè)編譯環(huán)境鼓择,也可以是一套數(shù)據(jù)庫平臺(tái)服務(wù)三幻,甚至是一個(gè)操作系統(tǒng)或集群。
基于Linux平臺(tái)上的多項(xiàng)開源技術(shù)呐能,Docker提供了高效念搬、敏捷和輕量級(jí)的容器方案,并支持部署到本地環(huán)境和多種主流云平臺(tái)摆出±驶玻可以說,Docker首次為應(yīng)用的開發(fā)偎漫、運(yùn)行和部署提供了“一站式”的實(shí)用解決方案爷恳。
IBM DeveloperWorks網(wǎng)站關(guān)于容器技術(shù)的描述十分準(zhǔn)確:“容器有效地將由單個(gè)操作系統(tǒng)管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求象踊。與虛擬化相比温亲,這樣既不需要指令級(jí)模擬,也不需要即時(shí)編譯杯矩。容器可以在核心CPU本地運(yùn)行指令铸豁,而不需要任何專門的解釋機(jī)制。此外菊碟,也避免了準(zhǔn)虛擬化(para-virtualization)和系統(tǒng)調(diào)用替換中的復(fù)雜性≡诖蹋”
簡單地講逆害,可以將Docker容器理解為一種輕量級(jí)的沙盒(sandbox)。每個(gè)容器內(nèi)運(yùn)行著一個(gè)應(yīng)用蚣驼,不同的容器相互隔離魄幕,容器之間也可以通過網(wǎng)絡(luò)互相通信。容器的創(chuàng)建和停止十分快速颖杏,幾乎跟創(chuàng)建和終止原生應(yīng)用一致纯陨;另外,容器自身對系統(tǒng)資源的額外需求也十分有限留储,遠(yuǎn)遠(yuǎn)低于傳統(tǒng)虛擬機(jī)翼抠。很多時(shí)候,甚至直接把容器當(dāng)作應(yīng)用本身也沒有任何問題获讳。
那Docker和虛擬機(jī)有哪些區(qū)別呢阴颖?
Docker與虛擬機(jī)
作為一種輕量級(jí)的虛擬化方式,Docker在運(yùn)行應(yīng)用上跟傳統(tǒng)的虛擬機(jī)方式相比具有如下顯著優(yōu)勢:
Docker容器很快丐膝,啟動(dòng)和停止可以在秒級(jí)實(shí)現(xiàn)量愧,這相比傳統(tǒng)的虛擬機(jī)方式(數(shù)分鐘)要快得多钾菊;
Docker容器對系統(tǒng)資源需求很少,一臺(tái)主機(jī)上可以同時(shí)運(yùn)行數(shù)千個(gè)Docker容器(在IBM服務(wù)器上已經(jīng)實(shí)現(xiàn)了同時(shí)運(yùn)行10K量級(jí)的容器實(shí)例)偎肃;
Docker通過類似Git設(shè)計(jì)理念的操作來方便用戶獲取煞烫、分發(fā)和更新應(yīng)用鏡像,存儲(chǔ)復(fù)用累颂,增量更新滞详;
Docker通過Dockerfile支持靈活的自動(dòng)化創(chuàng)建和部署機(jī)制,以提高工作效率喘落,并標(biāo)準(zhǔn)化流程茵宪。
Docker容器除了運(yùn)行其中的應(yīng)用外,基本不消耗額外的系統(tǒng)資源瘦棋,在保證應(yīng)用性能的同時(shí)稀火,盡量減小系統(tǒng)開銷。傳統(tǒng)虛擬機(jī)方式運(yùn)行N個(gè)不同的應(yīng)用就要啟用N個(gè)虛擬機(jī)(每個(gè)虛擬機(jī)需要單獨(dú)分配獨(dú)占的內(nèi)存赌朋、磁盤等資源)凰狞,而Docker只需要啟動(dòng)N個(gè)隔離得“很薄的”容器,并將應(yīng)用放進(jìn)容器內(nèi)即可沛慢。應(yīng)用獲得的是接近原生的運(yùn)行性能赡若。
使用Docker容器技術(shù)與傳統(tǒng)虛擬機(jī)技術(shù)的各種特性,可見容器技術(shù)在很多應(yīng)用場景下都具有巨大的優(yōu)勢(如下圖所示):