虚拟机、容器与Docker

虚拟机(Virtual Machine)与容器技术(Container)都是虚拟化技术,两者的区别在于虚拟化的程度不同。

我们常常把Docker与容器联系在一起,但请注意:Docker≠容器

Docker是一款开源的Linux软件,基于容器技术的工具。Docker不是虚拟化技术,它的作用是帮助用户使用已经内置到操作系统中的容器技术。

下面我们将介绍虚拟机与容器之间的区别,以及Docker软件。 

 

一、虚拟机与容器

虚拟机与容器的区别,在于vm多了一层guest OS,虚拟机的Hypervisor会对硬件资源也进行虚拟化,而Container会直接使用宿主机的硬件资源。

下面我们采用形象的比喻区分两者的隔离级别:

服务器:比作一个大型的仓管基地,包含场地与零散的货物——相当于各种服务器资源。

虚拟机技术:比作仓库,拥有独立的空间堆放各种货物或集装箱,仓库之间完全独立——仓库相当于各种系统,独立的应用系统和操作系统。

容器:比作集装箱,操作各种货物的打包——将各种应用程序和他们所依赖的运行环境打包成标准的容器,容器之间隔离。

 

二、虚拟技术对比

1.隔离性:在隔离性上面,由于vm对操作系统也进行了虚拟化,隔离的更加彻底。而Container共享宿主机的操作系统,隔离性较差。

 

2.运行效率:由于vm的隔离操作,导致生成虚拟机的速率大大低于容器Container生成的速度,因为Container直接利用宿主机的系统内核。比如openstack能够以10台/min的速度创建虚拟机,而Container可以做到在几秒钟之内创建大量容器,它们的启动速度是在数量级上的差距。

 

3.资源利用率:在资源利用率上虚拟机由于隔离更彻底,因此利用率也会相对较低。

因为虚拟机增加了一层虚拟硬件层,运行在虚拟机上的应用程序在进行数值计算时是运行在Hypervisor虚拟的CPU上的;另外一方面是由于计算程序本身的特性导致的差异。虚拟机虚拟的cpu架构不同于实际cpu架构,数值计算程序一般针对特定的cpu架构有一定的优化措施,虚拟化使这些措施作废,甚至起到反效果。

三、容器与Docker

Docker不是一种编程语言,也不是构建软件的框架。Docker是一个工具,可以帮助解决如安装、拆卸、升级、分发、信任和管理软件等常见问题。它是一款开源的Linux软件。

Docker包括一个命令行程序(CLI)、一个后台守护进程和一组远程服务。它解决了常见的软件问题,并简化了安装、运行、发布和删除软件。

这一切能够实现都是通过使用一项UNIX技术——容器

 

1.容器的由来

从历史上看,UNIX风格的操作系统都使用 jail  这个术语来形容一个修改过的运行时环境,以防止该程序访问受保护的资源。这个运行环境,自2005年Sun的Solaris 10 和 Solaris容器发布以后,容器已经成为首选的术语。这个运行时环境——容器,作用已经从防止对受保护资源的访问,扩展到隔离所有的资源,除非明确允许

 

2.容器与Docker

容器的使用已经是很长一段时间的最佳做法。但是手动创建容器,具有挑战性,且很容易出错。

Docker的出现解决了容器技术的使用问题:任何使用Docker运行的软件其实是在一个容器内运行。Docker使用现有的容器引擎,用户可以更方便地获得容器。具体体现在你无需去关心容器本身,这样就可以免去接触容器技术的复杂性,直接使用容器技术的优势。这样节省了大量的时间、精力以及金钱,就能够使用强大的容器技术。



参考链接

  • https://www.zhihu.com/question/48174633/answer/109868326 by water Cc
posted @ 2018-05-11 18:04  mithrandirw  阅读(4872)  评论(0编辑  收藏  举报