何木青
(广东茂名幼儿师范专科学校, 广东 茂名525000)
随着互联网信息技术的迅速发展和Web2.0 时代的到来,云计算也正以一种全新的商业计算模式在移动商务、搜索服务和开放协作等方面快速开展起来。 这使得广大用户可以非常便捷地开发、部署应用程序,并将这些应用程序托管于PaaS 管理的云基础设施中,不仅缩短了开发周期,而且还较大程度地降低了运维成本。 PaaS 管理的云基础设施离不开虚拟化的技术支撑,而Docker 正是与其相匹配的、虚拟化的容器型技术,它的出现使云计算的软件开发进入了一个新的时代——Web2.0 时代。 由此可见,研究Docker 技术在计算机软件开发中的应用具有极其重大的实践意义[1]。
Docker 是以Go 语言为基础的云开源项目。 是一个基于Linux Containers,LXC 虚拟化技术的高级容器引擎,在此基础上,使Docker 容器的使用体验更加优化。 可以为用户提供高效、敏捷和轻量级的容器方案,支持在本地系统和多种主流云平台(PaaS)上进行部署,为Docker 技术的应用开发提供“一站式”的解决方案[2]。
开发Docker 技术的目的,是为了将各种运行环境和应用程序打包成标准的image (镜像 )/container (容器),使它们在各自不同的平台上进行运行操作,应用分发、运行、部署、封装等生命周期,实现应用组件的一次性封装和随处运行。
在Docker 技术中涉及很多概念,诸如:镜像、容器、链接、仓库以及数据卷等等,其中镜像和容器是最重要的两个。 镜像中包含着Linux 操作系统,不仅安装有Tom cat,而且还装有用户所需要的程序;容器则是通过镜像来进行创建的,因此容器具有执行创建、停止、启动、删除等操作功能,容器与容器之间是相互隔离的,平台的安全性是有保障的。
计算机软件开发的传统流程部署过程:(1)安装Web 服务器和数据库,搭建开发环境,进行网络分配。 (2)开发人员进行测试、编码、对版本进行管理。 (3)对硬件系统进行配置安装并实现操作[3]。
传统计算机软件开发的主要缺点:(1)在开发过程中资源的利用率较低。 (2)不能对单物理机的应用进行有效隔离。 (3)不方便部署软件开发运维。 (4)是对版本的管理和测试比较复杂。 (5)传统虚拟机启动较慢,管理复杂,占用空间比较大;(6)迁移成本高。
IT 系统主要包括4 个层次,即操作系统、运行平台、应用程序、硬件。 其中:应用程序的代码编辑、发布、构建及测试,由软件开发人员负责;而硬件、操作系统以及运行平台的安装、配置和运行监控的升级、优化等则由运行维护人员负责。 在Docker 技术的支持下,该系统提供的运行环境实现了上下层操作系统与硬件系统关联有效的隔离,从而使软件开发的速度得到了极大的提升[4]。
Docker 技术与虚拟化技术进行比较,不同点有两点:(1)Docker 技术的粒度小于传统的虚拟化技术的粒度,重量更轻,而且在硬件的虚拟化、指令级模拟和即时编译方面均可省去;传统的虚拟技术的目标是建立一个能够应用的虚拟机,而Docker 技术则是将所有相关源码、环境配置、依赖库等统一打包封装,建立一个虚拟机。 (2)Docker 技术并未对Linux 操作系统进行完全的虚拟,还保留了程序运行所必有的核心操作系统,所以Docker 技术与传统的虚拟技术相比,不仅具有启动时间短、空间占用少的特点,而且还具备分发、复制方便等功能优势[5]。Docker 技术与传统虚拟技术的比较,见表1。
表1 Docker 容器与传统虚拟机性能对比差异表Tab. 1 Docker container versus traditional virtual machine performancecomparisondifference table
Docker 虚拟化技术可以大幅度提升资源的利用率。 Docker 虚拟化技术可以对某一操作系统的管理资源进行统一划分,使之分配到一个个孤立的组中,以达到有效的平衡,提高资源的利用率。
在Docker 技术的虚拟化构建方面,Docke 是在应用组件级虚拟化技术基础上的,使Docker 容器具有封闭性和独立性的特征。 封闭性主要表现为每个容器都有自己的存储空间、网络接口以及进程;独立性主要表现为当某个容器在运行时,不会因为其运行而引向其它容器,每个容器都有自己的运行职责[6]。
Docker 技术的实际应用范围广。 主要体现在:(1)适用范围除上述外,还适用于普通服务器。 (2)可以快速创建或删除容器。 (3)可以扩展与部署Web 的应用、后端服务以及数据库等。
Docker 是一个Client/Server,即C S(客户/服务器)的架构,其客户端实际上是远程控制器,它是通过TCP/REST 向Docker Host 发出请求的,请求的内容主要包括:容器创建、容器删除、容器运行和容器保存等。 其体系机构的框架结构是:由部署在Docker 的服务端Daemon,以客户端的名义发出管理请求;通过driver 转发到位于容器中的libcontainer;再由libcontainer 提供与各种不同的Linux 内核隔离接口,实现Docker 技术体系架构。 由于Docker 容器操作系统无需专用,因而它可以实现轻量级的要求。Docker 体系架构,见图1。
图1 Docker 体系构架图Fig. 1 Docker Architecture Chart
计算机软件开发是一项极为复杂的系统工程。开发人员在搭建开发环境时,会遇到各种各样的问题,然而Docker 技术的应用,却给解决这些问题带来了极大的方便。 比如,Docker 的应用,可以使多个容器同时运行,且在使用功能方面,相较于传统虚拟机而言更加强大,能够较大程度地降低磁盘、CPU、内存的消耗,提升Docker 技术运用的适配性。
运用Docker 技术进行开发环境的搭建,不仅能够使开发环境发挥出良好的扩展性能,而且还能有效地节约磁盘、内存。 搭建应用的具体步骤:(1)在完成Image (镜像)搭建的基础上,对Image 进行相应的扩展,实现不同的开发环境。 (2)完成并实现Image 启动后,把容器(Containe)端口映射到主机之上,具体映射关系如图2 所示。 (3)为了实现host主机代码的快捷编辑,在Container 中对host 上的目录进行映射处理,并通过重启完成相关操作。 (4)在Container 中进行编辑处理,具体如图3 所示。
图2 端口映射关系Fig. 2 Port mapping relationship
图3 端口映射关系Fig. 3 Port mapping relationship
在实际工作中,要搭建开发/测试环境往往比较困难,需要软件开发人员完成众多的软件安装和配置工作。 而应用Docker 技术构建开发/N 试环境,只需要制作一份符合要求Docker 镜像,即可还原出多个完全一致的环境。
对Docker 技术的实际应用,主要体现在两个方面:(1)简化了应用部署。 主要是大数据的应用、数据库的应用、后台的应用以及Web 的应用。 例如可以将消息队列、 Hadoop 集群等打包成一个Image 进行部署,在Docker 的作用下,通过配置参数,将Image 进行打包上传。 (2)Docker 技术的应用,使Container 在创建方法上更加灵活。 Container 的创建既可以手动创建,也可以利用Docker 自动创建,但自动创建的前提是,源码库里面必须包含Docker File 文件,Containe 不仅要包含相应的应用,还应包含应用的所有依赖项。 此外,还可以使用Docker Pull 等相应命令,对Container 进行相应推送,使用Docker Run 命令执行运行、启动、停止等相应操作。
本文在对Docker 技术内涵进行探讨的基础上,将Docker 技术与传统的虚拟技术进行了比较,Docker 的优势明显。 在Docker 技术软件的实际开发应用方面,其优势更是明显。 随着随着互联网信息技术的迅速发展和Web2.0 时代的到来,Docker技术一定会得到得到更加快速的发展与广泛的应用。