Docker技术在软件开发过程中的具体运用
2018-02-26周俊威
周俊威
摘要 文章以Docker技术在软件开发过程中的具体运用为研究对象,首先对分析了Docker技术概念及优势,随后对分析了软件开发中Docker技术的运用以供参考。
【关键词】Docker技术 软件开发 应用
1 Docker技术概述及优势分析
1.1 Docker技术概述
Docker是一个基于Linux Containers虚拟化技术的高级容器引擎,把Linux的cgroupnamespace等容器底层技术进行封装抽象,从而为用户提供了创建与管理容器的界面,其中包括命令行与API,Docker作为一个开源项目,基于Google公司推出的Go语言来实现,并遵循Apache2.0协议,而Docker技术即是一种面向云平台的虚拟化技术,开发Docker技术的最初目的是将各种应用程序和他们所依赖的运行环境打包成标准的contamer(容器)/image(镜像),从而可以在不同的平台上进行运行。而运用Docker技术最终目的即是可以管理应用组件的封装、分发、部署、运行等生命周期,从而实现应用组件级别的“一次封装,随处运行”。
Docker包含很多重要的概念,例如镜像、容器、数据卷、链接、仓库等,其中镜像类似于虚拟机的快照,但它相对于虚拟机快照来说更加轻量级,例如一个镜像可以包含一个完整的Linux操作系统环境,里面仅仅安装了Tomcat,还包含一些其他用户需要的程序。可以通过镜像来进行容器的创建。Docker容器相当于从快照中进行虚拟机的创建,其是镜像创建的运行实例,因此可以被执行创建、删除、停止、启动等操作,并且对于每个容器来说,其都是互相隔离的,从而可以确保平台的安全性。数据卷简单来说即是可供一个或多个容器使用的特殊目录,可以实现进程与数据的分离,实际上其保存在数据之外,从而可以在不影响数据的前提下执行对容器的删除、重建、修改等操作,此外,还可以在多个容器之间实现数据卷共享功能。容器的链接(linking)是除了端口映射以外,另一种和容器进行交互应用的方式,通过在源与接收容器之间创建一个通道,用于接收容器可以看到源容器指定的信息。
1.2 Docker技术优势
在传统的软件开发方面,主要包含以下几点部署流程(仅包括纯技术部分):首先完成开发环境的搭建,需要进行Web服务器的安装、数据库的安装及网络分配,其次是相关的开发测试,需要软件程序开发人员进行编码、测试、版本管理工作,最后是上线生产,需要软件程序开发人员实现操作系统及各种硬件安装配置。主要存在以下几点问题:
(1)在开发过程中资源利用率较低;
(2)单物理机应用较多,无法进行有效隔离;
(3)软件开发运维部署不够方便;
(4)测试、版本管理过于复杂;
(5)迁移成本非常高;
(6)传统虚拟机占用的空间较大,启动较慢,并且管理方面非常复杂。
一个完整的IT系统应包括以下几个层次,分别是应用程序、运行平台( bin/framework/lib)、操作系统、硬件(基础设施)。其中软件开发人员主要负责应用程序的代码编辑、构建、测试及发布,主要涉及应用程序及虚拟平台这两层,而软件运行维护人员则涉及从硬件、操作系统、到运行平台的安装、配置、运行监控、升级、优化等工作,Docker技术的支持下,其提供了一种运行环境,从而实现了对上层应用于下层操作系统与硬件系统关联有效的隔离,使得术业有专攻,极大提升了软件开发的效率。
从虚拟化技术的角度來看,Docker与传统的虚拟化技术相比,其粒度更小、更轻量级,它不需要虚拟化硬件,也不需要即时编译与指令级模拟。对于传统的虚拟化技术来说(例如v Sphere和Hyper-V),其目标是建立一个可以执行应用的整套虚拟机;而Docker所利用的Linux容器技术则是将应用所需要的相关源码、依赖库、环境配置等进行统一打包封装,并在此基础上实现一个虚拟机的建立。Docker虚拟化技术可以对由一个单独操作系统管理的资源进行统一的划分,使得相应资源被分配到一个个孤立的组中,并使得孤立组之间资源使用需求冲突得到有效的平衡,进而大大提升了资源的利用率。在Docker技术的支持下,容器可以不需要任何特殊的解释机制,就可以在核心CPU运行本地指令,从而使得软件开发过程中半虚拟化和系统调用替换的复杂性得到了有效的降低,在运行性能方面更加接近宿主机的运行性能。
Docker在虚拟化构建方面主要基于应用组件级虚拟化技术进行,从而使得容器具有独立性和封闭性的特征,其中独立性体现为一个容器在运行时不会对其他容器或者宿主环境造成影响,各司其职。封闭性体现为每一个容器都有属于自己的存储空间、进程以及网络接口,不对外开放,除此之外,还包含Linux系统运行所需的一些应用程序。但Docker技术与传统操作系统级虚拟化技术不同,其虽然也基于容器运行,但并没有对一个完整的Linux操作系统进行完全虚拟,而只保留了应用程序运行所必需的核心操作系统环境。因此与传统的虚拟技术相比,它还具有启动时间短(秒级启动、停止)、空间占用少(一般仅几M)、分发和复制方便等优势,除此之外,还可以在普通服务器上建立上百个Docker实例,有效提升开发测试部署的速度,使得版本管理得到有效的简化,与此同时,Docker还可以快速创建并删除容器,有效实现快速迭代,使得软件开发、测试、部署时间得到很好的解决,并且,由于相应不同的步骤都有着明确的位置与操作,因此整个过程全程可见,更加有利于开发团队共同协作开展软件开发工作。此外,Docker还可以部署与扩展web应用、数据库及后端服务,例如在羊年春晚,正是由于Docker集群成功的为1.02亿用户提供了刷微博、抢红包提供了可靠地服务。具体来说,Docker容器与传统虚拟机对比差异如表l所示。
1.3 Docker的体系架构
Docker的客户端是远程控制器,对于Docker Host来说,其会收到通过TCP/REST传送来的请求,请求呈多样性变化,其中最为常见的请求包括、容器创建、容器删除、容器保存、容器运行、等。Daemon位于Docker的服务端,可以以客户端的请求为根据,对其进行管理。然后通过driver的应用可以将请求转发到Iibcontainer执行环境中,该执行环境位于容器中。libcontainer提供与各种Linux内核隔离的接口,与控制组具有一定的的相似性。在这种架构环境下,多个容器可以对一个Linux内核进行共享,而对于这些容器来说,其在运行方面又相互隔离。因此要保证Docker技术的轻量级要求得以实现,就不能在Docker容器中配置专用操作系统。
2 软件开发中Docker技术的运用
软件开发是一项复杂的工程,在很多情况下,基于种种因素影响,软件开发人员在搭建对开发环境时,总是会遇到各种问题,此时软件开发人员可以利用Docker技术作为一种轻量级的有效解决方案,Docker在功能方面与传统虚拟机类似,并且相较于传统虚拟机而言其功能更加强大,例如可以使用Docker使得多个容器同时进行运行,并且相较于与传统的虚拟机,运用Docker对CPU、磁盘、内存的消耗更低,极大提升了Docker运用到适配性。
2.1 Docker在开发环境搭建中的应用
软件开发人员在进行开发环境搭建时,可以通过应用Docker技术,使得开发环境具有良好的扩展性,与此同时,还能够有效实现磁盘内存节约。首先要完成基础的Image(镜像)搭建,然后在此基础之上,对Image进行相应扩展,从而使得不同的开发环境得以实现。在完成Image启动之后,需要把Container(容器)端口映射到主机之上,映射关系如图1所示。
在某些情况下,为了能够在host的主机中实现更加快捷便利的代码编辑,软件开发人员需要在Container中对host主机(宿主)上的目录进行映射处理,在这种情况下,软件开发人员不需要手动复制这些目录至Container上,然后通过重启完成相关操作。而是直接可以在Container中对其进行运行与编辑处理。具体的磁盘映射关系如图2所示。
2.2 Docker技术的应用架构
在进行软件开发过程中,想要成功发布一款产品,作为软件开发人员需要关注的东西非常多,从各种OS到各种中间件再到各种App,事无巨细,并且使得相应管理方面也增加了很多难度,这一问题是软件行业中普遍存在的问题,同时也是软件行业在进行软件开发时必须要直接面对的问题,在软件开发过程中通过对Docker技术的应用,其可以对多种部署应用实例工作加以简化,例如Web应用、后台应用、数据库应用、大数据应用等,具体来说,其可以将诸如Hadoop集群、消息队列等打包成一个Image进行部署工作,实际上,使用Docker部署一个应用的方法非常简单,基于Docker自身特性,很多時候我们可以使用相同的image,然后在此基础上配以不同的运行时软件和数据,在Docke作用下,其将网络,存储等相关内容都进行了自主配置,下载应用并安装。然后通过一些参数的配置,将Image进行打包上传。除此此外,Container在创建方法上更加灵动自由,其可以由程序开发人员自主手动创建,也可以由Docker自动创建,但前提条件是如果源码库里面包涵Docker File文件,此时才会自动自动创建,对于Containe来说,其作为一个容器不仅包涵相应应用,还包括应用的所有依赖项。因此开发人员可以使用诸如Docker、Search等命令,并在无论是公有还是私有的Docker Registry里对Containers进行搜索,另一方面,还可以使用诸如Docker Pull等相应命令,从注册表里对Container进行相应推送,还可以使用ockerRun命令执行启动、运行、停止等相应操作。
3 总结
综上所述,通过对Docker技术相应概念进行了分析介绍,并将其与传统虚拟机进行了性能优势对比,从中可以看出Docker技术具有显著的优势,尽管在安全性与隔离性方面Docker相较于传统虚拟机仍有待进一步提升,但仍不可否认在软件开发中运用Docker技术仍更具备优势,相信随着云计算的发展,Docker技术会得到得到更广泛的发展与应用。
参考文献
[1]高礼,高昕.Docker技术在软件开发过程中的应用研究[J].软件,2016, 37(03):110-113.
[2]段嘉腾.Docker技术在软件开发过程中的应用研究[J].中小企业管理与科技(中旬刊),2016,37 (09):152-153.
[3]钟良侃.Docker技术在Web服务系统中的应用研究[J].电脑知识与技术,2016,12 (26):123-126.