Docker與虛擬機比較

在對比Docker和虛擬機前,先簡單了解下虛擬化,明確Docker和虛擬機分別對應的虛擬化級別,然后對Docker和虛擬機進行比較。需要注意的是,Docker和虛擬機并沒有什么可比性,而是Docker使用的容器技術和虛擬機使用的虛擬化技術的比較。

虛擬化(Virtualization)簡介

虛擬化是一個通用的概念,在不同的領域有不同的理解。在計算機領域,一般指的是計算虛擬化(Computer Virtualization)。維基百科上對計算機虛擬化的定義如下:

在計算機技術中,虛擬化是一種資源管理技術,是將計算機的各種實體資源,如服務器、網絡、內存及存儲等,
予以抽象、轉換后呈現出來,打破實體結構間的不可切割的障礙,使用戶可以用比原來的組態更好的方式來應用這些資源。  

可見,虛擬化的核心是對資源的抽象,目標往往是為了在同一個主機上同時運行多個系統或應用,從而提高系統資源的利用率,并且帶來降低成本、方便管理和容錯容災等好處。
根據作用的對象,可將虛擬化分為基于硬件的虛擬化和基于軟件的虛擬化。注意,真正意義上的基于硬件的虛擬化技術并不多見,少數如網卡中的單根多IO虛擬化(Single Root I/O Virtualization and Sharing Specification,SR-IOV)等技術,不在本文的討論范圍。
基于軟件的虛擬化從對象所在的層次,有可以分為應用虛擬化和平臺虛擬化。其中應用虛擬化一般指的是一些模擬設備,如一些模擬器軟件。平臺虛擬化又可細分為以下幾個子類:
(1) 完全虛擬化。虛擬機模擬完整的底層硬件環境和特權指令的執行過程,客戶操作系統無需進行修改。如VMware Workstation、VirtualBox等。
(2) 硬件輔助虛擬化。利用硬件輔助支持處理敏感指令來實現完全虛擬化的功能,客戶操作系統無需修改,如VMware Workstation、KVM等。
(3) 部分虛擬化。只針對部分硬件資源進行虛擬化,客戶操作系統修改進行修改。現在某些虛擬機技術的早期版本支持部分虛擬化。
(4) 超虛擬化。部分硬件接口以軟件的形式提供給客戶操作系統,客戶操作系統需要進行修改,如早期的Xen。
(5) 操作系統級虛擬化。內核通過創建多個虛擬的操作系統實例(內核和庫)來隔離(如容器技術)不同的進程,如Docker。

請添加圖片描述

Docker與虛擬機比較

對于虛擬機來說,虛擬機通過硬件虛擬化功能模擬出運行一個操作系統所需的各種硬件,比如CPU、內存、I/O設備等。然后,它在這些虛擬的硬件上安裝一個新的操作系統——客戶操作系統(Guest OS)。這樣,用戶的應用程序就可以在這個虛擬的機器中運行。
對于Docker來說,Docker通過容器技術,在操作系統的上層提供了隔離的環境。然后用戶的應用程序就可以在這個隔離的環境中運行。
虛擬機和Docker的架構差異可以用下圖表示:

請添加圖片描述

從上圖可知,虛擬機通過虛擬的硬件,可安裝一個操作提供和其他應用程序。所以,虛擬機創建的時間比較長,啟動時間以分鐘為單位。因為在運行應用程序前還得運行整個操作系統,所以分配所需的CPU、內存、磁盤等資源較多。同時,基于虛擬機方式運行N個不同的應用需要啟用N個虛擬機(每個虛擬機需要單獨分配獨占的內存、磁盤等資源),運行密度較低。虛擬機因為提供了隔離操作系統的環境,所以可以實現完全隔離,從而保證安全性。
而Docker等容器引擎,可以和主機的內核直接打交道。因為容器中運行的應用程序和計算機的操作系統之間沒有額外的中間層,沒有資源被冗余軟件的運行或虛擬硬件的模擬浪費掉。所以,容器的創建時間較短,啟動時間以秒為單位。且分配所需的CPU、內存、磁盤等資源較少。同時,基于容器方式運行N個不同的應用只需要啟用N個容器即可,運行密度較高。Docker等容器引擎利用namespace、cgroup、根文件系統等技術實現了容器隔離環境,支持進程級隔離,存在一定的安全風險。但是,從1.3.0版本開始,Docker重點改善了容器的安全控制和鏡像的安全機制,極大地提高了使用Docker的安全性。在已知的大規模應用中,目前尚未出現值得擔憂的安全隱患。
Docker等容器引擎與虛擬機的比較,可以總結為一下幾個方面:

特性容器虛擬機
隔離提供與主機和其他容器的輕度隔離,但不提供與虛擬機一樣強的安全邊界提供與主機和其他VM的完全隔離。
啟動速度秒級分鐘級
性能接近原生較弱
資源占用運行操作系統的用戶模式部分,可以對其進行定制,使之只包含應用所需的服務,減少所使用的系統資源。運行包含內核的完整操作系統,需要更多的系統資源,如CPU、內存、存儲等。
運行密度單機支持上千個容器單機一般十幾個
安全性輕度隔離,存在不安全隱患完全隔離,安全性更高

參考

《Docker實戰》 Jeff Nickoloff 著, 胡震,楊潤青 黃帥 譯
《Docker技術入門與實戰》 楊保華 戴王劍 曹亞侖 著
https://blog.daocloud.io/4001.html 容器與虛擬機
https://zhuanlan.zhihu.com/p/81525291 虛擬機與容器的區別
https://zhuanlan.zhihu.com/p/271846374 容器、Docker、虛擬機
https://learn.microsoft.com/zh-cn/virtualization/windowscontainers/about/containers-vs-vm 容器與虛擬機
https://aijishu.com/a/1060000000206531 Docker容器、虛擬機和裸機運行的性能比較

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714356.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714356.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714356.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【K8S類型系統】一文梳理 K8S 各類型概念之間的關系(GVK/GVR/Object/Schema/RestMapper)

參考 k8s 官方文檔 https://kubernetes.io/zh-cn/docs/reference/https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/ 重點 Kubernetes源碼學習-kubernetes基礎數據結構 - 知乎 重點 Kubernetes類型系統 | 李乾坤的博客 重點 k8s源碼學習-三大核心數…

前端學習第二天-html提升

達標要求 了解列表的分類 熟練掌握列表的用法 熟練掌握表格的結構構成 合并單元格 表單的組成 熟練掌握表單控件分類的使用 1.列表 1.1 無序列表 <ul>&#xff1a;定義無序列表&#xff0c;并且只能包含<li>子元素。 <li>&#xff1a;定義列表項&a…

LZO索引文件失效說明

在hive中創建lzo文件和索引時&#xff0c;進行查詢時會出現問題.hive的默認輸入格式是開啟小文件合并的&#xff0c;會把索引也合并進來。所以要關閉hive小文件合并功能&#xff01;

Matlab:元胞自動機

元胞自動機是一種基于離散空間的動態系統&#xff0c;由許多簡單單元按照某些規則進行相互作用和演化而形成的復雜結構。元胞自動機可以用于模擬物理、生物、社會等領域的現象&#xff0c;以及進行優化、圖像處理、噪聲生成等方面的應用。 例1&#xff1a;生命游戲 nextState…

maven項目報錯Cannot resolve plugin org.apache.maven.plugins:maven-war-plugin:2.2

如果IDEA整合maven沒有問題&#xff0c;還是報這個錯誤&#xff0c;很大可能是由于在下載過程中存在網絡問題&#xff0c;導致文件下載一半而停止&#xff0c;但是已經在倉庫中存在這個文件夾&#xff0c;解決方法是刪除文件夾重新下載即可。 刪除本地倉庫下的\org\apache\mav…

(算法)位運算

常見的位運算符&#xff1a; 給定一個數n判斷他的二進制第x位是0還是1 把第x位修改為1 因為是只是修改n的某個位置&#xff0c;所以不應該移動改變n 既然修改為1&#xff0c;那么就要想到 | 運算符 把第x位修改為0 因為修改為0,所以要用&運算符 位圖思想 判定字符串…

C++17之std::invoke: 使用和原理探究(全)

目錄 1.概述 2.輔助類 3.原理分析 4.總結 1.概述 在之前的 C 版本中&#xff0c;要調用不同類型的可調用對象&#xff0c;需要使用不同的語法&#xff0c;例如使用函數調用運算符 () 來調用函數或函數指針&#xff0c;使用成員訪問運算符 -> 或 . 來調用成員函數。這樣的…

二維碼門樓牌管理系統技術服務的深度解析

文章目錄 前言一、標準地址名稱的定義與重要性二、二維碼門樓牌管理系統的核心技術三、標準地址名稱在二維碼門樓牌管理中的應用四、二維碼門樓牌管理系統的優勢與挑戰五、展望未來 前言 在數字化浪潮中&#xff0c;二維碼門樓牌管理系統以其高效、便捷的特性&#xff0c;正逐…

【一】【算法分析與設計】基礎測試

排列式 題目描述 7254是一個不尋常的數&#xff0c;因為它可以表示為7254 39 x 186&#xff0c;這個式子中1~9每個數字正好出現一次 輸出所有這樣的不同的式子&#xff08;乘數交換被認為是相同的式子&#xff09; 結果小的先輸出&#xff1b;結果相同的&#xff0c;較小的乘…

js 實戰小案例

實戰 時間 js 格式化時間 <script type"text/javascript">function formatDate(date) { let year date.getFullYear(); let month String(date.getMonth() 1).padStart(2, 0); // getMonth() 返回的月份是從0開始的&#xff0c;所以要加1&#xff0c;并…

【go從入門到精通】go包,內置類型和初始化順序

大家好&#xff0c;這是我給大家準備的新的一期專欄&#xff0c;專門講golang&#xff0c;從入門到精通各種框架和中間件&#xff0c;工具類庫&#xff0c;希望對go有興趣的同學可以訂閱此專欄。 go基礎 。 Go文件名&#xff1a; 所有的go源碼都是以 ".go" 結尾&…

Mamba 環境安裝:causal-conv1d和mamba-ssm報錯解決辦法

問題描述&#xff1a; 在執行命令 pip install causal_conv1d 和 mamba_ssm 出錯&#xff1a; 解決方案&#xff1a; 1、使用網友配置好的Docker環境&#xff0c;參考&#xff1a;解決causal_conv1d和mamba_ssm無法安裝 -&#xff1e; 直接使用Mamba基礎環境docker鏡像 DockH…

java實現圖片轉pdf,并通過流的方式進行下載(前后端分離)

首先需要導入相關依賴&#xff0c;由于具體依賴本人也不是記得很清楚了&#xff0c;所以簡短的說一下。 iText&#xff1a;PDF 操作庫&#xff0c;用于創建和操作 PDF 文件。可通過 Maven 或 Gradle 引入 iText 依賴。 MultipartFile&#xff1a;Spring 框架中處理文件上傳的類…

一臺工控機的能量

使用Docker搭建EPICS的IOC記錄 Zstack EPICS Archiver在小課題組的使用經驗 以前電子槍調試&#xff0c;用一臺工控機跑起束測后臺&#xff0c;這次新光源用的電子槍加工回來又是測試&#xff0c;又是用一臺工控機做起重復的事&#xff0c;不過生命在于折騰&#xff0c;重復的…

stm32——hal庫學習筆記(IIC)

一、IIC總線協議介紹&#xff08;掌握&#xff09; 二、AT24C02介紹&#xff08;了解&#xff09; 三、AT24C02讀寫時序&#xff08;掌握&#xff09; 四、AT24C02驅動步驟&#xff08;掌握&#xff09; 五、編程實戰&#xff08;掌握&#xff09; myiic.c #include "./B…

汽車虛擬仿真技術的實現、應用和未來

汽車虛擬仿真技術是一種利用計算機模擬汽車運行的技術&#xff0c;以實現對汽車行為的分析、評估和改進。汽車虛擬仿真技術是汽車工業中重要的開發設計和測試工具&#xff0c;可以大大縮短產品研發周期、降低研發成本和提高產品質量。本文將從汽車虛擬仿真技術的實現過程、應用…

Ubuntu18.04 系統上配置并運行SuperGluePretrainedNetwork(僅使用CPU)

SuperGlue是Magic Leap在CVPR 2020上展示的研究項目&#xff0c;它是一個圖神經網絡&#xff08;Graph Neural Network&#xff09;和最優匹配層&#xff08;Optimal Matching layer&#xff09;的結合&#xff0c;訓練用于對兩組稀疏圖像特征進行匹配。這個項目提供了PyTorch代…

前端的文字的字體應該如何設置

要設置文字的字體&#xff0c;在CSS中使用font-family屬性。這個屬性可以接受一個或多個字體名稱作為其值&#xff0c;瀏覽器會按照列表中的順序嘗試使用這些字體渲染文本。如果第一個字體不可用&#xff0c;瀏覽器會嘗試使用列表中的下一個字體&#xff0c;依此類推。 字體設…

iOS消息發送流程

Objc的方法調用基于消息發送機制。即Objc中的方法調用&#xff0c;在底層實際都是通過調用objc_msgSend方法向對象消息發送消息來實現的。在iOS中&#xff0c; 實例對象的方法主要存儲在類的方法列表中&#xff0c;類方法則是主要存儲在原類中。 向對象發送消息&#xff0c;核心…

推薦一個屏幕上鼠標高亮顯示的小工具

在視頻錄制等特定場景下&#xff0c;很多人希望在點擊鼠標時能夠在屏幕上及時進行顯示&#xff0c;便于別人發現&#xff0c;提高別人的注意力。 因此&#xff0c;很多錄屏軟件中都內含顯示鼠標點擊功能。那如果不支持該怎么辦呢&#xff1f;其實&#xff0c;也是可以通過其他工…