A. docker容器與虛擬機有什麼區別
Docker 是一個開源項目,這個項目旨在通過把應用程序打包為可移植的、自給自足的容器。把項目發布在DocKer容器上面進行測試,當項目需要正式上線的時候我們直接可以把做好的DocKer鏡像部署上去就行了。節省費用。
Docker與虛擬機的區別:
1: Docker 啟動速度比虛擬機器快很多。
2:資源利用比虛擬機高:同一台機器上我相信能跑100台DocKer,咱們肯定不趕跑這么多台虛擬機,有效的節約資源。
我是海騰數據中心的技術小哥,很高興為您解答問題。 需要伺服器或技術支持可聯系技術小哥
B. 怎麼判斷 虛擬機不是不docker
docker是近年來新興的虛擬化工具,它可以和虛擬機一樣實現資源和系統環境的隔離。本文將主要根據IBM發表的研究報告,論述docker與傳統虛擬化方式的不同之處,並比較物理機、docker容器、虛擬機三者的性能差異及差異產生的原理。
docker與虛擬機實現原理比較
如下圖分別是虛擬機與docker的實現框架。
比較兩圖的差異,左圖虛擬機的Guest OS層和Hypervisor層在docker中被Docker Engine層所替代。虛擬機的Guest OS即為虛擬機安裝的操作系統,它是一個完整操作系統內核;虛擬機的Hypervisor層可以簡單理解為一個硬體虛擬化平台,它在Host OS是以內核態的驅動存在的。
虛擬機實現資源隔離的方法是利用獨立的OS,並利用Hypervisor虛擬化CPU、內存、IO設備等實現的。例如,為了虛擬CPU,Hypervisor會為每個虛擬的CPU創建一個數據結構,模擬CPU的全部寄存器的值,在適當的時候跟蹤並修改這些值。需要指出的是在大多數情況下,虛擬機軟體代碼是直接跑在硬體上的,而不需要Hypervisor介入。只有在一些許可權高的請求下,Guest OS需要運行內核態修改CPU的寄存器數據,Hypervisor會介入,修改並維護虛擬的CPU狀態。
Hypervisor虛擬化內存的方法是創建一個shadow page table。正常的情況下,一個page table可以用來實現從虛擬內存到物理內存的翻譯。在虛擬化的情況下,由於所謂的物理內存仍然是虛擬的,因此shadow page table就要做到:虛擬內存->虛擬的物理內存->真正的物理內存。
對於IO設備虛擬化,當Hypervisor接到page fault,並發現實際上虛擬的物理內存地址對應的是一個I/O設備,Hypervisor就用軟體模擬這個設備的工作情況,並返回。比如當CPU想要寫磁碟時,Hypervisor就把相應的數據寫到一個host OS的文件上,這個文件實際上就模擬了虛擬的磁碟。
對比虛擬機實現資源和環境隔離的方案,docker就顯得簡練很多。docker Engine可以簡單看成對Linux的NameSpace、Cgroup、鏡像管理文件系統操作的封裝。docker並沒有和虛擬機一樣利用一個完全獨立的Guest OS實現環境隔離,它利用的是目前Linux內核本身支持的容器方式實現資源和環境隔離。簡單的說,docker利用namespace實現系統環境的隔離;利用Cgroup實現資源限制;利用鏡像實現根目錄環境的隔離。
通過docker和虛擬機實現原理的比較,我們大致可以得出一些結論:
(1)docker有著比虛擬機更少的抽象層。由於docker不需要Hypervisor實現硬體資源虛擬化,運行在docker容器上的程序直接使用的都是實際物理機的硬體資源。因此在CPU、內存利用率上docker將會在效率上有優勢,具體的效率對比在下幾個小節里給出。在IO設備虛擬化上,docker的鏡像管理有多種方案,比如利用Aufs文件系統或者Device Mapper實現docker的文件管理,各種實現方案的效率略有不同。
(2)docker利用的是宿主機的內核,而不需要Guest OS。因此,當新建一個容器時,docker不需要和虛擬機一樣重新載入一個操作系統內核。我們知道,引導、載入操作系統內核是一個比較費時費資源的過程,當新建一個虛擬機時,虛擬機軟體需要載入Guest OS,這個新建過程是分鍾級別的。而docker由於直接利用宿主機的操作系統,則省略了這個過程,因此新建一個docker容器只需要幾秒鍾。另外,現代操作系統是復雜的系統,在一台物理機上新增加一個操作系統的資源開銷是比較大的,因此,docker對比虛擬機在資源消耗上也佔有比較大的優勢。事實上,在一台物理機上我們可以很容易建立成百上千的容器,而只能建立幾個虛擬機。
C. 什麼是Docker
Docker是一個開源的應用容器引擎,它基於Go語言開發,並遵從Apache2.0開源協議。使用Docker可以讓開發者封裝他們的應用以及依賴包到一個可移植的容器中,然後發布到任意Linux機器上,也可以實現虛擬化。Docker容器完全使用沙箱機制,相互之間不會有任何介面,這保證了容器之間的安全性。
Docker誕生於2013年初,目前有兩個版本:Community Edition(CE,社區版)和Enterprise
Edition(EE,企業版)。
Docker有哪些特點?
1、更高效的利用系統資源
Docker對系統資源的利用率很高,無論是應用執行速度,內存損耗或者文件存儲速度,都要比傳統虛擬機技術更高效。因此,對比虛擬化技術,一個相同配置的主機往往可以運行更多數量的應用。
2、更快速的啟動時間
傳統的虛擬化技術啟動應用服務往往需要數分鍾,而Docker容器應用,由於直接運行於宿主內核,無需啟動完整的操作系統,因此可以做到秒級,甚至毫秒級的啟動時間,大大節約了開發測試,部署的時間。
3、一致的運行環境
開發過程中常見的一個問題是環境一致問題,由於開發環境、測試環境、生產環境不一致,導致有些bug並未在開發過程中發現。而Docker的鏡像提供了除內核外完整的運行時環境,確保環境一致性,從而不會在出現這段代碼在我機器上沒問題這類問題。
4、持續支付和部署
對開發和運維人員來說,最希望就是一次創建和部署,可以在任意地方運行。而且使用Docker
file使鏡像構建透明化,不僅僅開發團隊可以理解應用運行環境,也方便運維團隊理解應用運行所需條件,幫助更好的生產環境中部署該鏡像。
5、更輕松的遷移
由於Docker確保了執行環境的一致性,使得應用的遷移更加容易。Docker可以在很多平台上運行,無論是物理機、虛擬機、公有雲、私有雲,甚至是筆記本、其運行結果是一致的。因此用戶可以很輕易的將在一個平台上運行的應用,遷移到另一個平台上,而不用擔心運行環境的變化導致應用無法正常運行的情況。
6、更輕松的維護和擴展
Docker使用的分層存儲以及鏡像技術,使得應用重復部分的復用更為容易,也使得應用的維護更新更加簡單,基於基礎鏡像進一步擴展鏡像也變得十分簡單。此外,Docker團隊同各個開源項目團隊一起維護了一大批高質量的官網鏡像,既可以直接在生產環境使用,又可以作為基礎進一步定製,大大降低了應用服務的鏡像製作成本。
D. 容器與虛擬機的區別
1.容器技術簡介
對於容器,它首先是一個相對獨立的運行環境,在這一點有點類似於虛擬機,但是不像虛擬機那樣徹底。在容器內,應該最小化其對外界的影響,比如不能在容器內把宿主機上的資源全部消耗,這就是資源控制。
2.容器與虛擬機的區別
容器和虛擬機之間的主要區別在於虛擬化層的位置和操作系統資源的使用方式。
1
1
容器與虛擬機擁有著類似的使命:對應用程序及其關聯性進行隔離,從而構建起一套能夠隨處運行的自容納單元。此外,容器與虛擬機還擺脫了對物理硬體的需求,允許我們更為高效地使用計算資源,從而提升能源效率與成本效益。
虛擬機會將虛擬硬體、內核(即操作系統)以及用戶空間打包在新虛擬機當中,虛擬機能夠利用「虛擬機管理程序」運行在物理設備之上。虛擬機依賴於hypervisor,其通常被安裝在「裸金屬」系統硬體之上,這導致hypervisor在某些方面被認為是一種操作系統。一旦 hypervisor安裝完成, 就可以從系統可用計算資源當中分配虛擬機實例了,每台虛擬機都能夠獲得唯一的操作系統和負載(應用程序)。簡言之,虛擬機先需要虛擬一個物理環境,然後構建一個完整的操作系統,再搭建一層Runtime,然後供應用程序運行。
對於容器環境來說,不需要安裝主機操作系統,直接將容器層(比如LXC或libcontainer)安裝在主機操作系統(通常是Linux變種)之上。在安裝完容器層之後,就可以從系統可用計算資源當中分配容器實例了,並且企業應用可以被部署在容器當中。但是,每個容器化應用都會共享相同的操作系統(單個主機操作系統)。容器可以看成一個裝好了一組特定應用的虛擬機,它直接利用了宿主機的內核,抽象層比虛擬機更少,更加輕量化,啟動速度極快。
相比於虛擬機,容器擁有更高的資源使用效率,因為它並不需要為每個應用分配單獨的操作系統——實例規模更小、創建和遷移速度也更快。這意味相比於虛擬機,單個操作系統能夠承載更多的容器。雲提供商十分熱衷於容器技術,因為在相同的硬體設備當中,可以部署數量更多的容器實例。此外,容器易於遷移,但是只能被遷移到具有兼容操作系統內核的其他伺服器當中,這樣就會給遷移選擇帶來限制。
因為容器不像虛擬機那樣同樣對內核或者虛擬硬體進行打包,所以每套容器都擁有自己的隔離化用戶空間,從而使得多套容器能夠運行在同一主機系統之上。我們可以看到全部操作系統層級的架構都可實現跨容器共享,惟一需要獨立構建的就是二進制文件與庫。正因為如此,容器才擁有極為出色的輕量化特性。
對Docker稍有接觸的人應該都見過下圖,無需更多解釋,Docker減少Guest OS這一層級,所以更輕量和更高性能。
docker虛擬機區別
3.深層區別:
docker虛擬機區別
更新:Docker現在已經支持windows平台,所以上面的Windows支持一欄可以忽略。
E. docker和虛擬機的區別 知乎
Docker
Docker是一個集開發、打包、運行應用於一體的開放式平台。Docker可以用來快速交付應用。使用Docker,你可以將應用程序從你的基礎設施中分離出來,並將基礎設施當做一個管理平台。Docker可以加快打包時間,加快測試,加快發布,縮短開發及運行代碼之間的周期。Docker通過結合內核容器化特點和工作流,並使之工具化來實現這一切,幫助管理和發布你的應用。
虛擬機
虛擬機在本質上就是在模擬一台真實的計算機設備,同時遵循同樣的程序執行方式。虛擬機能夠利用虛擬機管理程序運行在物理設備之上。反過來,虛擬機管理程序則可運行在主機設備或者裸機之上。
傳統的虛擬機需要模擬數台機器包括硬體,每台虛擬機都需要有自己的操作系統,虛擬機一旦被開啟,預分配給他的資源將全部被佔用。每一個虛擬機包含應用,必要的二進制和庫,以及一個完整的用戶操作系統。
Docker和虛擬機有什麼區別?
虛擬機
1、資源佔用多,虛擬機會獨佔一部分內存和硬碟空間。它運行的時候,其他程序就不能使用這些資源,哪怕虛擬機裡面的應用程序,真正使用的內存只有1MB,虛擬機依然需要幾百MB的內存才能運行。
2、冗餘步驟多,虛擬機是完整的操作系統,一些系統級別的操作步驟,往往無法跳過,比如用戶登錄。
3、啟動慢,啟動操作系統需要多久,啟動虛擬機就需要多久,可能需要等幾分鍾,應用程序才能真正運行。
Docker
1、啟動快,容器裡面的應用,直接就是底層系統的一個進程,而不是虛擬機內部的進程。所以啟動容器相當於啟動本機的一個進程,而不是啟動一個操作系統,速度就快很多。
2、資源佔用少,容器只佔用需要的資源,不佔用那些沒有用到的資源;虛擬機由於是完整的操作系統,不可避免要佔用所有資源;另外,多個容器可以共享資源,虛擬機都是獨享資源。
3、體積小,容器只要包含用到的組件即可,而虛擬機是整個操作系統的打包,所以容器文件比虛擬機文件要小很多。
F. docker與虛擬機的區別
docker作為一種輕量級的虛擬化方式,其在運行應用上跟傳統的虛擬機相比具有如下顯著優勢:
①docker容器很快,啟動和停止均可以在秒級實現,相比傳統的虛擬機需要數分鍾要快得多。
②docker對系統資源需求很少,一台主機上可以同時運行數千個docker容器。
③docker通過類似GIT設計理念的操作來方便用戶獲取、分發和更新鏡像,存儲復用,增量更新。
④docker容器除了運行應用外,基本不消耗額外的系統資源,其應用獲得的是接近原生的性能,傳統虛擬機需要單獨分配內存、磁碟等資源。
⑤docker通過dockerfile支持靈活的自動化創建和部署機制,以提高工作效率並標准化流程。
⑥docker方便遷移,將鏡像push到倉庫,可以通過pull鏡像在任何一台機器上啟動docker。
G. 虛擬機和物理機有什麼區別
兩者的區別:
1、虛擬機沒有硬體實體,而物理機有實體。也就是說,物理機是有實體的硬體系統,比如伺服器等,而虛擬機是藉助物理機虛擬出虛擬的硬體系統。
2、兩者容器不同。以電腦舉例,一台電腦就是一個物理機,但是一台電腦可以成為多個虛擬機,每個虛擬機可運行不同的操作系統,並且應用程序都可以在相互獨立的空間內運行而互不影響。
3、物理機的執行引擎是直接建立在CPU處理器、指令集、操作系統和硬體層面上的;而虛擬機的執行引擎則由自己實現,因此可以制定自己的指令集和執行引擎的結構體系,而且還可以執行一些不被硬體直接支持的指令集格式。
(7)如何區分docker虛擬機物理機擴展閱讀
虛擬計算機系統三層含義-同質、高效、資源受控。同質-本質上虛擬機和物理機是相同的、表現上有所差異,如一個物理核虛擬多個核。高效-虛擬機效能接近物理機。資源受控-虛擬機對系統資源有完全的控制能力,包括分配、管理、回收。
虛擬化分不同層面的虛擬化硬體抽象層的虛擬化-客戶機與宿主機硬體相似,指令集相似。操作系統層虛擬化-內核可以提供多個相互隔離的用戶態,其擁有獨立的文件系統、網路、系統設置和庫函數。庫函數層初始化-是不同的操作系統可以擁有共同的庫函數介面,應用程序不需修改。
虛擬機現在越來越多的被使用,他相比物理機有很多優點,但是缺點也比較明顯,由於多了一層虛擬指令,執行虛擬機指令後還要轉化為本地機器碼,所以在執行效率上,虛擬機是不如物理機的。
H. Linux裡面rancber和docker區別是什麼
Linux是一套免費使用和自由傳播的類UNIX操作系統,一般用於後端服務中,而Docker是一個開源的應用容器引擎,兩者是用來進行配合使用,並不是一類,所以兩者無法進行對比。
Docker六大特點
1、更高效的利用系統資源
docker對系統資源的利用率更高,無論是應用執行速度,內存損耗或者文件存儲速度,都要比傳統虛擬機技術更高效。因此,相比虛擬機技術,一個相同配置的主機往往可以運行更多數量的應用。
2、更快速的啟動時間
傳統的虛擬機技術啟動應用服務往往需要數分鍾,而docker容器應用,由於直接運行於宿主內核,無需啟動完整的操作系統,因此可以做到秒級,甚至毫秒級的啟動時間,大大的節約了開發測試,部署的時間。
3、一致的運行環境
開發過程中常見的一個問題是環境一致問題,由於開發環境,測試環境,生產環境不一致,導致有些bug並未在開發過程中發現。而docker的鏡像提供了除內核外完整的運行時環境,確保環境一致性,從而不會在出現「這段代碼在我機器上沒問題」這類問題。
4、持續支付和部署
對開發和運維人員來說,最希望就是一次創建和部署,可以在任意的地方運行。(定製應用鏡像來實現集成、持續支付、部署。開發人員可以通過dockerfile來進行鏡像構建,並結合持續集成系統進行集成測試,而運維人員則可以直接在生產環境中快速部署該鏡像,甚至結合持續部署系統進行自動部署)。而且使用dockerfile使鏡像構建透明化,不僅僅開發團隊可以理解應用運行環境,也方便運維團隊理解應用運行所需條件,幫助更好的生產環境中部署該鏡像。
5、更輕松的遷移
由於docker確保了執行環境的一致性,使得應用的遷移更加的容易。docker可以在很多平台上運行,無論是物理機、虛擬機、公有雲、私有雲、甚至是筆記本、其運行結果是一致的。因此用戶可以很輕易的將在一個平台上運行的應用,遷移到另一個平台上,而不用擔心運行環境的變化導致應用無法正常運行的情況。
6、更輕松的維護和拓展
docker使用的分層存儲以及鏡像的技術,使得應用重復部分的復用更為容易,也使得應用的維護更新更加簡單,基於基礎鏡像進一步擴展鏡像也變得十分簡單。此外,docker團隊同各個開源項目團隊一起維護了一大批高質量的官網鏡像,既可以直接在生產環境使用,又可以作為基礎進一步定製,大大的降低了應用服務的鏡像製作成本。
I. docker容器與虛擬機有什麼區別
我們單位最近在推docker,已經在開發測試環境使用(稍顯落後),下面我就談談自己的Docker的理解,以及Docker和虛擬機的區別。
虛擬機
先說說什麼是虛擬機:在一台物理機器上,利用虛擬化技術,虛擬出來多個操作系統,每個操作系統之間是隔離的。
說起來有些繞,那麼我們看看虛擬機的架構圖,就容易理解了。例如我們要在一台物理機器運行三個Java項目,彼此之間隔離。
從下往上看, 解釋起來其實很簡單:
最下面的一層就是物理機,可以是伺服器,設置是一台個人電腦;
Docker
再說說什麼是Docker,找了一句官方的解釋:Docker是開源的應用容器引擎。是不是又一頭霧水?我們還是先看看Docker的架構圖。
依然從下往上看:
Docker和虛擬機的區別
我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。
謝謝了!docker容器域虛擬機有什麼區別呢?
docker容器: Docker 容器是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的Linux機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴於任何語言、框架包括系統。
虛擬機: 虛擬機(Virtual Machine)指通過軟體模擬的具有完整硬體系統功能的、運行在一個完全隔離環境中的完整計算機系統。虛擬系統通過生成現有操作系統的全新虛擬鏡像,它具有真實windows系統完全一樣的功能,進入虛擬系統後,所有操作都是在這個全新的獨立的虛擬系統裡面進行,可以獨立安裝運行軟體,保存數據,擁有自己的獨立桌面,不會對真正的系統產生任何影響 ,而且具有能夠在現有系統與虛擬鏡像之間靈活切換的一類操作系統。虛擬系統和傳統的虛擬機(Parallels Desktop ,Vmware,VirtualBox,Virtual pc)不同在於:虛擬系統不會降低電腦的性能,啟動虛擬系統不需要像啟動windows系統那樣耗費時間,運行程序更加方便快捷;虛擬系統只能模擬和現有操作系統相同的環境,而虛擬機則可以模擬出其他種類的操作系統;而且虛擬機需要模擬底層的硬體指令,所以在應用程序運行速度上比虛擬系統慢得多。 對比虛擬機與DockerDocker守護進程可以直接與主操作系統進行通信,為各個Docker容器分配資源;它還可以將容器與主操作系統隔離,並將各個容器互相隔離。虛擬機啟動需要數分鍾,而Docker容器可以在數毫秒內啟動。由於沒有臃腫的從操作系統,Docker可以節省大量的磁碟空間以及其他系統資源。說了這么多Docker的優勢,大家也沒有必要完全否定虛擬機技術,因為兩者有不同的使用場景。虛擬機更擅長於徹底隔離整個運行環境。例如,雲服務提供商通常採用虛擬機技術隔離不同的用戶。而Docker通常用於隔離不同的應用,例如前端,後端以及資料庫。
docker解決的主要問題
有過後台開發經驗的同學,一定遇到過下面這些問題:
那麼,有了docker,這些問題都將不復存在。
什麼是dockerDocker是一個虛擬環境容器,可以將你的可執行文件、配置文件及一切其他你需要的文件一並打包到這個容器中,並發布和應用到任意平台。比如,你在本地用Python開發了一個網站後台,開發測試完成後,就可以將Python3及其依賴包、Flask及其各種插件、Mysql、Nginx等打包到一個容器中,然後部署到任意你想部署到的環境。
如果不好理解,我們再拿集裝箱打個比方。
集裝箱解決了什麼問題呢?在一艘大船上,可以把貨物規整的擺放起來。並且各種各樣的貨物被集裝箱標准化了,集裝箱和集裝箱之間不會互相影響。那麼我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在集裝箱里封裝的好好的,那我就可以用一艘大船把他們都運走。
docker也是類似的理念。我們可以在一台機器上跑多個互相毫無關聯的docker容器,每一個容器就相當於一個集裝箱。
docker里的幾個基本概念 與傳統虛擬化的區別這里我們順便講一下傳統虛擬化。
我們看到,傳統虛擬化是站在硬體物理資源的基礎上,虛擬出多個OS,然後在OS的基礎上構建相對獨立的程序運行環境,而Dokcer則是在OS的基礎上進行虛擬,顯然Dokcer輕量得多,因此其資源佔用、性能消耗相比傳統虛擬化都有很大優勢。
在IT行業從業多年,也算從看著時代從物理伺服器走向虛擬化雲計算時代,又准備進入Docker時代,作為下一代虛擬化技術,Docker正改變著整個行業開發、測試、部署應用的方式,至於虛擬化技術和docker技術到底有什麼不同,下面來分析一下。
顧名思義,虛擬化技術是將物理資源以某種技術虛擬成資源池的形式,主要有一虛多和多虛一兩種形式,比如個人電腦安裝Vmware軟體,可以在這個軟體上安裝其他Win系統、MacOS、Linux系統等,實現一台電腦/筆記本承載多個系統的優點,目前蘋果筆記本用戶雙系統解決方案也以虛擬機為主,普通Windows用戶可能需求量不大,而技術人員基本是必備軟體了。
從企業層面來看,多虛一為主要形式,也就是將大量物理伺服器集群虛擬化,形成一個資源池,在這個資源上創建各種不同的虛擬機,實現靈活部署。
其實docker和虛擬技術很像,但又有一些不同點,一方面是兩個技術的層級上,虛擬機一般是底層硬體Hardware支撐,上層是虛擬管理系統Hypervisor層,在上層開啟不同的VM業務,如果需要將這些業務進行隔離,需要每個VM啟動客戶機操作系統,非常消耗資源。
Docker完全不同,底層有硬體和Host OS系統支撐,比如Windows/MacOS/Linux,中間拋去了臃腫的系統,而是以Docker守護進程代替,上層建立不同的容器,不同的應用鏡像打包在不同的容器中,他們互相隔離。
docker設計小巧,部署遷移快速,運行高效,應用之間相互獨立,管理人員可以看到所有容器的內容,虛擬化技術比較臃腫,不論什麼應用都需要先創建新的系統,並且並非按照應用隔離,而是按照系統隔離,管理員無法看到系統內部信息。
舉個例子,Docker就是手機中的各種APP,只需要一個系統就可以下載自己所需的應用,但是虛擬化技術相當於你的蘋果手機安裝一個龐大軟體,這個軟體上安裝安卓系統、魅族系統等,每個系統上還要安裝各類應用,比較麻煩。
但兩者沒有絕對的好壞,主要還是看應用場景,根據不同的需求選擇不同的解決方案即可。
Docker與虛擬機介紹
虛擬機: 傳統的虛擬機需要模擬整台機器包括硬體,每台虛擬機都需要有自己的操作系統,虛擬機一旦被開啟,預分配給他的資源將全部被佔用,每一個虛擬機包括應用,必要的二進制和庫以及一個完整的用戶操作系統。
容器(Docker): 容器與的宿主機共享硬體資源及操作系統可以實現資源的動態分配。容器包含應用和其所有的依賴包,但是與其他容器共享內核。容器在宿主機操作系統中,在用戶空間以分離的進程運行。
虛擬機和容器都是在硬體和操作系統以上的,虛擬機有Hypervisor層(「翻譯」客戶系統和宿主系統之間的指令),Hypervisor是整個虛擬機的核心所在。他為虛擬機提供了虛擬的運行平台,管理虛擬機的操作系統運行。每個虛擬機都有自己的系統和系統庫以及應用。
容器沒有Hypervisor層,它是內核級的虛擬化,並且每個容器與宿主機共享硬體資源及操作系統,因此Docker容器不存在Hypervisor層帶來性能的損耗,因此可以實現更高的性能和效率。但是虛擬機技術也有其優勢,能為應用提供一個更加隔離的環境,不會因為應用程序的漏洞給宿主機造成任何威脅。
虛擬機是對硬體資源的虛擬,容器技術則是對進程的虛擬,從而可提供更輕量級的虛擬化,實現進程和資源的隔離。從架構來看,Docker比虛擬化少了兩層,取消了hypervisor層和GuestOS層,使用 Docker Engine 進行調度和隔離,所有應用共用主機操作系統,因此在體量上,Docker較虛擬機更輕量級,在性能上優於虛擬化,接近物理機原生性能。
Docker的優勢持續部署與測試
更高效的利用系統資源
交付物標准化
應用隔離
高性能
最近剛好看了一部分docker的東西
先上圖,vm與docker框架,直觀上來講 vm多了一層guest OS,同時Hypervisor會對硬體資源進行虛擬化,docker直接使用硬體資源 ,所以資源利用率相對docker低也是比較容易理解的
其次,openstack能夠以10台/min的速度創建虛擬機,在docker面前就弱爆了,因為docker是利用宿主機的系統內核,所以可以做到在幾秒鍾之內創建大量容器,它們的 啟動速度是在數量級上的差距 。
最後找了一個IBM測試案例,關於計算能力的,對於kvm為什麼會有這么大的性能損失,一方面是因為虛擬機增加了一層虛擬硬體層,運行在虛擬機上的應用程序在進行數值計算時是運行在Hypervisor虛擬的CPU上的;另外一方面是由於計算程序本身的特性導致的差異。虛擬機虛擬的cpu架構不同於實際cpu架構,數值計算程序一般針對特定的cpu架構有一定的優化措施,虛擬化使這些措施作廢,甚至起到反效果。比如對於本次實驗的平台,實際的CPU架構是2塊物理CPU,每塊CPU擁有16個核,共32個核,採用的是NUMA架構;而虛擬機則將CPU虛擬化成一塊擁有32個核的CPU。這就導致了計算程序在進行計算時無法根據實際的CPU架構進行優化,大大減低了計算效率。
從計算機軟體層級來看,docker和虛擬機的區別在於虛擬的軟體層級不一樣。虛擬機基於同一個硬體,模擬出不同的操作系統;而docker基於同一個操作系統,模擬出不同的運行時環境。我們依次來看:
1. 先看看計算機的軟體層次,從下到上依次為:操作系統內核、文件系統(運行時環境)、上層APP。
2. 虛擬機運行在同一個硬體上,可以虛擬出不同的操作系統。比如vmware可以在一台pc上既模擬出一個windows系統,同時也可以模擬出一台linux系統。 藉助虛擬機,兩個不同的操作系統可以同時運行在同一個硬體之上。
3. 而docker則運行在同一個操作系統內核上,虛擬出不同的文件系統或者也可以叫做運行時環境。不同的運行時環境,其對應的文件系統也是不同的。比如java的運行時環境就要求文件系統里存在jdk,而golang的運行時環境則需要有go相關的底層庫。在docker上既可以虛擬出一個java的運行時環境,也可以虛擬出go的運行時環境。甚至, 基於docker,你既可以虛擬出一個java-1.6的運行時候環境,也可以虛擬出一個java-1.8的運行時環境,而這兩個運行時環境可以同時運行在同一個操作系統之上 。
很高興為您解答。
Docker悄無聲息的來到我們身邊,正在改變我們的開發、測試、部署應用的方式,那麼,到底Docker和虛擬機VM有什麼區別,我們通過一個圖,再配上簡明扼要的文字就很容易理解兩者之間的區別。
首先要明確:Docker是一個開源的應用容器引擎,而VM是一個完整的操作系統。
1、使用VM運行多個相互隔離的應用
解釋:
可以看到,APP #1、APP #2、APP #3如果要獨立運行,相互隔離,則需要安裝三個操作系統。如果一個虛擬操作系統按1G算,總共需要佔3G的存儲空間,更槽糕的是,光運行這三個操作系統就要耗費很大的內存和CPU。
2、使用Docker運行多個相互隔離的應用
DOCKER DAEMON:Docker守護進程,負責管理Docker容器。
Docker運行在主操作系統之上,APP #1、APP #2、APP #3在Docker中是完全隔離的、相經獨立的容器。跟VM相比,省去了龐大的操作系統,耗費硬體資源較少。
除了以上架構上的差異之外,VM和Docker在啟動時間上也有著很大的差距,VM啟動大概需要2分鍾的時間,而Docker啟動則只需2秒。
隨著互聯網的發展,Docker的應用會越來越廣,Build once,run anywhere,一次構建,到處運行。
docker是虛擬化軟體運行環境。
虛擬機是虛擬化硬體。
層次不同。
虛擬機更消耗資源。但帶來的是一個完整的可以不同於宿主機的操作系統。因為和宿主機操作系統不共享任何東西(包括硬體,內核,動態庫,環境變數等),它的隔離性更好。
docker更輕量級,共享使用宿主機的硬體和內核,資源佔用更少。它在宿主機內核基礎上虛擬化了一個不同於宿主機的軟體運行環境,比如動態庫,環境變數等。可以說,docker和宿主機之間除了內核共享,其它都可以不同。
Docker容器啟動、停止速度快rr Docker容器對資源需求較少rr Docker操作簡單rr Dockerfile自動構建和部署方便