Docker與虛擬機(jī)區(qū)別詳解(圖文全面總結(jié))
Docker
Docker 是一個(gè)開源的容器化平臺(tái),能夠?qū)?yīng)用程序、及其依賴環(huán)境打包成輕量級(jí)、可移植的容器。
為什么Docker如此之風(fēng)靡?原因很簡(jiǎn)單:因?yàn)镈ocker能很好的解決在不同環(huán)境中運(yùn)行一致性,并且占用的資源還少,而且還快。
所以說(shuō),好的東西,就應(yīng)該得到更多人的喜歡,因?yàn)镈ocker確確實(shí)實(shí)解決了我們平常開發(fā)和運(yùn)維的問(wèn)題。
比如:在如今的微服務(wù)架構(gòu)中,我們可以將應(yīng)用程序拆分成多個(gè)獨(dú)立的服務(wù),每個(gè)服務(wù)運(yùn)行在獨(dú)立的容器中。
這樣,不僅方便開發(fā)、測(cè)試、和部署,而且Docker 容器可以在不同的操作系統(tǒng)和平臺(tái)上運(yùn)行,確保跨平臺(tái)的一致性。
圖片
多個(gè)容器可以在同一臺(tái)計(jì)算機(jī)上運(yùn)行,并與其他容器共享其OS內(nèi)核,每個(gè)容器在用戶空間中作為隔離的進(jìn)程運(yùn)行。
虛擬機(jī)
虛擬機(jī),全程是Virtual Machine,簡(jiǎn)稱 “虛擬機(jī)VM”。
虛擬機(jī),是一種利用軟件模擬的計(jì)算機(jī)系統(tǒng),它能夠在物理硬件的基礎(chǔ)上,運(yùn)行多個(gè)虛擬計(jì)算機(jī)。
如下圖所示:
圖片
虛擬機(jī),是基于物理機(jī)(宿主機(jī))上運(yùn)行的獨(dú)立計(jì)算環(huán)境,擁有獨(dú)立的操作系統(tǒng)、應(yīng)用程序、和資源。
比如:一臺(tái)服務(wù)器,可以模擬出多臺(tái)“虛擬機(jī)”。
這個(gè)時(shí)候,虛擬機(jī)運(yùn)行在一個(gè)物理主機(jī)上,它的硬件資源(如:CPU、內(nèi)存、磁盤...等),由宿主機(jī)提供并被虛擬化。
虛擬機(jī)的管理工具,常見的包括 :VMware、Hyper-V... 等,主要用于創(chuàng)建/和管理虛擬機(jī)。
雖然,看上去是多了幾臺(tái)“服務(wù)器”,但是多個(gè)虛擬機(jī)的操作系統(tǒng),是共享同一個(gè)硬件環(huán)境中并存運(yùn)行。
雖然虛擬機(jī)、和容器都是虛擬化技術(shù),但它們的運(yùn)行方式、和用途有所不同,下面我重點(diǎn)談?wù)剝烧叩膮^(qū)別@mikechen
Docker和虛擬機(jī)區(qū)別
圖片
虛擬機(jī)更重,Docker相對(duì)輕量級(jí)
這是Docker和虛擬機(jī)最大的區(qū)別,我把它放到第一位。
首先,虛擬機(jī)提供完整的操作系統(tǒng)、和硬件環(huán)境,適用于需要隔離的多操作系統(tǒng)環(huán)境。
虛擬機(jī)由于每個(gè)虛擬機(jī),都需要攜帶一個(gè)完整的操作系統(tǒng)(OS),這點(diǎn)非常的重要。
所以,采用虛擬機(jī)了,即使應(yīng)用程序本身很小,整體體積也會(huì)因?yàn)椴僮飨到y(tǒng)的存在而變得龐大。
所以,這使得虛擬機(jī)不僅占用大量的存儲(chǔ)空間,還在啟動(dòng)時(shí)需要加載整個(gè)操作系統(tǒng),導(dǎo)致其啟動(dòng)時(shí)間較長(zhǎng)、運(yùn)行時(shí)的資源占用較高。
這也是為什么?Docker虛擬化技術(shù)風(fēng)靡的最重要的原因。
Docker則通過(guò)共享宿主機(jī)操作系統(tǒng)的內(nèi)核,避免了為每個(gè)應(yīng)用程序分配一個(gè)獨(dú)立的操作系統(tǒng)。
這樣,每個(gè) Docker 容器只包含:應(yīng)用程序、及其依賴,減少了鏡像的體積,并且啟動(dòng)速度更快,運(yùn)行更加輕巧。
這也是 Docker 相比虛擬機(jī)最大的優(yōu)勢(shì)之一,尤其在微服務(wù)和容器化應(yīng)用場(chǎng)景下顯得非常有效。
虛擬機(jī)啟動(dòng)慢,Docker啟動(dòng)快
剛才我已經(jīng)談到了兩者最大的區(qū)別,就談到了虛擬機(jī)需要攜帶操作系統(tǒng)(OS)。
所以,虛擬機(jī)的啟動(dòng)時(shí)間較長(zhǎng),這就很正常了,因?yàn)椋禾摂M機(jī),需要啟動(dòng)完整的操作系統(tǒng)。
而Docker容器,不需要啟動(dòng)操作系統(tǒng),因此具有更快的響應(yīng)速度。
虛擬機(jī)占用資源多,Docker占用資源小
由于虛擬機(jī),需要運(yùn)行一個(gè)獨(dú)立的操作系統(tǒng),因此資源開銷較大。
比如:虛擬機(jī)需要占用較多的 CPU、內(nèi)存、磁盤空間,并且每個(gè)虛擬機(jī)都有固定的資源分配。
所以,一臺(tái)服務(wù)器一般也就不能虛擬很多“服務(wù)器”。
而Docker 容器,共享宿主機(jī)的操作系統(tǒng)內(nèi)核,不需要額外的操作系統(tǒng)開銷。
所以,占用資源更小,是“進(jìn)程”級(jí)別的,所以資源利用率更高。
虛擬機(jī)適用重量級(jí)隔離,容器輕量級(jí)隔離
當(dāng)然,說(shuō)了這么多,也不是說(shuō)虛擬機(jī)一無(wú)是處,關(guān)鍵是用對(duì)應(yīng)用場(chǎng)景。
比如:虛擬機(jī)就適用于需要強(qiáng)隔離的多操作系統(tǒng)環(huán)境,常用于運(yùn)行不同的操作系統(tǒng)、測(cè)試環(huán)境、或需要高安全性的場(chǎng)景。
而Docker容器,更適用于:微服務(wù)架構(gòu)、持續(xù)集成與交付(CI/CD)、高密度部署、以及輕量級(jí)的隔離場(chǎng)景。