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.hqwc.cn/news/502904.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea 多模块A模块调用了B模块的Jar包,而非本地源码

1,问题描述 对于多模块的互相调用,比如模块A,模块B,模块C, 这在本地都是可以编辑进行开发的源码, 按理说是模块A可以直接点进模块B的本地源码, 但是不知道什么原因,导致模块A点进…

Java 学习和实践笔记(26):组合(component)的含义以及与继承(extends)的关系

组合的两个作用: 1)通过将父类对象作为子类的属性 2)通过第1点的作用,实现了代码复用。 示例代码: public class TestComponent {public static void main(String[] args) {Student2 s1 new Student2("jason&…

聚观早报 | 爱奇艺2023年Q4财报;苹果将加大AI投入

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 3月1日消息 爱奇艺2023年Q4财报 苹果将加大AI投入 意大利正与多家车企谈判 多家企业与百度达成合作 比亚迪宋PL…

css 面试 px,rem,em 区别

一、px是决定单位&#xff0c;一旦设置了就无法因为适应页面大小而改变。 二、em和rem 是相对长度单位&#xff0c; 相对于px更具有灵活性&#xff0c;更适用于响应式布局。 三、em是相对于其父元素来设置字体大小的&#xff0c;一般都是以<body>的“font-size”为基准…

MATLAB练习题:排队论问题的模拟

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 下面我们来看一道排队论的题目。假设某银行工作时间内只有一个…

微信小程序 ---- 慕尚花坊 商品管理

商品管理 01. 配置商品管理分包 思路分析&#xff1a; 随着项目功能的增加&#xff0c;项目体积也随着增大&#xff0c;从而影响小程序的加载速度&#xff0c;影响用户的体验。 因此我们需要将 商品列表 和 商品详情 功能配置成一个分包&#xff0c; 当用户在访问设置页面…

labview数组精讲

题主经过写文章一段时间的发现,许多同学对该软件的理解和编程能力是不太一样的,有些知识相对一些同学较为简单,但是有些同学提问就比较困难。那么针对这个问题,题主打算出一期说白话系列的专栏,在该栏目中用最通俗的大白话和例子去让大家深刻了解这个软件的功能和摸透他的…

pikachu之特殊注入之搜索型注入、xx型注入、insert/update注入、delete注入、宽字节注入

一步一脚印&#xff01;&#xff01;&#xff01; 补充&#xff1a;此处为什么不写http请求头注入&#xff0c;因为该注入类型只是换了注入点&#xff0c;语句其他根本没有什么变化 1.搜索型 先尝试输入常用payload&#xff1a; 1 or 11 #。 已经有回显 我们在查看提示 我们…

SpringBoot+Vue+MySQL:装修管理新架构探索

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

Educational Codeforces Round 132 (Rated for Div. 2) E. XOR Tree(启发式合并+贪心)

题目 n(n<2e5)个点的树&#xff0c;点i权值ai&#xff08;1<ai<2^30&#xff09; 修改最少的点的权值&#xff0c;使得树上不存在异或和为0的简单路径&#xff0c;输出最少的点数 权值可以被修改成任意正整数&#xff08;可以是无限大&#xff09; 思路来源 官方…

剑指offer面试题28:对称的二叉树

#试题28&#xff1a;对称的二叉树 题目&#xff1a; 请设计一个函数判断一棵二叉树是否 轴对称 。 示例 1&#xff1a; 输入&#xff1a;root [6,7,7,8,9,9,8] 输出&#xff1a;true 解释&#xff1a;从图中可看出树是轴对称的。示例 2&#xff1a; 输入&#xff1a;root …

Ubuntu22.04下安装Spark2.4.0(Local模式)

一、版本信息 虚拟机产品&#xff1a;VMware Workstation 17 Pro 虚拟机版本&#xff1a;17.0.0 build-20800274 ISO映像文件&#xff1a;ubuntukylin-22.04-pro-amd64.iso Hadoop版本&#xff1a;Hadoop 3.1.3 JDK版本&#xff1a;Java JDK 1.8 Spark版本&#xff1a;S…