欢迎访问《电源学报》杂志社官方投稿处 投稿咨询:

主管单位:国家海洋局

主办单位:中国电源学会;国家海洋技术中心

国际标准刊号:2095-2805

国内统一刊号:12-1420/TM


版权信息

联系我们

 
基于Docker的虚拟化技术研究

 

摘要: 软件程序的部署是网络管理人员面临的重要课题,随着互联网技术的快速发展,软件程序不断增加,这些问题愈发明显,作为一种轻量型的虚拟化策略,Docker可以对大规模应用程序进行快速开发、测试、应用和更新。本文对Docker的关键技术进行了分析,并与其他虚拟技术进行了比较,对Docker的有点和不足进行了分析,并对其应用场景进行了讨论,对Docker虚拟化技术的研究和应用有一定的参考意义。
 关键词:Docker;虚拟化技术;优势
一 概述。
如今,云平台已经逐渐成为应用程序部署的主流,虚拟化是云平台建设的核心元素,虚拟化技术的价值日渐明显。对IT资源的集中部署和抽象化从而完成用户的共享,使资源的利用率大幅提高,硬件的使用成本大幅降低,另外,精简的软件层插入到物理层和用户操作系统层之间,使两层的耦合度降低了,软硬件兼容问题得到缓解。如今,最重要的虚拟化技术非虚拟机技术莫属,虚拟机技术使高隔离度和标准化得以实现,但同时给宿主服务器造成了极大的运行压力。大规模的虚拟机部署造成大量的重复内存分页在宿主计算机上生成,一方面导致宿主机资源的大量占用,使得虚拟机的运行速度缓慢。在需要应用快速部署的场景下,则要求开发适宜的虚拟化技术。作为一种容器级的虚拟化技术,Docker虽然还存在一些不足,但在隔离性、资源占用以及启动速度方面具有较大优势。通过对Docker关键技术的分析,本文得出了Docker虚拟化技术和其他常规技术相比的主要优势,并讨论了Docker主要的应用场景。
二 Docker技术的简介。
作为一种高级容器引擎,Docker的核心部件是LXC,Docker进一步封装了LXC,可移植性和标准化得到了提高,其开发语言为go,规范遵循开源规范Apache2.0。作为一种轻量级的虚拟化技术,LXC技术可以同时使多个Linux系统在一个宿主机操作系统上运行。在隔离技术上,其处理器、存储器、内存、I/O设备网络设备等通过cgroups技术完成隔离,LXC建立了一个拥有独立网络空间和进程的虚拟环境,因此,可以确保在单一节点运行的数个容器同时运行的同时保持高隔离性。作为容器级的虚拟化技术,其与常规的虚拟化技术相比是轻量级的虚拟化技术,促使虚拟化的目标和资源的占用得到平衡,同时还具有启动迅速的优势。[1]
容器和镜像是Docker的两个重要概念,容器是Docker建立的虚拟环境,是一个独立的Linux环境,其在功能上等同于一个完整的Linux环境。镜像和虚拟机的镜像类似,利用Docker镜像可以将构建的容器进行还原。基础镜像基础的操作对象,可以进行应用的安装、环境变量的配置。从而构建需要的镜像,则可以通过镜像还原出另一个相同的环境。
Docker虚拟化的隔离性和资源控制。
隔离性是虚拟化技术的关键要素。Docker虚拟化技术没有通过将中间层插入到硬件和操作系统之间实现隔离,虚拟环境以容器的形式在宿主主机操作系统运行,因此,其隔离性取决于宿主机支持的隔离特性。Linuix内核的namespace实现了Docker容器的隔离,容器的网络空间、进程、用户以及文件系统利用pid、mnt、uts、net等进行了隔离。在容器中的用户进程都是lxc-start的子进程,pid namespace实现了用户进程的隔离,不同的namespace的进程号可以相同。不同namespace空间中的进程不能相互影响,从而实现容器中进程的独立性。
namespace来说,在保证容器良好隔离的同时,限制管理容器资源。利用namespace实现了个容器对外视角的独立,但实际上各namespace之间在宿主机内部看还存在竞争,存在宿主机资源的争夺,当有大量应用部署时。必然会有资源请求冲突的的情况发生,防止单一容器占用过多资源,从而使容器需求得到平衡,成为亟需解决的问题。同时,云平台IT资源按需使用和费用统计的实现,离不开资源的标准化计量和分配。[2]
Docker的资源控制功能通过Linux的cgroup技术达成。Linuix的内核技术cgroup可以对进程的物理资源进行记录、隔离和限制。在cgroup出现之前,系统中已经存在分立的进行资源管理的子系统,而cgroup实现了各种子系统的整合,为资源管理提供了标准的框架。
Cgroup的功能主要有:
(1)限制资源。对每个进程的资源分配数量进行限制,例如,通过内存子系统对进程组的内存上限进行分配。
(2)设定优先级。指定进程的优先级,当容器出现资源抢占的情况时,宿主机根据进程组的优先级和优先级算法进行资源的分配。
(3)对资源的使用率进行记录。对容器的资源使用量进行记录对云平台来讲,不仅用于标准化度量从而实现计费等服务,同时也是平台管理的重要举措。例如,在某两个时刻对容器的CPU的使用时间进行读取,若使用时间和两个时刻的时间差接近,则可以得出,在这一时间段内应用可能出现了死锁现象,应当提起注意。
(4)控制进程组。比如当某容器或应用有死锁现象发生时,可以对这一进程采取中断操作,从而实现其运行进程的恢复。
以上的cgroup功能是Docker进行容器资源管理的基础、
实现移动性。
移动性是采用特定手段将所构建的环境进行方便的还原。LXC在设计初期缺乏对移动性的考虑,可移植性严重不足,不能利用标准化的镜像进行虚拟容器的复制建立,而Docker通过AUFS技术的映入实现了LXC的进一步封装,使容器快速移动和更新的问题得到很好的解决。
AUFS把在路径不同的文件挂载到同一虚拟文件系统,并该虚拟文件系统的某个目录设为不同的权限。在AUFS中的分层机制,通过对制度权限的分支采取逻辑修改的方式,而不会对只读部分产生影响。Docker应用AUFS技术进行容器镜像的构建,首先加载根文件系统,并将其权限设定为只读,系统检查完成以后,在根文件系统上加载一个可写的文件,从而使只读的根文件系统和可写的文件系统形成了容器的运行目录。[3]利用AUFS技术,容器修改可读层只会在可写层中进行而不会对只读层造成影响,从而只读层可以被多个容器共享而不会出现冲突,这个只读层就是镜像。
Docker的优点。
Docker作为一种新型的虚拟化技术和常规的虚拟机相比优势比较明显,主要表现有:
(1)技术轻巧。在常规的虚拟机技术中,由于所有的环境都对全套的物理硬件进行了虚拟,并对操作系统进行了完整的装载,因此,在虚拟机的大量部署时会存在众多的内存分页,这构成了虚拟机资源占用的主要原因。[4]而Docker的容器对宿主机的内核进行了共享,避免了为所有容器进行加载,如图5.1所示,这样使系统的内存空间得到大大节约,同时也使系统的启动速度大大提高,在虚拟机大规模应用时,秒级别的启动时间优势会非常明显。
图5.1 虚拟机和Docker的结构图
(2)环境适配问题得到彻底解决。Docker使环境适配问题得到完美解决,该虚拟化技术知识一种进程级的,但却提供自给自足的容器,具有完整独立的运行空间,只要将Docker安装到系统中,并使用需要的镜像,就能建立系统和搭载的应用和配置完全相同的环境。
(3)无特定状态的虚拟化技术。Docker中的容器没有特定的状态,只要镜像不做改动,当用户对容器进行重启操作时,容器就会恢复到镜像创建时的状态,这一特点在某些场合极具优势。
Docker的应用。
1 软件开发/测试环境的快速构建。软件的开发/测试环境的构建十分复杂,众多的软件需要安装配置,尤其当环境升级或者开发环境规模增长时,重复性的工作会使整个工作流程的效率异常低下。Docker的应用会使这一情况得到改观,只要制作一份合格的Docker镜像,使用该镜像就可以就可以还原出多个相同的环境,从而使工作效率大大提高。
2 大量标准化应用的快速部署。应用本身如今已经逐渐成为整个系统的中心,大量标准化的应用常常需要在场景中部署,同时还要求隔离性较好。快速部署不仅包括方便的配置管理,从而对环境依赖问题进行解决,同时还包括快速的启动速度。采用常规的虚拟机技术,虚拟机的启动典型值可达几分钟,当部署的虚拟机数量较多时,将会耗费大量时间。而Docker启动时间以秒为单位,其时间优势巨大,非常适合大量应用的快速部署,尤其在标准化后,利用脚本可以使应用的部署更加简便。
结论
Docker作为新型的虚拟化技术,依靠其性能损耗小、启动速度块和可移植性强等优越的性能表现出极大的相对优势,但是这并不代表Docker目前可以完全替代现有的虚拟机技术。Docker和传统的虚拟机技术相似之处很多,但是Docker在本质上是一种面向应用的虚拟化技术,应用是Docker的中心,轻巧的结构适合数量庞大的应用进行快速管理和部署,以及环境的还原。而面向架构的虚拟机技术,IT资源的抽象是其初衷,对物理资源进行抽象和标准化,因此虚拟机和Docker的应用场景不是完全相同的。在今后的发展中,虚拟机和Docker技术可以作为不同层面的虚拟化技术配合使用。但可以想象,在应用逐渐成为市场中心的未来,Docker将得到更加广泛的应用。
参考文献:
[1]曾平.国内云计算研究现状与未来[J],电脑与信息技术,2014(1):41-45.
[2]俞烈化陈学兵系统虚拟化技术研对J].电子世界,2013^2):8-9.

[3]浙江大学SEL实验室.Docker容器与容器云[M].北京:人民邮电出版社,2015:325-327[4]陈伯龙,程志鹏,张杰著.云计算与Open Stack(虚拟机Nova篇)[M].北京:电子工业出版社,2013:190-193