百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Docker vs. VM(死神vs火影玩入口)

nanshan 2024-11-15 22:48 18 浏览 0 评论


背景

各种虚拟机技术开启了云计算时代;而Docker,作为下一代虚拟化技术,正在改变我们开发、测试、部署应用的方式。那虚拟机与Docker究竟有何不同呢?

Docker

介绍

Docker是一种轻量级的操作系统虚拟化解决方案,它想达到一次构建到处运行,类似于Java虚拟机的效果,它最初诞生于2013年,是基于go语言的实现并遵从 Apache2.0 协议开源,最初是由dotCloud公司的内部一个业余项目,后来项目开源加入了Linux基金会,然后现在代码在github上进行维护。Docker的基础是基于Linux容器技术,在Linux容器技术的基础上,Docker进行了进一步的封装,让大家不去关心容器的管理,使得操作更加便捷。用户操作Docker容器,就像操作一个快速轻量级的虚拟机那样简单。



特点

首先明确技术要点,Docker技术就是基于容器的虚拟化技术,相对于其它虚拟化技术,它的特点是:

  • 轻量级:单机可以轻松支持上百Container,让各种个位数虚拟化的方案相形见绌。
  • 快速就绪:一秒以内启动,即使是以资源快速就绪著称的青云IAAS也无法相比。
  • 弱安全:Docker能够对多种OS资源进行隔离,但是它本质上依托于内核,因此所有的内核漏洞都是Docker的致命伤。


场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

逻辑视图

基础环境(In

frastructure & Host OS):所有主流的Linux发行版都可以运行Docker。对于MacOS和Windows,也有一些办法"运行"Docker。

Docker(Docker 守护进程):Docker守护进程取代了Hypervisor,它是运行在操作系统之上的后台进程,负责管理Docker容器。

各种依赖(Bins/lIBS): 对于Docker,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。

应用(App):应用的源代码与它的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同的应用运行在不同的Docker容器中,它们是相互隔离的。


VM(虚拟机)

介绍

虚拟化技术最先出现20 世纪 60 年代的 IBM 大型机系统,在70年代的 System 370 系列中逐渐流行起来.虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作,虚拟化说白了就是原本是一个完整的资源,切分或者说虚拟成多份,让这多份资源都使用起来,物尽其用,减小了浪费,提升了利用率,节省成本全球排名前五的虚拟化软件公司为:VMware微软思杰红帽Red Hat),甲骨文(Oracle)。

特点


  • 封装:虚拟机都保存在文件中,且可通过移动跟复制这些文件的方式来移动跟复制该虚拟机。
  • 相对于硬件独立:无需修改即可在任何服务器上运行虚拟机。
  • 隔离:在同一服务器上的虚拟机之间互相隔离,改变了之前单台物理机服务器只能挂以个应用的格局。 即在一个物理服务器上可以同时运行N个操作系统,每个系统中部署以个应用,这些应用可同时链接N个小时开启,且系统间互相隔离,互不影响,合理利用了服务器的硬件资源。
  • 分区:在单个物理服务器上同时运行多个虚拟机,将一个物理服务器的硬件资源分别分给多个虚拟机。

虚拟化分类

服务器虚拟化技术

基于主机的服务器虚拟化技术(Host-based server virtualization ,虚拟机)允许具有不同操作系统的多个虚拟机(Virtual Machine)在同一物理主机系统上并发运行,又可以细分为如下三类。

  • 完全虚拟化(Full virtualization):完全虚拟化提供了完整的硬件模拟,这有一个优势,即完全的虚拟机可移植性,例如,允许在Dell服务器上运行的虚拟机重新定位到HP服务器,而不会出现任何问题。代价是性能会降低,内存读写大概损失2%,网络和硬盘I/O大概损失8%~20%。
  • 半虚拟化(Paravirtualizaton):虚拟机中的Guest操作系统需要重新编译,让其知道处于虚拟化环境中,以便可以和 Host 操作系统或者VMM/Hypervisor协调工作。可以通过两种方式来实现半虚拟化:1)重新编译操作系统内核,这需要操作系统品牌商提供和半虚拟化环境兼容的OSbuild;2)安装半虚拟化的内核模式驱动,通过安装半虚拟化的内核模式存储和网络驱动,可以有效降低硬盘和网络读写延迟(从完全虚拟化的8%~20%降到2%)。
  • 硬件辅助虚拟化( Hardware-Assisted Virtualization ):英特尔和AMD都积极致力于使其处理器实现虚拟化,意识到虚拟环境的存在,CPU可以直接和VMM/Hypervisor交互,让其运行在Ring-1,这样一来,Guest操作系统可以运行在Ring0,从而不需要借助于VMM/Hypervisor的Trap中断来执行特权指令,极大降低了特权指令的执行延迟。在提高处理性能的同时,通过分配不同的硬件地址空间给虚拟机从而在硬件层面实现有效隔离。

操作系统虚拟化技术

操作系统虚拟化以应用程序为中心,允许多个虚拟环境(VE)共享一个通用操作系统,每个环境的运行开销比完全虚拟化的主机少得多。单就内存而言,虚拟机的需求就相当大。操作系统虚拟化的另一个好处是它不需要虚拟环境中的任何驱动程序或完整硬件仿真。这允许虚拟环境中的I/O以接近本机的性能运行。由于VE作为应用程序外壳运行,它们提供了与VM相同的可移植性,不需要依赖于主机系统硬件(但是必须都在Linux操作系统上)。安全性和隔离性不如虚拟机(操作系统提供的应用级别隔离),单就这一点,容器技术无法替代虚拟机技术。

逻辑视图

基础设施(Infrastructu

re):它可以是你的个人电脑,数据中心的服务器,或者是云主机。

虚拟机管理系统(Hypervisor):利用Hypervisor,可以在主操作系统之上运行多个不同的从操作系统。有支持MacOS的HyperKit,支持Windows的Hyper-V、Xen以及KVM,以及VirtualBox和VMWare workstation。

客户机操作系统(Guest OS):假设你需要运行3个相互隔离的应用,则需要使用Hypervisor启动3个客户机操作系统,也就是3个虚拟机。这些虚拟机都非常大,也许有700MB,这就意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们还会消耗很多CPU和内存。

各种依赖(Bins/Libs):每一个客户机操作系统都需要安装许多依赖。如果你的应用需要连接PostgreSQL的话,则需要安装libpq-dev;如果你使用Ruby的话,应该需要安装gems;如果使用其他编程语言,比如Python或者Node.js,都会需要安装对应的依赖库。

应用(App):安装依赖之后,就可以在各个客户机操作系统分别运行应用了,这样各个应用就是相互隔离的。


总结

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

两者虽然都属于虚拟化的技术,目标都是为了将一套应用程序所需的执行环境打包起来,建立一个孤立环境,方便在不同的硬件中移动,但两者的运作思维截然不同。简单来说,常见的传统虚拟化技术如vSphere或Hyper-V是以操作系统为中心,而Docker Container技术则是一种以应用程序为中心的虚拟化技术。 传统虚拟化技术从操作系统层下手,目标是建立一个可以用来执行整套操作系统的沙盒独立执行环境,习惯以虚拟机(Virtual Machine)来称呼。而Docker Container技术则是直接将一个应用程序所需的相关程序代码、函式库、环境配置文件都打包起来建立沙盒执行环境,为了和传统虚拟化技术产生的虚拟机区分,Container技术产生的环境就称为Container。

相关推荐

小白初学linux之无法修改系统分辨率

/*此文是做为自己的一个总结还有就是最好也可以给大家提供一些帮助。*/时间:2020年7月14日11:28:41我安装的是Ubuntu20.04LTS,昨天处理的是,grub的引导问题,因为是...

Ubuntu 如何启动、停止或重启服务

在本文中,我们向您介绍在Ubuntu中启动、停止和重启服务的方法。列出Ubuntu中的所有服务在开始之前,先获取计算机上所有服务的列表,因为我们需要知道服务名称来管理服务。service--...

Win11学院:如何在Windows 11上使用WSL安装Ubuntu

IT之家2月18日消息,科技媒体pureinfotech昨日(2月17日)发布博文,介绍了3中简便的方法,让你轻松在Windows11系统中,使用WindowsSubs...

Linux安装中文输入法-Google拼音输入法,搜狗输入法

主要步骤,选择适合自己的尝试:1)卸载之前没装好的搜狗输入法。@:~/Downloads$sudoapt-getremovefcitx*删除依赖库@:~/Downloads$sudoap...

Ubuntu 22.04 请谨慎使用搜狗输入法,可能是你当机原因

在Ubunutu下没有什么有名的输入法,也就听说搜狗输入法有Linux版本,所以特意到官网去找了下载。在Ubuntu新版本里,他仍然用的是fcitx框架的输入引擎,而不是默认的ibus,所以要先把i...

前钢后胶!徐工XMR403VT小型压路机有点意思

【第一工程机械网原创】在越来越注重施工品质,对项目管理越来越精细化的今天,施工方在施工设备选择上,也越来越讲究设备的配套分工,因此小型压路机的应用场景也越来越多。徐工XMR403VT小型压路机高度集...

图大明白 | 404错误为什么是Not Found?为什么是404?

“404错误”大家都不陌生吧?常规来讲它长这样或者长这样艺术一点的长这样404NotFound意思就是所请求的页面不存在或者已被删除被称为“互联网最后一个界面”有很多同学发出疑问:为什么是404?...

Nginx负载均衡安全配置说明2(nginx负载均衡部署)

上一节,我们对Nginx安全配置的几个知识点做了一个说明,例如限制IP访问、文件目录禁止访问限制、需要防止DOS攻击、请求方法的限制和限制文件上传的大小这个进行了一个分析说明,详细的文章请关注我的头条...

惊艳写真系列第403期,本期主人公—叶青

惊艳写真系列第403期,本期主人公—叶青制作不易,欢迎各位看官提供宝贵意见。如果您喜欢记得关注,么么哒。您的每一份点赞和关注都是对作者的最大认可(图片素材均来源于网络,如有侵权联系删除。)本篇是写惊艳...

先秦布币之尖足布、圆足布、方足布,今年圆足最高拍卖价16万一枚

在战国魏、韩地区诞生桥足平首布、锐角平首布之后,赵也诞生了尖足平首布,并且在尖足布的基础上,后来相继派生出了圆足布、三孔布,以及类圆足布和类方足布。一尖足布尖足布是从耸肩尖足空首布演变而来的,是黄河...

403 禁止访问错误的全面排查与解决方案

当遇到403Forbidden错误时,意味着服务器已接收并理解请求,但拒绝执行访问操作。以下从用户端、服务器端等多个维度,提供分步排查与解决方法。一、用户端基础排查1.检查URL准确性确认...

这才是2019年夏最高颜值的泳装(2019夏季泳装秀)

最近的天气是越来越热了,又到了暑期泳衣勇闯海滩的时刻了,打开ins,微博满满地都是各大博主晒的泳装照,明星们也纷纷跑到海边去度假了。虽然我们没有超模般地身材,但是到了海边我们也要成为人群中最亮眼的那颗...

朋友圈爆火!这组《衡中班主任的一天》漫画,感动了无数人!

很多人觉得做老师很轻松他们说有些老师一天一节课就下班了有双休,还有寒暑假,真让人羡慕呀······但事实真是这样吗?最近衡水中学的赵心扬同学画了一组漫画形象地还原了衡中班主任一天的生活那么衡中班主任一...

国家安全教育 | 一组漫画,带你走进国家安全!

当前,我国面临哪些安全威胁?下面带你来看一组漫画!①你要配合,注意保密。我绝不对别人讲。②这件事,千万别对别人讲。③咱单位的…喂!老k!你要当心,有风声了!④你的泄密行为已触犯了国家法律!①请你协助了...

400、403、404、405,访问网页时出现这些代码是什么意思?

今天小泽访问一个页面时,出现了403,很抱歉,您的访问请求被禁止的提示。相信经常用电脑访问网页的朋友都遇到过这种情况,有的网页提示错误代码403,有的提示404,那这些代码都代表了什么呢?有什么含义呢...

取消回复欢迎 发表评论: