虚拟机(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.资源利用率:在资源利用率上虚拟机由于隔离更彻底,因此利用率也会相对较低。
三、容器与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