APP下载

基于Docker的计算机应用快速部署系统的设计

2018-01-29蒋少华陈德健蔡裕源唐丽蓉张灿源

韶关学院学报 2017年12期
关键词:镜像虚拟化容器

蒋少华,陈德健,蔡裕源,唐丽蓉,夏 楠,张灿源

(韶关学院信息科学与工程学院,广东韶关512005)

随着大数据、云计算的兴起,人们对网络的依赖越来越强,巨大的网络业务随之卷土而来,这既是机遇也是挑战,快速拓展互联网业务成为很多公司的核心战略.若业务容量超过预期,需要在一个新的操作系统再重新部署一次软件环境,传统业务部署的流程总是需要经过开发人员部署软件环境→测试运行→排错→再测试运行→再排错→业务上线,整个过程消耗至少3天,耗时耗力,不利于公司的良好发展.

Docker是一个近几年兴起的,开源的应用容器引擎,它重新定义了程序的开发、测试、交付以及程序的部署过程,开发人员可以打包自己的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化[1].每个运行的容器与容器之间,是相互隔离的,没有任何接口,完全使用沙箱机制,类似i-Phone的各个应用之间的关系[2].性能开销接近于零,可以很容易地在机器和数据中心中运行.Docker还有不依赖任何语言、框架或包装系统的优点[3].

Docker引擎创建的容器进程伸缩性强,用户可以方便、快捷增删容器,数秒内就可以完成操作.用户通过对Docker容器的优化配置,大大地减少了资源的浪费,降低资源成本,提高数据中心的利用率,使服务器资源得到最有效的利用[4].现今市场上己有各种比较成熟的PaaS(Platform-as-a-Service)平台,例如:国外谷歌的Google App Engine,微软的Windows Azure Platform,国内百度的百度应用引擎Baidu App Enginee(BAE),阿里的阿里云Aliyun Cloud Enginee(ACE)等.

针对传统业务部署出现的软件交付困难,产品上线困难等问题,设计了基于Docker的计算机应用PaaS服务模式平台,可以有效实现工程快速构建、环境迅速部署、平台便捷管理等功能.

1 系统设计功能要求

Docker技术快速部署系统需要完成的模块与主要功能为:

(1)服务器虚拟化:利用kvm对服务器进行虚拟化,可以极大地提高服务器的利用效率,虚拟机之间隔离性比较好,就好像每台独立的物理机,相互之间不会有影响.

(2)Docker容器集群:通过部署一个Docker容器集群,达到业务上的负载均衡,有效避免单点失效的灾难,提高了系统的可靠性和安全性.

(3)Docker储存驱动更换:DockerEngine的存储驱动有loop-lvm和direct-lvm两种配置模式,其中loop-lvm是默认的模式,由于官方明确不推荐使用该模式用于生产环境,在生产环境下应该使用direct-lvm驱动配置模式.

(4)Ceph集群:Ceph是一个强大稳定的分布式文件存储系统,可以通过部署分布式文件系统,给Docker提供储存块RBD,实现Docker的rootfs也跑在网络存储之上,打造一个无本地磁盘的容器服务系统.

(5)本地私有镜像库:常用的镜像可以自己写Dockerfile自动生成,并且储存在本地的镜像库,当需要的时候就可以直接拿来用,无需占用外网资源,而且Docker hup官网服务器在国外,进行镜像拉取速度很慢,本地镜像库可以实现镜像资源自给自足,节省大量的时间和网络资源.

(6)gitlab版本控制器:基于Docker的计算机应用快速部署平台作为一个PaaS服务模式的平台,需要给开发者提供一个本地的代码托管平台,提高开发团队的协同开发效率,用户在开发好项目的同时可以立即利用快速部署平台测试,同时开发者也可以在gitlab上进行自动化构建.

(7)shipyard容器集中管理平台:在shipyard平台上,用户可以比较直观地看到容器的情况,而且可以直接在浏览器页面上对容器进行增删查改的工作,通过web页面了解和管理业务,对于技术人员或者非技术人员都方便操作.

2 系统方案的设计

系统方案设计包括集群设计、集群管理、业务管理3部分[5].系统利用Docker技术将应用标准化,实现资源的最大利用,节省应用部署时间.

Docker集群主要采用层次结构模型,整套结构设计见图1.首先,需搭建部署开发环境:为了节省资源,提高开发效率,采用最小化Linux系统安装(即没有图形界面的纯命令行系统);其次,在这些环境下利用kvm虚拟化技术,对系统、网络进行虚拟化;然后进行Docker集群的设计,利用ansible自动化运维工具,对各个虚拟子系统进行自动化管理,再通过安装Docker服务,在Docker上构建registry、gitlab等服务的镜像和容器,并且打通Docker hub,方便用户对Docker服务的使用;最后利用shipyard技术对各个节点以及其容器和镜像进行web界面管理,采用强大的rethinkdb数据库对数据进行相关管理[6].

采用层次结构有两个特点:①业务隔离:业务互相隔离,层次清晰;②故障定位快速:当发生故障时,可以根据故障原因快速定位故障点.

集群管理采用树形拓扑结构(见图2),集群管理结构有两个优点:①业务易于伸缩.这种结构可以延伸出很多分支和子分支,这些新节点和新分支都能容易地加入拓扑内;②故障隔离较容易.如果某一分支的节点或线路发生故障,很容易将故障分支与整个系统隔离开来.

业务管理主要采用web页面对容器进行管理,所有在系统上的业务都可以通过web页面来进行管理,响应用户操作,并且收集日志方便问题排查.页面采用JS进行编写,框架采用AngularJS.

采用AngularJS有两个优点:①自定义Directive,比jQuery插件还灵活,封装容易;②模块化设计可以很容易的写出可复用的代码,对于敏捷开发的项目非常有帮助,业务流程见图3.

图1 集群设计结构

图2 集群管理结构

图3 业务管理流程图

3 Docker技术快速部署系统应用测试

3.1 Docker技术快速部署系统响应测试

用shell编写一个自动化测试脚本进行比对测试,具体脚本如下:

#!/bin/bash

function handle()

{start=$(date+%s%N)

start_ms=${start:0:16}

#输入要执行的代码或脚本

dockerstart f999dc296f34>/dev/null end=$(date+%s%N)

end_ms=${end:0:16}

echo"open the containercost time:"

echo"scale=6;($end_ms-$start_ms)/1000000"|bc}

handle.

物理机、虚拟机测试脚本:

#!/bin/sh

#ip为对应的物理机或虚拟机的ip

#把脚本放在容器测试脚本里面运行即可

ping-i 0.1-c 1 192.168.1.116>/dev/null

while((1==$?));

do

ping-i 0.1-c 1 192.168.1.116>/dev/null

done.

当测试开启同样版本的一个centos纯命令行系统的响应时间,结果如下:Docker容器只用了1.56 s,物理机上耗时21.31s,在虚拟机上耗时33.74s,从测试数据来看,Docker的响应时间远远少于其他虚拟机,测试结果见图4.

当测试开启同样版本的一个centos纯命令行系统的镜像大小,结果如下:Docker容器只有198 MB,而物理机和虚拟机的系统镜像都要4 096 MB,资源占用较大.Docker容器、物理机和虚拟机测试比对结果见图5.

从测试结果看,Docker容器有响应速度快,占有资源小的优点;物理机或虚拟机系统坏死需要重装时也比较麻烦,耗时较多,而Docker引擎删除和重建一个容器仅需一条命令,非常快捷,用在商业上,可以快速应对业务的伸缩,可以省时省资源.

3.2 基于Docker的web集群测试

测试通过利用负载均衡技术,将客户的请求负载均衡地分配到各个不同的web节点中,从而大大提高了web服务器的可靠性和安全性,使其在高并发的访问下可以持续地提供服务,避免宕机.在本地web服务器和Internet之间架设反向代理服务器,可以阻止用户请求对web服务器的直接访问,而且它会自动承担对原始web服务器的静态页面请求,将服务请求按照预先配置的负载均衡策略分配给不同的Docker容器,以防止服务器过载,保护业务的安全性和稳定性.web集群服务器通过容器的快速响应部署,可以给业务的弹性伸缩带来了极大的便利.web集群框架图见图6.

图4 Docker容器、物理机、虚拟机的响应速度测试结果

图5 Docker容器、物理机、虚拟机对比

图6 web集群框架

测试方案模拟中小型公司的网站业务进行,在Docker集群中部署相同业务的网站(为了验证负载均衡的效果,设计中每个网站的内容会不一样),进行均衡负载.首先利用Dockerfile把需要的网站镜像快速构建好,镜像基于Ubuntu14.04,网站中部署好Nginx反向代理服务器,并且做好负载均配置.在不同的Docker节点中部署相同配置的网站,在宿主机上部署Nginx反向代理服务器,设置ip域名映射,采用平均策略的负载均衡,把Internet对宿主机web请求的访问量以轮询的方式分配给web集群中所有服务器,使得所有服务节点同时承担外界对服务器的访问,分解访问压力.访问用户在自己的客户端设置web主机的域名解析,即可在浏览器上输入域名访问了.

实验测试结果见图7.当访问主服务器的时候,web请求会将访问压力以轮询的方式平均分配给每个服务节点,保证了公司业务的可靠性和稳定性.通过使用Docker容器技术,在设计的快速应用部署系统下,该web集群应用可以进行快速的部署和拓展,符合当下很多公司应对互联网业务快速变化的需要,具有良好的应用前景.

图7 web集群测试效果

4 结语

系统利用Docker技术可以实现快速部署所需的应用系统,以最小的时间代价和成本代价快速完成繁琐的环境部署工作,大大缩短了开发周期和部署时间,可以实现用最低的成本创造最大的效益,解决了传统互联网业务拓展时间普遍较长的问题.系统简单、快速,满足IT开发公司、企业、学校实验室快速构建开放、测试和产品环境等各种需求.

[1]张忠琳,黄炳良.基于 openstack 云平台的 docker应用[J].软件,2014,35(11):73-76.

[2]张建,谢天钧.基于Docker的平台即服务架构研究[J].信息技术与信息化,2014(10):131-134.

[3]刘思尧,李强,李斌.基于 Docker技术的容器隔离性研究[J].软件,2015,36(4):110-113.

[4]吴义鹏.基于容器虚拟化技术研究[J].软件,2010,31(11):28-30.

[5]刘琳羽,南凯.一种基于Docker的开发者服务平台设计[J].科研信息化技术与应用,2015,6(5):65-72.

[6]郑玲,江萌.基于Docker弹性调度架构的研究[J].电脑编程技巧与维护,2016(23):15-17.

猜你喜欢

镜像虚拟化容器
容器倒置后压力压强如何变
镜像
难以置信的事情
基于OpenStack虚拟化网络管理平台的设计与实现
镜像
对基于Docker的虚拟化技术的几点探讨
H3C CAS 云计算管理平台上虚拟化安全防护的实现
存储虚拟化还有优势吗?
取米
镜像