为何弃用虚拟机?Docker容器技术有何不一样?

2019-06-11 17:25发布

在实际的软件开发过程中,我们需要多的环境:如开发环境、测试环境、沙箱环境、自动化环境、预发环境、生产环境……这么多的环境要如何维护呢?是一台机器部署一个应用,还是一台机器部署多个应用?多个应用之前又要怎么隔离呢?这时候就需要使用到虚拟化技术了。

最早的虚拟化技术是虚拟机,所谓虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。这个听起来有些绕口,其实就是通过软件的隔离,让你的电脑能够同步安装多个完整的计算机系统,这里说的软件比较有名的就是VMWareOpenStack,通过VMWareOpenStack,我们在原来的电脑中模拟出一台甚至多台“子电脑”出来。这些子电脑可以是Mac、windows、linux中的任意系统、任意版本,只你软件支持且你能找到镜像。在“子电脑”里,你可以和正常电脑一样运行程序,例如打开word。各个子电脑之间的软件硬件都是相互隔离的,互不影响的。

虚拟化有哪些优势?

虚拟机能够让一台机器像多台机器一样运行,这意味着您需要的服务器更少,并且还可以最大限度地利用您拥有的服务器。这种效率的提高能够节省硬件、冷却和维护成本。借助虚拟化,我们可以在同一台机器上运行多种类型的应用、桌面和操作系统

弃用虚拟机

但今天我们要说的是,我们要弃用虚拟机,投入容器化的怀抱,为何?LXC,就是Linux容器虚拟技术(Linux container),它是Docker容器技术的基础,Docker轻量级的虚拟化,虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动慢。而容器技术恰好没有这些缺点,它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。

传统虚拟机在硬件层面上实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统,而Docker容器是在操作系统层面上实现的虚拟化,直接利用本地主机的操作系统,因此更轻量。

Docker容器本质上是宿主机上的一个进程。Docker 通过命名空间实现了资源隔离,通过 cgroups实现了资源的限制,通过写时复制机制(copy-on-write)实现了高效的文件操作。能够实现更快速的交付和部署;更高效的虚拟化;更轻松的迁移和扩展;更简单的管理。

举个简单的例子:传统我们盖房子需要木料、水泥、砖头……,需要选好施工地,并请工人来进行一定时长的工作。等下次我们需要在一个新的地方重新盖房子,就又要重新来一次。Docker将已经盖好的房子,通过魔法背包打包成镜像,里面只是房子模型,没有任何的实际生活用品以保证轻量,等到了一个新的地方,我们只要取出背包中的镜像,房子就还原回来了,想要什么房子就用什么镜像,实现“Build once,Run anywhere(搭建一次,到处能用)”。

好了,本期就介绍到这,更多知识我们下次再讲。

文章来源: https://www.toutiao.com/group/6701128926611112451/