了解以及区分物理机,虚拟机(hypervisor/VMM) 和 容器(Docker)的适用场景

2023-11-16

Abbreviations

VMM: virtual machine monitor
Hypervisor: 也可以叫做 VMM

物理机和虚拟机以及容器的区别

动机motivation:为什么要有虚拟机

一句话,就是:现在物理CPU,物理内存和存储,物理网络的硬件能力都越来越强大了。面对现在越来越多样化的业务需求,我们要更加灵活地,更加高效的使用我们的硬件资源。以达到,高效低成本 的两个目的。
如果都是直接使用物理机的话,就会有面向业务的资源大小分配不灵活硬件的申请采购不灵活硬件资源复用不灵活。我们总是希望把硬件资源抽象成软件资源,来动态的业务按需分配和使用。以达到 高效 和 低成本 的目标。
下面的三幅图,是我从另外一篇文章中看到的1。非常生动的以我们居住的别墅,公寓和胶囊公寓来对应物理机,虚拟机已经容器对于资源高效且低成本的使用和复用。非常的生动形象。

物理机:

在这里插入图片描述

虚拟机

在这里插入图片描述

容器

在这里插入图片描述

虚拟机的种类以及他们的本质区别

虚拟化方式

这种方式是从虚拟机的内核角度来看的2
完全虚拟化方式,我们可以翻译成 完全欺骗方式。欺骗谁。。。欺骗虚拟机的内核。在硬件上的操作系统来看,虚拟机是一个普通的应用。只能运行在用户态。可是从代码的角度来看,虚拟机的内核,我就是内核应该运行在内核态。比如当虚拟机里面的浏览器要访问网络的时候,向虚拟机内核请求网络访问。虚拟机内核就要去操作网卡。但是此时,虚拟机是运行在用户态的,并没有权限直接访问网卡。于是,虚拟机的内核分裂了。。。到底我还是不是内核
怎么办呢?这个时候,就需要一个虚拟化层,虚拟化软件。去模拟假的CPU,内存,网络和硬盘给虚拟机的内核,让它自我感觉良好,终于又像一个内核了。这种,情况下,虚拟机内核认为自己就是内核是被虚拟化层完全欺骗的。
流程是这样的:应用请求 -> 虚拟机的内核 ->虚拟网络硬件 -> 虚拟化软件 -> 物理机内核 -> 物理网络硬件
响应的顺序反过来就是了。对于物理硬件的操作,都是需要如虚拟软件模拟虚拟的硬件,其实什么事情都是要虚拟化软件转诉一遍给物理内核的。虚拟机的内核根本不知道这些。这种处理方式的一个坏处就是:慢。
在这里插入图片描述

于是,对于物理CPU资源的申请加速方案,有了 硬件辅助的完全虚拟化方式。这种方式需要Intel的VT-x和AMD的AMD-V从硬件层面来支持。对于虚拟机内核来讲,只要将标志位设为虚拟机状态,虚拟机内核就可以直接在物理CPU上执行大部分的指令。不再需要虚拟化软件在中间转述,除非遇到非常特别的指令,才需要将标志位设为物理机内核态运行,这样大大提高了效率。所以,安装虚拟机的时候,我们务必将物理CPU的这个标志打开。想知道是否打开,对于intel,可以使用 grep “vmx” /proc/cpuinfo; 对于 AMD,可以使用 grep “svm” /proc/cpuinfo 来查看。
另外就是访问网络或是硬盘等外设的时候,为了取得加速。也需要让虚拟机内核加载特殊的驱动。理解起来就是,不再欺骗虚拟机内核。要让他清楚自己的地位,他不是真正的物理机内核。这种 加速的方式加做 半虚拟化方式。
在这里插入图片描述
服务器上的虚拟化软件,多采用qemu。单纯使用qemu,采用的就是完全的虚拟化模式。Guest OS认为自己和硬件直接大交道,其实都是和qemu模拟出来的硬件打交道。qemu会将这些指令转译给真正的硬件。由于所有的指令都要从qemu里面过一手,所以性能就会比较差。当CPU硬件标志位在BIOS里面开启后,就会开启硬件辅助的完全虚拟化。此时,通过KVM, Guest OS的CPU指令就不用了再经过qemu的转译了,直接运行,大大提过了速度。
在这里插入图片描述

qemu和kvm整合之后,CPU的性能问题解决了。接下来,qemu还会模拟其他的硬件,如网络和硬盘。全虚拟化的方式也会影响这些设备的性能。于是,qemu在采取半虚拟化的方式,让Guest OS 加载特殊的驱动来做这些事情。例如,网络需要加载virtio_net, 存储需要加载virtio_blk. Guest 需要安装这些半虚拟化驱动,此时Guest OS知道自己是虚拟机了。所以,数据会直接发给半虚拟化设备,经过特殊的处理(例如排队,缓存,批量处理等性能优化方式),最终发给真正的硬件。从而提高了外设的访问处理性能。

虚拟机类型

Hypervisor有type 1 和 type 2的区别。3
如果hypervisor运行在host OS上,那么就是type 2.他的处理方式是不与物理层接触,因此也被称为hosted hypervisor。他会提供模拟出来的物理层资源给上方的guest OS使用。在云计算中,通常情况hypervisor(kvm技术)只是负责CPU和内存的虚拟化,I/O虚拟化会由其他技术完成。

在这里插入图片描述
那么,既然type 2型的hypervisor是运行在宿主系统上的一个模拟硬件资源以及调度的软件。那么为什么还要有host OS呢?于是type 1型的虚拟化技术满足了这个愿望。在type 1型的虚拟机中,hypervisor既是操作系统也是虚拟化软件,这种技术的有点事效率高,虚拟机安全性只依赖于VMM。

在这里插入图片描述
在这里插入图片描述

docker技术

docker,和VMM不一样。docker依赖于宿主的操作系统(host OS)。也就是说,docker容器要运行在host OS上。他通过一系列技术手段实现了各种隔离,比如内存隔离,存储隔离,CPU隔离。docker不支持windows内核,因此他不能使用在windows上。既是现在有windows版本的docker,也是运行在windows上的linux虚拟机上。由于docker不需要去创建hypervisor层,因此和传统的VM相比较,docker有很多优点。4

在这里插入图片描述
支撑docker的核心技术有三个:Namespace,Cgroup,UnionFS。Namespace提供了虚拟层面的隔离,比如文件隔离,网络隔离等等。Croup提供了物理资源的隔离,比如CPU,内存,磁盘等等。UnionFS给docker镜像提供了技术支撑。

传统计算机体系结构

在这里插入图片描述

  • ISA:Instruction Set Architecture。指令集,这是操作系统与硬件之间的一层。硬件提供了一层接口给操作系统进行调用。指令集中包含了数据处理,存储操作,算术逻辑单元,控制流等。X86架构采用的是复杂指令集;ARM架构采用的是精简指令集。而这些指令集只有在ring 0(内核态)模式下才能使用。
  • ABI:Application binary interface。应用二进制接口。
  • API:Application programming interface。应用编程接口。

虚拟机和Docker的区别

从一台物理机可以虚拟化出很多的虚拟机,一定程度上实现了资源使用的灵活性。但是,虚拟化的方式其实还是非常的复杂。虚拟机虽然是虚拟的,但是他也用有Guest OS,并且需要由VMM负责CPU,内存,网络,存储全部都虚拟化。一个都不能偷懒。
于是,linux中的容器container技术提供了一种更加灵活地方式。既可以隔离出一部分资源,专门用于某个进程,又不需要费劲周折的虚拟化这么多的硬件。毕竟,我只是想跑一个程序,而不是要一整个的linux系统。其实,容器就像船上的不同集装箱封装着不同的货物。封装带来了好处,一个是打包,二是标准化。

容器实现封闭的环境主要靠两种技术

  • 使容器看起来是隔离:namespace(命名空间)。每个命名空间中的应用看到的,都是不同的IP地址,用户空间,进程ID等。
  • 使容器用起来是隔离的技术:cgroup(资源限制),即明明整台机器有很多的CPU,内存,但是一个应用智能使用其中的一部分。
  • 除了封装,还有第三个技术:UnionFS, 提供了镜像的技术支撑。在封装好的那一刻,集装箱里那一刻的状态都被保存成一系列文件,无论在哪里运行这个镜像,都能完成的还原但是的情况。

从下面虚拟机和Docker的体系结构图中我们可以看到差别。Docker结构图中的Docker Engineer 替代了 Hypervisor 和 Guest OS。

在这里插入图片描述
在这里插入图片描述
当程序员根据产品设计开发完毕以后,可以将代码连同运行环境打包成一个容器镜像。此时,这个集装箱就封装好了。接下来,无论是在开发环境,测试环境,还是生产环境运行代码,都可以使用相同的镜像。这样,产品的发布和上线速度就加快了。

如下图实例所示,通过Docker run命令将容器镜像运行为容器,通过namespace和cgroup进行隔离。容器里面不包含内核,是共享host OS的内核。对比虚拟机,虚拟机在qemu进程里面是有客户机guest OS的内核的,应用运行在客户机的用户态。
在这里插入图片描述

参考资料


  1. 物理机、虚拟机、容器的比较 ↩︎

  2. 虚拟机:如何成立子公司,让公司变集团 ↩︎

  3. 汽车hypervisor — 定义和类型 ↩︎

  4. 容器和虚拟机 ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解以及区分物理机,虚拟机(hypervisor/VMM) 和 容器(Docker)的适用场景 的相关文章

随机推荐

  • 迎战 ChatGPT,谷歌聊天机器人 Bard 正式开放测试

    来源 极客邦科技 InfoQ 作者 刘燕 3 月 21 日晚间 谷歌开放了其聊天机器人 Bard 的测试 Bard 最初将可供美国和英国的部分用户使用 用户可以在 bard google com 上注册申请测试 不过谷歌表示推出速度会很慢
  • 【计算机视觉】直接线性变换(DLT)求解P矩阵(3 加入坐标的归一化)(附MATLAB代码)

    引言 本来上一篇帖子就已经达到了精度要求 不过经过同学提醒才发现老师的作业要求中有要求考虑归一化 emmmmm 坐标归一化 进行归一化的必要性和方法参考 计算机视觉中的多视几何 中的描述 上面的是从 2D到2D的结论 不过与从3D到2D的结
  • Python Matplotlib库:统计图补充

    作者简介 人工智能专业本科在读 喜欢计算机与编程 写博客记录自己的学习历程 个人主页 小嗷犬的博客 个人信条 为天地立心 为生民立命 为往圣继绝学 为万世开太平 本文内容 Python Matplotlib库 统计图补充 Python Ma
  • Redux 新教程Redux Toolkit的使用

    关于更新redux 唏嘘 还是跟不上时代的步伐了 哭唧唧 花费了不少的时间学习完redux后 还没用就发现官网的redux更新了新的使用用法 Redux Toolkit 于是乎硬着头皮翻译了一遍官网的Redux Toolkit 整理出最新的
  • 数据类型和运算符

    这里写目录标题 标识符 变量的概念与三要素 variable 变量的声明与使用 练习2 变量 数据类型 基本数据类型 练习3 变量 进制 了解 小数的存储 了解 基本数据类型的转换 数据类型转换的特例 字符串拼接 运算符 算数运算符 练习
  • linux安装spec编译器,RPM包制作之Spec文件参数详解

    看这篇文章的人基本都有一个想法 就是 劳资不想用YUM的安装 不是版本太低就是文件分布太野路子 此时我们需要自己订制软件包的需求 我们会把一些源码包按照我们的需求来做成rpm包 其中的Spec文件是制作RPM包的核心 下面我们以制作NGIN
  • 数据库的三大范式及其重要性,详细易懂

    目录 一 前言 二 三大范式 2 1 第一范式 1NF 列不可再分 2 2 第二范式 2NF 主键关系 2 3 第三范式 3NF 外键关系 三 为什么要遵循三大范式 一 前言 数据库是现代信息系统中的核心组成部分 它的设计和优化对系统的性能
  • 8421码

    8421码是中国大陆的叫法 8421码是BCD代码中最常用的一种 在这种编码方式中每一位二值代码的1都是代表一个固定数值 把每一位的1代表的十进制数加起来 得到的结果就是它所代表的十进制数码 二进制 1 1 1 1 十进制 8 4 2 1
  • 【vue】Failed to resolve component: van-cell If this is a native custom element, make sure to exclude

    问题描述 写vue引入vant组件遇到的问题 Failed to resolve component van cell If this is a native custom element make sure to exclude it f
  • 【华为OD机试真题2023 JS】取出尽量少的球

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 取出尽量少的球 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 某部门开展Family Day开放日活动 其中有个从桶里取球的游戏 游戏规则如下 有N个容量一样的小
  • 使用truss、strace或ltrace诊断软件的"疑难杂症"

    作者 李凯斌 2005 01 18 11 03 24 来自 IBM DW中国 进程无法启动 软件运行速度突然变慢 程序的 Segment Fault 等等都是让每个Unix系统用户头痛的问题 本文通过三个实际案例演示如何使用truss st
  • 安卓大作业 图书管理APP

    系列文章 安卓大作业 图书管理APP 文章目录 系列文章 1 背景 2 功能 3 源代码获取 1 背景 本次实验设计的是一个图书管理系统 系统的整体目录如下 2 功能 针对于每个java类或者Activity进行说明 1 Book java
  • 最坏的时刻已经过去,静待重新走向繁荣

    今年三 四 五 六 七月份 每周客户拜访数量一直比较低 期间和客户 友商 用户持续交流 大家普遍感受到今年特别难 难于上青天 可是 我和老家做小老板亲戚朋友沟通 他们的感受没那么明显 只是觉得今年比往年差些 没一二线城市感受那么明显 进入八
  • Cloud Native和微服务

    一 Cloud Native介绍 Cloud Native是Matt Stine提出的一个概念 它是一个思想的集合 包括DevOps 持续交付 Continuous Delivery 微服务 MicroServices 敏捷基础设施 Agi
  • linux实例显示blocked,(11)ceph 告警:1 slow ops, oldest one blocked for

    1 ceph告警提示 1 slow ops oldest one blocked for email protected ceph s cluster id 58a12719 a5ed 4f95 b312 6efd6e34e558 heal
  • Ubuntu与Windows系统之间进行远程访问和文件的传输

    Ubuntu16 04系统之间和ubuntu与Windows10之间进行SSH远程访问和文件互传 一 Ubuntu 系统之间进行文件互传 传输的是文件夹 传输的是文件 二 ubuntu与Windows10之间进行SSH远程访问和文件互传 补
  • bugku 文件包含2

    页面很正常 url里面有一个file参数 看一下源码 有一个upload php看一下 文件上传 题目是文件包含 就想到了前面做的的上传图片马 用文件包含连接 试一试 不知到哪里出问题了 看一下上传的内容
  • python 美国总统身高统计与分析

    美国总统身高统计与分析 1 安装依赖 2 下载数据集 3 数据处理 4 结果展示 1 安装依赖 pip install pandas pip install numpy pip install matplotlib 2 下载数据集 链接 h
  • PHICOMM路由器无线扩展的设置方法(吐槽一下)

    家里使用的是电信宽带 电信光纤猫有两个网口 网口1直连家里的电视 网口2连接了一部TPLINK路由器 设置了无线wifi 供家里的手机使用wifi 最近在卧室新增了一台台式电脑 用来在家里业余时间学习的 从客厅到卧室距离不长 但是因为家里面
  • 了解以及区分物理机,虚拟机(hypervisor/VMM) 和 容器(Docker)的适用场景

    了解以及区分物理机 虚拟机hypervisor VMM 和 容器Docker的适用场景 Abbreviations 物理机和虚拟机以及容器的区别 动机motivation 为什么要有虚拟机 物理机 虚拟机 容器 虚拟机的种类以及他们的本质区