虚拟机是云计算的核心技术之一,也是目前云主机的主要实现方式。除了虚拟机,容器也在云计算中应用得越来越多。那么容器与虚拟机到底有什么区别?

容器化技术的起源

目前容器技术的代表就是Docker,很多人认为容器将取代虚拟机,成为云计算的主流技术。说到Docker,就要从Docker的底层技术LXC(Linux Container)说起。

与VMWare为代表的虚拟机技术不同,LXC是在操作系统层面为进程提供虚拟的运行环境,而不是通过硬件抽象层来对硬件进行虚拟化。VMWare虚拟机是面向操作系统的,而LXC是面向进程的。

LXC提供的虚拟运行环境就是容器,操作系统可以为容器分配资源,包括特定比例的cpu时间、IO时间,内存,外设访问控制,并提供独立的命名空间(namespace)。

LXC的实现是靠Linux内核在资源管理和隔离控制方面的相关特性。

  • LXC在资源管理方面依赖于Linux内核的控制组(cgroups)子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。

  • LXC在隔离控制方面依赖于Linux内核的namespace特性,命名空间可以让进程与进程之间,用户与用户之间彼此看不到对方。

Docker与LXC的关系

Docker 是 PaaS 提供商 dotCloud ,也就是后来的Docker公司,开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。

Docker 是一个开源的应用容器引擎,让开发者可以打包应用到一个可移植的容器中,然后发布到Linux 机器上。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker基于Linux的LXC技术,可以认为是LXC的上层封装。当然除了容器以外,Docker还包括了镜像管理的功能。从资源管理角度来说,Docker基于LXC,LXC基于cgroup。

1

Docker与LXC的关系

容器与虚拟机的比较

2

虚拟机与容器的对比

以VMWare公司产品、KVM等为代表的虚拟机技术,是通过对硬件的抽象来实现的。关于硬件抽象的原理,可以参考前文《云计算IaaS的核心技术:虚拟化技术》。

以Docker为代表的容器技术,是操作系统层面的虚拟化技术。与HAL(硬件抽象层)层面的虚拟化技术相比,有以下区别:

  1. 虚拟化开销。由于利用了Linux内核提供的LXC特性,所以容器的虚拟化开销更小。传统虚拟机要先创建虚拟机,然后安装操作系统,最后部署应用。

  2. 镜像文件。由于容器镜像不需要包括Guest OS,只需要包括应用及其依赖包,因此镜像文件更小。

  3. 部署。传统的虚拟化技术则需要先创建虚拟机,然后安装系统,再部署应用。容器利用LXC相关命令,可直接创建并启动应用的运行环境。

  4. 跨平台。由于底层基于LXC,所以Docker必须基于Linux系统搭建。虚拟机管理程序Hypervisor可以运行在不同的操作系统上,甚至直接运行在裸机上。

关注中国IDC圈官方微信:idc-quan 我们将定期推送IDC产业最新资讯

查看心情排 行你看到此篇文章的感受是:


  • 支持

  • 高兴

  • 震惊

  • 愤怒

  • 无聊

  • 无奈

  • 谎言

  • 枪稿

  • 不解

  • 标题党
2019-07-31 12:13:13
云资讯 京东云发布《私有云&混合云白皮书》 构建客户想要的云平台
伴随着人工智能、大数据、物联网等技术的不断发展,以及5G时代的来临,企业IT系统的云化成为大势所趋。客户多样化、个性化的应用需求对云厂商提出更多要求。 <详情>
2019-07-31 10:31:00
边缘计算 企业必须进入云端吗?可以进入边缘计算
如今物联网的应用越来越广泛,但需要具有企业的视角。这意味着垂直行业应用程序、开发生态系统、产品设计、硬件、部署等。 <详情>
2019-07-31 10:19:00
云资讯 谷歌牵手VMware将虚拟化工作负载引入谷歌云
彭博社报道称,谷歌与VMware正在展开合作,帮助企业更轻松地在Google Cloud Platform上运行VMware vSphere虚拟化软件和网络工具。 <详情>
2019-07-31 09:52:00
云资讯 谷歌与戴尔旗下云计算公司VMware建立新合作 试图追赶竞争对手
据国外媒体报道,当地时间周一,谷歌宣布与戴尔旗下的云计算公司VMware建立新的合作伙伴关系,帮助更多企业迁移到云端,从而试图追赶其竞争对手。 <详情>
2019-07-31 09:10:00
云技术 云计算时代,硬件为什么仍然非常重要?
加利福尼亚大学圣迭戈分校采用了“云优先”的战略,他们淘汰了三台大型机、将尽可能多的计算工作负载转移到云端、尽可能放弃内部部署软件,转而使用软件即服务。 <详情>