新聞中心
docker容器與虛擬機(jī)有什么區(qū)別?
很高興為您解答。

靜樂(lè)網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),靜樂(lè)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為靜樂(lè)成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的靜樂(lè)做網(wǎng)站的公司定做!
Docker悄無(wú)聲息的來(lái)到我們身邊,正在改變我們的開發(fā)、測(cè)試、部署應(yīng)用的方式,那么,到底Docker和虛擬機(jī)VM有什么區(qū)別,我們通過(guò)一個(gè)圖,再配上簡(jiǎn)明扼要的文字就很容易理解兩者之間的區(qū)別。
首先要明確:Docker是一個(gè)開源的應(yīng)用容器引擎,而VM是一個(gè)完整的操作系統(tǒng)。
1、使用VM運(yùn)行多個(gè)相互隔離的應(yīng)用
解釋:
可以看到,APP #1、APP #2、APP #3如果要獨(dú)立運(yùn)行,相互隔離,則需要安裝三個(gè)操作系統(tǒng)。如果一個(gè)虛擬操作系統(tǒng)按1G算,總共需要占3G的存儲(chǔ)空間,更槽糕的是,光運(yùn)行這三個(gè)操作系統(tǒng)就要耗費(fèi)很大的內(nèi)存和CPU。
2、使用Docker運(yùn)行多個(gè)相互隔離的應(yīng)用
DOCKER DAEMON:Docker守護(hù)進(jìn)程,負(fù)責(zé)管理Docker容器。
從計(jì)算機(jī)軟件層級(jí)來(lái)看,docker和虛擬機(jī)的區(qū)別在于虛擬的軟件層級(jí)不一樣。虛擬機(jī)基于同一個(gè)硬件,模擬出不同的操作系統(tǒng);而docker基于同一個(gè)操作系統(tǒng),模擬出不同的運(yùn)行時(shí)環(huán)境。我們依次來(lái)看:
1. 先看看計(jì)算機(jī)的軟件層次,從下到上依次為:操作系統(tǒng)內(nèi)核、文件系統(tǒng)(運(yùn)行時(shí)環(huán)境)、上層APP。
2. 虛擬機(jī)運(yùn)行在同一個(gè)硬件上,可以虛擬出不同的操作系統(tǒng)。比如vmware可以在一臺(tái)pc上既模擬出一個(gè)windows系統(tǒng),同時(shí)也可以模擬出一臺(tái)linux系統(tǒng)。借助虛擬機(jī),兩個(gè)不同的操作系統(tǒng)可以同時(shí)運(yùn)行在同一個(gè)硬件之上。
3. 而docker則運(yùn)行在同一個(gè)操作系統(tǒng)內(nèi)核上,虛擬出不同的文件系統(tǒng)或者也可以叫做運(yùn)行時(shí)環(huán)境。不同的運(yùn)行時(shí)環(huán)境,其對(duì)應(yīng)的文件系統(tǒng)也是不同的。比如java的運(yùn)行時(shí)環(huán)境就要求文件系統(tǒng)里存在jdk,而golang的運(yùn)行時(shí)環(huán)境則需要有g(shù)o相關(guān)的底層庫(kù)。在docker上既可以虛擬出一個(gè)java的運(yùn)行時(shí)環(huán)境,也可以虛擬出go的運(yùn)行時(shí)環(huán)境。甚至,基于docker,你既可以虛擬出一個(gè)java-1.6的運(yùn)行時(shí)候環(huán)境,也可以虛擬出一個(gè)java-1.8的運(yùn)行時(shí)環(huán)境,而這兩個(gè)運(yùn)行時(shí)環(huán)境可以同時(shí)運(yùn)行在同一個(gè)操作系統(tǒng)之上。
以上就是虛擬機(jī)和docker的區(qū)別,更多容器云平臺(tái)原創(chuàng)內(nèi)容可關(guān)注我!
最近剛好看了一部分docker的東西
先上圖,vm與docker框架,直觀上來(lái)講vm多了一層guest OS,同時(shí)Hypervisor會(huì)對(duì)硬件資源進(jìn)行虛擬化,docker直接使用硬件資源,所以資源利用率相對(duì)docker低也是比較容易理解的
其次,openstack能夠以10臺(tái)/min的速度創(chuàng)建虛擬機(jī),在docker面前就弱爆了,因?yàn)閐ocker是利用宿主機(jī)的系統(tǒng)內(nèi)核,所以可以做到在幾秒鐘之內(nèi)創(chuàng)建大量容器,它們的啟動(dòng)速度是在數(shù)量級(jí)上的差距。
最后找了一個(gè)IBM測(cè)試案例,關(guān)于計(jì)算能力的,對(duì)于kvm為什么會(huì)有這么大的性能損失,一方面是因?yàn)樘摂M機(jī)增加了一層虛擬硬件層,運(yùn)行在虛擬機(jī)上的應(yīng)用程序在進(jìn)行數(shù)值計(jì)算時(shí)是運(yùn)行在Hypervisor虛擬的CPU上的;另外一方面是由于計(jì)算程序本身的特性導(dǎo)致的差異。虛擬機(jī)虛擬的cpu架構(gòu)不同于實(shí)際cpu架構(gòu),數(shù)值計(jì)算程序一般針對(duì)特定的cpu架構(gòu)有一定的優(yōu)化措施,虛擬化使這些措施作廢,甚至起到反效果。比如對(duì)于本次實(shí)驗(yàn)的平臺(tái),實(shí)際的CPU架構(gòu)是2塊物理CPU,每塊CPU擁有16個(gè)核,共32個(gè)核,采用的是NUMA架構(gòu);而虛擬機(jī)則將CPU虛擬化成一塊擁有32個(gè)核的CPU。這就導(dǎo)致了計(jì)算程序在進(jìn)行計(jì)算時(shí)無(wú)法根據(jù)實(shí)際的CPU架構(gòu)進(jìn)行優(yōu)化,大大減低了計(jì)算效率。
docker是虛擬化軟件運(yùn)行環(huán)境。
虛擬機(jī)是虛擬化硬件。
層次不同。
虛擬機(jī)更消耗資源。但帶來(lái)的是一個(gè)完整的可以不同于宿主機(jī)的操作系統(tǒng)。因?yàn)楹退拗鳈C(jī)操作系統(tǒng)不共享任何東西(包括硬件,內(nèi)核,動(dòng)態(tài)庫(kù),環(huán)境變量等),它的隔離性更好。
docker更輕量級(jí),共享使用宿主機(jī)的硬件和內(nèi)核,資源占用更少。它在宿主機(jī)內(nèi)核基礎(chǔ)上虛擬化了一個(gè)不同于宿主機(jī)的軟件運(yùn)行環(huán)境,比如動(dòng)態(tài)庫(kù),環(huán)境變量等??梢哉f(shuō),docker和宿主機(jī)之間除了內(nèi)核共享,其它都可以不同。
虛擬機(jī)主要是什么原理?
要回答這個(gè)問(wèn)題,首先看為什么一個(gè)OS無(wú)法直接與另外的OS共存。答案很簡(jiǎn)單,OS作為硬件上第一層軟件,認(rèn)為自己擁有全部的硬件的訪問(wèn)和控制權(quán),且自己是唯一的控制者。在這種情況下,如果兩個(gè)OS共存,必然產(chǎn)生問(wèn)題。
OS主要負(fù)責(zé)管理的是CPU和內(nèi)存,以及眾多的IO設(shè)備。于是我們可以分別討論。hypervisor是實(shí)現(xiàn)虛擬化的關(guān)鍵,它會(huì)以一個(gè)內(nèi)核態(tài)的驅(qū)動(dòng)存在。
CPU的虛擬化:
背景知識(shí):x86 CPU有一項(xiàng)權(quán)限機(jī)制,把CPU的狀態(tài)置于RING 0到RING 3分別使CPU具有最高的權(quán)限到最低的權(quán)限。以Linux為例,內(nèi)核運(yùn)行于RING 0上,而其余全部用戶進(jìn)程運(yùn)行于RING 3上(Xen比較奇葩,Linux在Xen下面會(huì)運(yùn)行于RING 1)。在用戶權(quán)限下,所有的IO設(shè)備是不可操作的,另外,有些控制寄存寄是無(wú)法訪問(wèn)的,一些privilege的指令是不能運(yùn)行的。因此一個(gè)用戶進(jìn)程要想讀寫文件,進(jìn)行一些操作,就要依賴于內(nèi)核。系統(tǒng)調(diào)用能夠使CPU運(yùn)行于RING 0,并執(zhí)行內(nèi)核代碼(具體方法見一些操作系統(tǒng)教程)。
背景說(shuō)完。一個(gè)CPU的全部狀態(tài)其實(shí)就是所有寄存器的值,只要保證任何操作之后寄存寄的值在OS看來(lái)是正確的,guest OS就可以正常執(zhí)行。hypervisor會(huì)為每個(gè)虛擬的CPU創(chuàng)建一個(gè)數(shù)據(jù)結(jié)構(gòu),模擬CPU的全部寄存器的值,在適當(dāng)?shù)臅r(shí)候跟蹤并修改這些值。
那么考慮虛擬化一個(gè)CPU,在虛擬化的guest OS里面,CPU無(wú)論如何也不可能運(yùn)行于RING 0,因?yàn)檫@樣的話,host OS必然會(huì)crash掉。因此,當(dāng)一個(gè)guest OS想要進(jìn)入到RING 0執(zhí)行內(nèi)核代碼時(shí),hypervisor會(huì)向guest OS說(shuō)謊,并告訴它,你已經(jīng)在RING 0上了,而實(shí)際上,所有的指令還是在RING 3上。當(dāng)guest OS訪問(wèn)到任何privilege的東西時(shí),hypervisor會(huì)接到fault,此時(shí)hypervisor會(huì)判斷這個(gè)指令是什么,并修改相應(yīng)的虛擬寄存器的狀態(tài),然后返回。這樣guest OS就可以正常的運(yùn)行。需要指出的是,在大多數(shù)的指令下代碼是直接跑在硬件上的,而不需要軟件介入。只有在一些權(quán)限高的請(qǐng)求下,軟件會(huì)介入,并維護(hù)虛擬的CPU狀態(tài)。
虛擬機(jī)是一種軟件程序,它可以在計(jì)算機(jī)上模擬另一個(gè)計(jì)算機(jī)系統(tǒng)的行為。它的原理是通過(guò)在主機(jī)操作系統(tǒng)上運(yùn)行虛擬機(jī)軟件,該軟件可以模擬出一個(gè)完整的計(jì)算機(jī)系統(tǒng),包括處理器、內(nèi)存、硬盤、網(wǎng)絡(luò)接口等組件。虛擬機(jī)可以運(yùn)行不同的操作系統(tǒng)和應(yīng)用程序,使得用戶可以在同一臺(tái)計(jì)算機(jī)上同時(shí)運(yùn)行多個(gè)不同的操作系統(tǒng)和應(yīng)用程序,從而提高計(jì)算機(jī)資源的利用率和靈活性
我寫了一個(gè)小項(xiàng)目桃花源(英文名為 peach),該項(xiàng)目是一個(gè)迷你虛擬機(jī),用于學(xué)習(xí) Intel 硬件虛擬化技術(shù)。學(xué)習(xí)該項(xiàng)目可使讀者對(duì) CPU 虛擬化、內(nèi)存虛擬化技術(shù)有個(gè)感性、直觀的認(rèn)識(shí),為學(xué)習(xí) KVM 打下堅(jiān)實(shí)的基礎(chǔ)。peach 實(shí)現(xiàn)了如下功能:
- 使用Intel VT-x技術(shù)實(shí)現(xiàn)CPU虛擬化
- 使用EPT技術(shù)實(shí)現(xiàn)內(nèi)存虛擬化
- 支持虛擬x86實(shí)模式運(yùn)行環(huán)境
- 支持虛擬CPUID指令
- 支持虛擬HLT指令,Guest利用HLT指令關(guān)機(jī)
代碼倉(cāng)庫(kù)如下:
https://gitee.com/pandengyang/peach.git
https://github.com/pandengyang/peach.git
題主問(wèn)的虛擬機(jī)概念很泛,不過(guò)一般說(shuō)的是vnware那種模擬電腦硬件的軟件。
首先,先來(lái)講講虛擬機(jī)的大致原理,即CPU的虛擬化技術(shù);舉個(gè)例子,比如一臺(tái)電腦,在沒有裝win系統(tǒng)的時(shí)候,本質(zhì)上就是由一系列硬件組成的機(jī)器,我們稱其為裸機(jī)。
而vnware虛擬機(jī)就是在原有的電腦系統(tǒng)上開辟出一臺(tái)新的裸機(jī),用戶可以在新的裸機(jī)上裝新的系統(tǒng),可以是win,也可以是linux等其他系統(tǒng),相當(dāng)于內(nèi)嵌了一臺(tái)新的電腦。
其次,vnware虛擬機(jī)本質(zhì)上是軟件,模擬電腦硬件的軟件,所以一旦開始運(yùn)行,主機(jī)是可以檢測(cè)到的(但是虛擬機(jī)檢測(cè)不到主機(jī)),而且只要能讓主機(jī)和虛擬機(jī)ping通的話,還可以保持兩者的網(wǎng)絡(luò)聯(lián)系,當(dāng)然,這個(gè)需要看網(wǎng)卡質(zhì)量。
在實(shí)際使用上就是主機(jī)界面開一個(gè)終端窗口來(lái)操作虛擬機(jī)。此外,磁盤空間足夠大的話可以裝多臺(tái)虛擬機(jī),相當(dāng)于有多臺(tái)電腦的體驗(yàn),甚至每臺(tái)虛擬機(jī)的內(nèi)存和磁盤容量都可以自己定義。而且一旦將虛擬機(jī)文件備份好,未來(lái)虛擬機(jī)發(fā)生損壞,用此文件就可以輕易覆蓋恢復(fù)。
最后,之所以越來(lái)越多開發(fā)者青睞于虛擬機(jī),是因?yàn)樘摂M機(jī)軟件本身就包含了各種硬件驅(qū)動(dòng),也不用擔(dān)心接口不夠,內(nèi)存不足等問(wèn)題,內(nèi)存硬盤網(wǎng)卡USB統(tǒng)統(tǒng)在軟件中可設(shè)置,完全不必要去購(gòu)置多臺(tái)電腦和額外內(nèi)存磁盤就可以玩轉(zhuǎn)各種操作系統(tǒng)和測(cè)試軟件,甚至還可以自主搭載一些小型的服務(wù)器。
如果到了這里還是不懂的話,那就這么理解吧:
火影忍者里的長(zhǎng)門(主機(jī)),通過(guò)輪回眼的六道之術(shù)分化出(虛擬化)6個(gè)跟自己同樣有輪回眼的佩恩們(6臺(tái)虛擬機(jī)),佩恩們雖然看起來(lái)都具有本體(主機(jī))一模一樣的能力,但是他們的查克拉(計(jì)算機(jī)資源)實(shí)際上是由長(zhǎng)門(主機(jī))分配出去的。
到此,以上就是小編對(duì)于日本vpswindow的問(wèn)題就介紹到這了,希望這2點(diǎn)解答對(duì)大家有用。
網(wǎng)頁(yè)題目:虛擬機(jī)主要是什么原理?
轉(zhuǎn)載來(lái)于:http://m.5511xx.com/article/cdoojoe.html


咨詢
建站咨詢
