文档章节

Docker vs KVM虚拟化技术

IamOkay
 IamOkay
发布于 2017/04/03 21:41
字数 2125
阅读 342
收藏 2

虚拟化技术

      云计算是近几年的重头戏,云计算包括PaaS、SaaS和IaaS三大领域,目前国内比较强大的是PaaS和IaaS领域,SaaS最近在某些ERP公司也很火热,相信不久的将来,云ERP会成为主要增长点。

       虚拟化技术在云计算的发展起着重要的作用,世界范围内,领先的虚拟化产品包括Vmware 系列,Redhat,微软,Oracle等,其中以VMware vsphere 是vmware公司的旗舰产品最为著名,使用简单方便操作备受好评,但是价格昂贵,支撑云计算平台(主要支撑PaaS,IaaS)显然成本高昂。不过,VMWare Vsphere中的VMware Esxi(vmware hypervisor)是免费的,部署私有云是一个不错的选择。

体验Vmware Esxi请参考:体验vSphere 6之1-安装VMware ESXi 6 RC版 。 

     以上是商业虚拟化软件,虽然ESXi免费,但是其他功能组件收费,使用以上软件发展虚拟化,高昂的成本必然影响云计算的发展。既然如此,那还要什么可以替代的技术么?在Linux世界有两种免费技术可以用来实现虚拟化:Docker和KVM,当然,你可能听的最多的是Docker与openStack技术,实际上openstack用来管理KVM。

   Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,Docker基于LXC(Linux Container)技术,Linux Container容器是一种Linux内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,免费开源。

    kvm是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。 是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的linux全虚拟化解决方案。 它包含一个为处理器提供底层虚拟化可加载的核心模块kvm.ko(kvm-intel.ko 或 kvm-AMD.ko)。 kvm还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。kvm能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(ps:它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)。  在主流的linux内核,如2.6.20以上的内核均包含了kvm核心。

Docker与KVM对比

KVM虚拟化结构

Docker虚拟化结构

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。

1.     Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。

2.     容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

3.     虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行。

4.     虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis、一个memcached。

5.     传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低。

6.     传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。

7.      当然KVM对比于容器也有一个比较大的优势就是可以使用不同的操作系统或内核。所以,举例说,你可以使用微软Azure,同时运行Windows Server2012的实例和SUSE Linux企业级服务器的实例。至于Docker,所有容器都必须使用同样的操作系统和内核。

 

Docker的优势

具体说来,Docker 在如下几个方面具有较大的优势。

1 更快速的交付和部署

对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

2 更高效的虚拟化

Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

3 更轻松的迁移和扩展

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

4 更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

5 对比传统虚拟机(KVM)总结

特性

容器

虚拟机

启动

秒级

分钟级

硬盘使用

一般为 MB

一般为 GB

性能

接近原生

弱于

系统支持量

单机支持上千个容器

一般几十个

Docker在实际应用中的一些问题和局限性

  1. LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的

  2. 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库

  3. 网络管理相对简单,主要是基于namespace隔离

  4. cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是安内存收费)

  5. container随着用户进程的停止而销毁,container中的log等用户数据不便收集

另外,Docker是面向应用的,其终极目标是构建PAAS平台,而现有虚拟机主要目的是提供一个灵活的计算资源池,是面向架构的,其终极目标是构建一个IAAS平台,所以它不能替代传统虚拟化解决方案。目前在容器可管理性方面,对于方便运维,提供UI来管理监控各个containers的功能还不足,还都是第三方实现。因为容器技术本身更适于解决大规模应用场景,所以通常都是集群基础上的部署、运维,但是目前对这一系列任务的自动化处理尚无统一的或者标准的框架。如果要让Docker真正在实际环境中发挥最大的效能并且易于维护,就需要有成熟稳定的资源编排(orchestration)、资源调度(scheduling)和部署(deployment)的支持,但是这方面暂时还没有很明显的最佳解决方案,所以大多数人都在摸索和搭建自己的解决方案。

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
IamOkay
粉丝 187
博文 459
码字总数 372015
作品 0
海淀
程序员
测试环境用LXD替换掉了KVM

生命不息,折腾不止。在折腾中成长,在踩坑中进步。 前言 不错,再一次折腾了一把,这次是把测试环境的hadoop集群从KVM中迁移到了LXD容器中。目前运行很稳定,这次就来分享一下这次的体会和一...

Feng_Yu
2016/10/16
324
0
虚拟化 VS 容器化

【编者的话】以 Docker 为代表的容器技术一度被认为是虚拟化技术的替代品,然而这两种技术之间并不是不可调和的。作者分别列举了容器技术以及虚拟化技术的优缺点,并提出将两者结合取长补短的...

oschina
2015/04/24
30.1K
16
Docker虚拟化技术系列之-虚拟化入门

通俗的说,虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒,计算元件运行在虚拟的基础上而不是真实的基础上,可以扩大硬件的容量,简化软件的重新配置过程。 允许...

wgkgood
2017/02/21
0
0
docker入门(一)

docker是docker.lnc公司开源的一个基于LXC技术之上构建的container容器引(openstack是基于KVM),源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源。 docker是通过内核(linux内核...

小菜运维
2017/04/19
0
0
OVM虚拟化的目标:是要实现混合虚拟化,做一个大一统的资源管理和交付平台

纵观虚拟化市场,现在当属开源的KVM和Docker最火,我们工作过去有vmware,现在大量使用kvm,未来一定会考虑docker,但现有市场上的产品要么架构太大,开发难度高,易用性不够强,要么就是单纯的...

liang-zi
2017/08/30
103
0

没有更多内容

加载失败,请刷新页面

加载更多

首个智能运维项目开源!腾讯织云Metis,用算法替代人为指定规则

10月20日,腾讯织云Metis 智能运维学件平台在OSCAR开源先锋日上宣布,正式对外开源。Metis 是AIOps(Algorithmic IT Operations),即智能运维领域的首个开源产品。智能运维主张通过算法从海...

腾讯开源
16分钟前
1
0
Java面试170题

1、面向对象的特征有哪些方面? 2、访问修饰符public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? 4、float f=3.4;是否正确? 5、short s1 = 1; s1 = ...

lanyu96
17分钟前
0
0
利用Ant脚本生成war包

使用ant脚本前的准备 1、下载一个ant安装包。如:apache-ant-1.8.4-bin.zip。解压到E盘。 2、配置环境变量。新增ANT_HOME:E:\apache-ant-1.8.4;PATH增加:E:\apache-ant-1.8.4\bin。 3、检...

狼王黄师傅
20分钟前
1
0
优雅的写出类

前言 虽然现在已经是ES6的时代,但是,还是有必要了解下ES5是怎么写一个类的。 本文详述JavaScript面向对象编程中的类写法,并分步骤讲述如何写出优雅的类。 一、例子 例子为一个轻提示组件T...

peakedness丶
22分钟前
1
0
Python基础案例教程

一、超市买薯片 # 用户输入薯片的单价danjia = float(input("薯片的单价"))# 用户输入购买袋数daishu = int(input("购买的袋数"))# 计算总价zongjia = danjia * daishu# 输出结果...

linuxprobe16
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部