docker和虛擬化技術(shù)的區(qū)別
作為一種部署應(yīng)用程序的全新方式,容器技術(shù)在短時(shí)間內(nèi)獲得了廣泛關(guān)注,但是這種技術(shù)同樣存在某些限制,并且和虛擬機(jī)存在本質(zhì)上的不同。
虛擬化技術(shù)已經(jīng)改變了現(xiàn)代計(jì)算方式,它能夠提升系統(tǒng)資源使用效率、消除應(yīng)用程序和底層硬件之間的依賴關(guān)系,同時(shí)加強(qiáng)負(fù)載的可以移植性和安全性,但是hypervisor和虛擬機(jī)只是部署虛擬負(fù)載的方式之一。作為一種能夠替代傳統(tǒng)虛擬化技術(shù)的解決方案,容器虛擬化技術(shù)憑借其高效性和可靠性得到了快速發(fā)展,它能夠提供新的特性,并且?guī)椭鷶?shù)據(jù)中心專家解決新的顧慮。
容器和虛擬機(jī)之間的主要區(qū)別在于虛擬化層的位置和操作系統(tǒng)資源的使用方式。
Docker 擴(kuò)展了 Linux 容器(Linux Containers),或著說 LXC,通過一個(gè)高層次的 API 為進(jìn)程單獨(dú)提供了一個(gè)輕量級(jí)的虛擬環(huán)境。Docker 利用了 LXC, cgroups 和 Linux 自己的內(nèi)核。和傳統(tǒng)的虛擬機(jī)不同的是,一個(gè) Docker 容器并不包含一個(gè)單獨(dú)的操作系統(tǒng),而是基于已有的基礎(chǔ)設(shè)施中操作系統(tǒng)提供的功能來運(yùn)行的。
Docker類似虛擬機(jī)的概念,但是與虛擬化技術(shù)的不同點(diǎn)在于下面幾點(diǎn):
1.虛擬化技術(shù)依賴物理CPU和內(nèi)存,是硬件級(jí)別的;而docker構(gòu)建在操作系統(tǒng)上,利用操作系統(tǒng)的containerization技術(shù),所以docker甚至可以在虛擬機(jī)上運(yùn)行。
2.虛擬化系統(tǒng)一般都是指操作系統(tǒng)鏡像,比較復(fù)雜,稱為“系統(tǒng)”;而docker開源而且輕量,稱為“容器”,單個(gè)容器適合部署少量應(yīng)用,比如部署一個(gè)redis、一個(gè)memcached。
3.傳統(tǒng)的虛擬化技術(shù)使用快照來保存狀態(tài);而docker在保存狀態(tài)上不僅更為輕便和低成本,而且引入了類似源代碼管理機(jī)制,將容器的快照歷史版本一一記錄,切換成本很低。
4.傳統(tǒng)的虛擬化技術(shù)在構(gòu)建系統(tǒng)的時(shí)候較為復(fù)雜,需要大量的人力;而docker可以通過Dockfile來構(gòu)建整個(gè)容器,重啟和構(gòu)建速度很快。更重要的是Dockfile可以手動(dòng)編寫,這樣應(yīng)用程序開發(fā)人員可以通過發(fā)布Dockfile來指導(dǎo)系統(tǒng)環(huán)境和依賴,這樣對(duì)于持續(xù)交付十分有利。
5.Dockerfile可以基于已經(jīng)構(gòu)建好的容器鏡像,創(chuàng)建新容器。Dockerfile可以通過社區(qū)分享和下載,有利于該技術(shù)的推廣。
Docker 會(huì)像一個(gè)可移植的容器引擎那樣工作。它把應(yīng)用程序及所有程序的依賴環(huán)境打包到一個(gè)虛擬容器中,這個(gè)虛擬容器可以運(yùn)行在任何一種 Linux 服務(wù)器上。這大大地提高了程序運(yùn)行的靈活性和可移植性,無(wú)論需不需要許可、是在公共云還是私密云、是不是裸機(jī)環(huán)境等等。
Docker也是一個(gè)云計(jì)算平臺(tái),它利用Linux的LXC、AUFU、Go語(yǔ)言、cgroup實(shí)現(xiàn)了資源的獨(dú)立,可以很輕松的實(shí)現(xiàn)文件、資源、網(wǎng)絡(luò)等隔離,其最終的目標(biāo)是實(shí)現(xiàn)類似PaaS平臺(tái)的應(yīng)用隔離。
2、docker的組成
Docker 由下面這些組成:
2.1 Docker 服務(wù)器守護(hù)程序(server daemon),用于管理所有的容器。
2.2 Docker 命令行客戶端,用于控制服務(wù)器守護(hù)程序。
2.3 Docker 鏡像:查找和瀏覽 docker 容器鏡像。
3、docker特性
文件系統(tǒng)隔離:每個(gè)進(jìn)程容器運(yùn)行在完全獨(dú)立的根文件系統(tǒng)里。
資源隔離:可以使用cgroup為每個(gè)進(jìn)程容器分配不同的系統(tǒng)資源,例如CPU和內(nèi)存。
網(wǎng)絡(luò)隔離:每個(gè)進(jìn)程容器運(yùn)行在自己的網(wǎng)絡(luò)命名空間里,擁有自己的虛擬接口和IP地址。
寫時(shí)復(fù)制:采用寫時(shí)復(fù)制方式創(chuàng)建根文件系統(tǒng),這讓部署變得極其快捷,并且節(jié)省內(nèi)存和硬盤空間。
日志記錄:Docker將會(huì)收集和記錄每個(gè)進(jìn)程容器的標(biāo)準(zhǔn)流(stdout/stderr/stdin),用于實(shí)時(shí)檢索或批量檢索。
變更管理:容器文件系統(tǒng)的變更可以提交到新的映像中,并可重復(fù)使用以創(chuàng)建更多的容器。無(wú)需使用模板或手動(dòng)配置。
交互式Shell:Docker可以分配一個(gè)虛擬終端并關(guān)聯(lián)到任何容器的標(biāo)準(zhǔn)輸入上,例如運(yùn)行一個(gè)一次性 交互shell。
4、兩個(gè)基礎(chǔ)概念images與container
Container和Image 在Docker的世界里,Image是指一個(gè)只讀的層(Layer),這里的層是AUFS里的概念,最直觀的方式就是看一下docker官方給出的圖:
Docker使用了一種叫AUFS的文件系統(tǒng),這種文件系統(tǒng)可以讓你一層一層地疊加修改你的文件,最底下的文件系統(tǒng)是只讀的,如果需要修改文件,AUFS會(huì)增加一個(gè)可寫的層(Layer),這樣有很多好處,例如不同的Container可以共享底層的只讀文件系統(tǒng)(同一個(gè)Kernel),使得你可以跑N多個(gè)Container而不至于你的硬盤被擠爆了!這個(gè)只讀的層就是Image!而如你所看到的,一個(gè)可寫的層就是Container。
那Image和Container的區(qū)別是什么?很簡(jiǎn)單,他們的區(qū)別僅僅是一個(gè)是只讀的層,一個(gè)是可寫的層,你可以使用docker commit 命令,將你的Container變成一個(gè)Image,也就是提交你所運(yùn)行的Container的修改內(nèi)容,變成一個(gè)新的只讀的Image,這非常類似于git commit命令。
虛擬機(jī)依賴于hypervisor,其通常被安裝在“裸金屬”系統(tǒng)硬件之上,這導(dǎo)致hypervisor在某些方面被認(rèn)為是一種操作系統(tǒng)。一旦 hypervisor安裝完成, 就可以從系統(tǒng)可用計(jì)算資源當(dāng)中分配虛擬機(jī)實(shí)例了,每臺(tái)虛擬機(jī)都能夠獲得唯一的操作系統(tǒng)和負(fù)載(應(yīng)用程序)。
通常,第一臺(tái)虛擬機(jī)都將會(huì)被用來運(yùn)行系統(tǒng)管理程序,比如Microsoft System Center。而之后的虛擬機(jī)可能包含其他企業(yè)負(fù)載,比如數(shù)據(jù)庫(kù)、ERP、CRM、郵件服務(wù)器、媒體服務(wù)器、web服務(wù)器或者其他業(yè)務(wù)應(yīng)用。虛擬機(jī)之間是完全隔離的——沒有任何一臺(tái)虛擬機(jī)知道(或者依賴)相同系統(tǒng)當(dāng)中的另外一臺(tái)虛擬機(jī)的存在——惡意軟件、應(yīng)用程序崩潰和其他問題只能影響一臺(tái)虛擬機(jī)。虛擬機(jī)從一個(gè)虛擬系統(tǒng)被移動(dòng)到另外一個(gè)當(dāng)中,而不用考慮系統(tǒng)硬件和操作系統(tǒng)等因素。
而容器環(huán)境的工作方式則有所不同。對(duì)于容器環(huán)境來說,需要首先安裝主機(jī)操作系統(tǒng),之后將容器層(比如LXC或libcontainer)安裝在主機(jī)操作系統(tǒng)(通常是Linux變種)之上。在安裝完容器層之后,就可以從系統(tǒng)可用計(jì)算資源當(dāng)中分配容器實(shí)例了,并且企業(yè)應(yīng)用可以被部署在容器當(dāng)中。但是,每個(gè)容器化應(yīng)用都會(huì)共享相同的操作系統(tǒng)(單個(gè)主機(jī)操作系統(tǒng))。
相比于虛擬機(jī),容器擁有更高的資源使用效率,因?yàn)樗⒉恍枰獮槊總€(gè)應(yīng)用分配單獨(dú)的操作系統(tǒng)——實(shí)例規(guī)模更小、創(chuàng)建和遷移速度也更快。這意味相比于虛擬機(jī),單個(gè)操作系統(tǒng)能夠承載更多的容器。云提供商十分熱衷于容器技術(shù),因?yàn)樵谙嗤挠布O(shè)備當(dāng)中,可以部署數(shù)量更多的容器實(shí)例。然而,單個(gè)操作系統(tǒng)有可能引起影響所有相關(guān)實(shí)例的單點(diǎn)事故。比如,惡意軟件或者主機(jī)操作系統(tǒng)崩潰可能禁用或者影響所有容器。此外,容器易于遷移,但是只能被遷移到具有兼容操作系統(tǒng)內(nèi)核的其他服務(wù)器當(dāng)中,這樣會(huì)無(wú)形中減少遷移選擇。
從實(shí)際應(yīng)用的角度來說,容器和虛擬機(jī)可以在同一個(gè)數(shù)據(jù)中心當(dāng)中共存,因此這兩種技術(shù)被認(rèn)為是互補(bǔ)的——為現(xiàn)代應(yīng)用程序架構(gòu)師和數(shù)據(jù)中心管理員添加了可用工具集,通過不同的方式為應(yīng)用負(fù)載提供支持。
聲明:免責(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í)百科