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.mzph.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,所以要用&运算符 位图思想 判定字符串…

二维码门楼牌管理系统技术服务的深度解析

文章目录 前言一、标准地址名称的定义与重要性二、二维码门楼牌管理系统的核心技术三、标准地址名称在二维码门楼牌管理中的应用四、二维码门楼牌管理系统的优势与挑战五、展望未来 前言 在数字化浪潮中&#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;也是可以通过其他工…

Python 实现Excel自动化办公(上)

在Python 中你要针对某个对象进行操作&#xff0c;是需要安装与其对应的第三方库的&#xff0c;这里对于Excel 也不例外&#xff0c;它也有对应的第三方库&#xff0c;即xlrd 库。 什么是xlrd库 Python 操作Excel 主要用到xlrd和xlwt这两个库&#xff0c;即xlrd是读Excel &am…