什么是虚拟化技术?

维基百科中虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存、存储,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原来的配置更好的方式来应用这些资源。通俗的讲,就是可以一台物理服务器可以虚拟成多台虚拟服务器,多台物理服务器可以虚拟成一台虚拟服务器,如我们常用的虚拟机。但是虚拟化技术有很多种,下面根据自己的了解,进行简单的概括。
完全虚拟化:虚拟机模拟完整的底层硬件环境和特权指令,客户机的操作系统无需进行修改。
硬件辅助虚拟化:利用硬件(主要是CPU)辅助支持处理敏感指令来实现虚拟化,硬件辅助虚拟化技术有Intel-VT、AMD-V,这也是我们在使用桌面虚拟化产品时,可能会要求我们在BIOS上设置打开虚拟化功能。
操作系统级虚拟化:完全依赖宿主机操作系统,内核创建多个操作系统实例来进行资源隔离。容器技术属于这个范畴。
Docker就是容器虚拟化中的一种。

虚拟化技术有什么用?

在云计算中,虚拟化技术是其中重要技术之一,目前在云计算中虚拟化技术有KVM、Xen。当你购买一台双CPU、64G内存的物理服务器时,你打算在上面跑多个独立的操作系统时,就需要用到虚拟化。当你在阿里云购买ECS时,快速创建好的系统,就需要用到虚拟化。
根据我们的使用经验,无论是自己安装虚拟机、还是购买虚拟机,都需要自己选择系统镜像,这就意味着每一个虚拟机都是相对独立的。

Docker的特点

Docker的最大特点就基于容器,是容器虚拟化技术的一种。
传统虚拟化技术与Docker比较
通过上图可以看到,Docker是在操作系统层面进行虚拟化。
在性能上比较,正是由于Docker直接复用宿主操作系统,性能更加优越。

当然,性能优越的背后也有付出的代价。就目前看来,由于Docker刚刚兴起,还存在很多安全性问题,比如虚拟机用户越权到宿主机。
简单来说,把Docker技术比喻成操作系统中的一个个相互独立的‘应用’,辅上Git的思维,‘应用’有仓库,可以下载分发、可以制作保存。就像Android APP一样,制作好之后,Android手机都可以安装使用。

Docker的适用场景

曾经遇到过这样的场景,在对CMS进行漏洞测试时,往往需要搭建测试环境,包括ngix、PHP、Mysql等,如果换台虚拟机还需要搭建环境、配置环境,很繁琐,就行软件发布流程一样繁琐,开发人员在本地环境开发、测试完成之后,交给运维,运维开始部署环境,进行测试,再上线,一旦环境更改,就需要几个部门联动。在这个过程中,我们发现,我们做了很多重复的东西。
说到这里,Docker的优势就展现出来,有人说将会改变整个软件交付流程,大大的降低运维人员的劳动强度。
只需要简单部署Docker环境之后,可以直接把本地环境打包,然后直接在另外一台机器运行。
这样看来,Docker确实可以节省重复劳动。

结束语:刚看了几本书的开头,对虚拟化技术有了轮廓,由于毕业设计的需要,会渐渐学习Docker技术。这篇文章只是自己的看法,不当之处,还请批评!