传统虚拟机和容器的对比

容器和虚拟机有什么不同呢?谈谈两者的比较吧

首先来了解一下容器发展简史

在没有docker的时候,大家什么时候听到了容器这个概念?大家一定学过一个技术叫sprint,经常念到sprint容器,请问sprint容器放的是什么东西?是不是多个bean啊?每个bean达成业务功能小扳手,完成工作。

 现在到了我们的docker,根据前面的介绍,它又能放一些什么东西呢?静态的web网址、用户的数据库,前端,消息中间件队列,以及动态数据源等等。docker几乎可以把前面统统替代,我们需要明白的就是,docker是一种容器虚拟化技术,我在开发环境,把我能够运行的源码、配置、第三方依赖插件放到集装箱里面,然后,运送的时候,拉出去,跑到docker上面运行,你箱子上面装的是什么,打开的时候依旧是什么,井井有条,依法运行。不会进去的时候装只猫,出来的时候跳出一只鸭,这是不可能的。

所以这,我们有必要了解传统虚拟机所学过的VMware和我们先在说讲的容器虚拟化技术他们两者到底有什么样的关联?

虚拟机(virtual machine)就是带环境安装的一种解决方案。

它可以在一种操作系统里面运行另一种操作系统,比如在Windows10系统里面运行Linux系统CentOS7。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。

 传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如:VirtualBox和VMware等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用。

 

虚拟机的缺点:

1.资源占用多 2.冗余步骤多 3.启动慢

首先,如果我要启动一个虚拟机实例的话,从我点一些配置信息,到最后弹出登录界面,输入用户名和密码,这样一套操作下来没个三五分钟是启动不了的,非常慢。

其次,这么一个iso文件,是模拟了整套操作系统,从内核、硬件、软件确确实实带环境安装了,绝对没有任何问题,但这个太猛了,基本上非常大,所以说就会导致,你这个虚拟机一开、启动慢、占用资源又多,所以说一般用java写程序的程序员,开了虚拟机,又开了IDEA在做微服务的编码,没有个16G的内存是跑不动的,所以说这是它的三个明显缺点

有这个痛点以后,我就思考,我现在传统的话,比方说centos7跑在一个虚拟机上面,假设三台虚拟机ABC,也就是说三台centos7,没问题,确实是环境什么的弄过来了,比如说我在A上跑redis,在B上跑mysql,在C上跑MongoDB,这时候大家想一个问题:我们可不可在这上面省点功夫,偷接耍滑一下

 

 如果我们有一种思想A是redis,在B是mysql,C是MongoDB,那么现在,确实是3个不同的软件实例。但他们都跑在一台CentOS7上面,我是不是可以节约很多资源和成本,换句话说,如果我可以复用一个CentOS7,在上面同时跑ABC,不要再启动另外两个虚拟机,只用最小巧的Linux必须的内科支撑我的软件。这样是不是就可以步子比较轻,负担比较小,启动比较快啊。

 

 基于此,容器虚拟化技术解决的就是传统虚拟机技术的痛点。

由于前面虚拟机存在某些缺点,Linux发展出了另一种虚拟化技术:

Linux容器(Linux Containers,缩写为LXC)

Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并且该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因此在开发到测试再到生产的整个过程中,它都具有可移植性和一致性。

简单来说,在这块小巧的Linux必须支撑的内核我尽量少的加载,用的到的我才加载,其效果就是Linux容器不是模拟一个完整的操作系统,现在我们传统的虚拟机来一个实例就是整个虚拟机搬过来,不管用不到用的到的你全给我上,现在我只想运行一个跑在Linux环境上的一个redis实例,这样就可以用到Linux容器技术。

Linux容器不是模拟一个完整的操作系统而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

 Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。

 

比较了Docker和传统虚拟化方式的不同之处:

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。

  • 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

  • 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值