APP下载

Docker技术在气象云平台服务中的研究

2020-10-21杨永毅赵芳赵思亮

机械制造与自动化 2020年5期
关键词:镜像虚拟化容器

杨永毅,赵芳,赵思亮

(重庆市气象信息与技术保障中心,重庆 401147)

0 引言

近年来重庆市气象局开始进行虚拟资源池建设,截至目前为止,已创建并分配虚拟机300多个,多个气象业务平台由物理服务器移植到虚拟机。虚拟资源池的建设,实现了硬件资源的集中式管理、集约化分配,提高了资源的利用率。

当前出现了多种虚拟化技术,包括VMware vSphere、KVM、Docker等。其中VMware vSphere是一个虚拟化平台,将CPU、存储和网络资源等聚合为一个虚拟资源池,并使用统一的软件,创建和运行虚拟机和虚拟设备[1]。然而随着虚拟资源池规模的不断扩大,VMware vSphere性能损耗高,体量占用大,迁移扩展复杂等弊端逐渐凸显。KVM是一个开源软件,基于内核的虚拟化技术,实际是嵌入系统的一个虚拟化模块,虚拟机使用Linux自身的调度器进行管理[2]。KVM与Linux内核集成,运行速度快,但KVM需要CPU中虚拟化功能的支持,只可在具有虚拟化支持的CPU上运行[3],对硬件环境要求较高。而Docker技术将应用程序与基础架构分离,以管理应用程序相同的方式来管理基础架构。本文拟使用Docker技术中的容器发现发布、进程隔离、弹性伸缩,计算环境迁移等功能,解决气象云平台服务中遇到的虚拟化问题。

本文通过对Docker技术的深入剖析,结合重庆市气象局实际业务环境,提出了Docker技术在气象云平台服务中的应用方法。并根据提出的方法,搭建了一个MySQL数据库容器,实现了Docker技术在气象服务中的应用。

1 Docker技术研究

Docker是2013年由美国dotCloud公司开源的一个基于LXC的高级容器引擎,其源代码托管在Github上。Docker使用go语言开发,并遵从Apache2.0协议开源。Docker容器引擎让开发者可以打包应用及依赖包到可移植容器中,容器可发布到任意版本的Linux服务器上,容器是完全使用沙箱机制,相互之间没有任何接口[4-7]。

1.1 Docker与虚拟机技术比较

传统方式的虚拟机是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。每套虚拟系统都需要配置,软件环境也需逐一安装部署,缺乏灵活性。Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统。从资源占用上来说,更加轻量级;从应用上来说,针对容器的虚拟移植性更强,灵活性更高[8]。Docker与传统虚拟机技术的区别如图1所示。

图1 传统虚拟方式与Docker对比

1.2 Docker架构研究

Docker采用的是Client/Server架构,客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个Host上,客户端也可以通过socket或REST API与远程服务器通信。Docker机制包括Image(镜像)、Container(容器)和Repository(仓库)。Docker镜像类似于虚拟机镜像,为只读模板,包含了文件系统。容器是从镜像创建的运行实例,可启动、开始、停止、删除,而容器间是相互隔离,独立进程的。镜像是创建容器的基础,仓库是Docker集中存放镜像文件的场所[9-10]。Docker架构如图2所示。

图2 Docker系统架构

2 Docker在气象云平台中的应用研究

根据气象云计算的资源共享层次,气象云平台可以划分为3层:IaaS(基础设施即服务)、PaaS(平台即服务)和SaaS(软件即服务),如图3所示。IaaS的发展以虚拟机为最小粒度资源调度单位,PaaS在IaaS基础上发展而来[11]。随着气象业务越来越复杂,出现了资源浪费、调度困难、标准不统一等问题,而容器技术可以解决以上问题。本课题依托重庆市气象局现有的信息环境,提出Docker技术在重庆气象云平台的应用方法。

图3 IaaS、PaaS、SaaS分类

2.1 Docker在气象微服务中的应用

重庆市气象局从2007年开始建立重庆市气象信息共享服务接口系统,采用SOA架构,通过服务接口的方式提供数据共享服务,同时规定新建气象信息系统必须遵循SOA标准。

Docker非常适合SOA的微服务架构,每一个单独的Dockerfile代表一个微服务,这些微服务与SOA架构的传统服务不同。传统的服务通常是整体性的,模块化和重用化困难,微服务则专注于体量小、重用性高的组件,尽可能与运行环境独立。Docker提供服务的隔离,可以部署在多种环境执行微服务。基于Docker容器的部署,可以进一步深化SOA的气象微服务架构,提高整个系统架构的可移植性、可扩展性、可编排性。

2.2 Docker在气象系统开发环境中的应用

在重庆市气象局实际的气象系统开发中,大多是基于虚拟机来完成。开发测试环境以及生产环境需要多次安装与部署,包括应用服务器、数据库服务器、中间件服务器等。配置工作重复繁琐,需要花费大量时间。同时,由于配置的一致性问题,开发环境搭建失败的案例时有发生。

基于Docker的虚拟化技术,可将气象开发环境虚拟成多个镜像,集中管理。同时可以定制各种开发所需的个性镜像及容器。Docker的快速部署能力,降低了环境部署的时间消耗,缩短了系统开发周期。轻量级的容器部署,减少了系统资源的消耗,同时又充分保证了不同开发环境的独立。

2.3 Docker在气象系统弹性部署中的应用

在实际业务中,气象系统的弹性部署大多依赖于人工。系统管理员根据气象系统的资源使用率、并发量、系统性能等监控信息,进行气象系统的横向扩展。这种被动的系统扩张,容易造成资源的浪费,并且随着系统规模的不断增长,系统间的复杂度不断增加,气象系统维护的工作量激增。

基于Docker的容器虚拟化技术,具有轻量级、灵活、启动快速的优点,非常适合气象系统的弹性部署。结合Kubernetes等调度和编排技术,使得Docker集群易于部署、维护和扩展。Docker提高了系统资源的使用率,增加了系统并发处理能力,从而实现了气象系统的弹性伸缩。

2.4 Docker在气象云多租户中的应用

提供气象业务多租户服务是气象云平台最重要的功能。使用Docker,可为租户应用层的多个实例创建隔离环境。将虚拟机和Docker技术相结合,可以增强不同租户、不同安全需求容器间的隔离性,同时避免强隔离带来的性能损失。租户租用容器云平台的资源,用以气象应用服务的托管、开发、部署运维。容器云平台为租户提供服务注册、服务发现、服务配置、监控、预警告警、负载均衡等功能。

3 测试分析

为了验证Docker技术在气象云平台服务中的可行性,本文选用气象服务中最常用的数据服务作为测试用例,使用Docker技术在云资源中搭建一个MySQL容器,提供气象数据服务。与传统虚拟机提供的数据服务相比较,测试基于Docker技术的气象数据服务的性能。

本文使用两个CPU16核,内存32G的虚拟机进行测试,一个直接在系统中安装MySQL数据库,一个在系统中安装Docker容器,然后在容器中安装MySQL数据库,Docker的搭建流程如图4所示。

图4 Docker搭建流程

Docker搭建的具体步骤如下:

1) 在虚拟机中安装Centos 7.0系统,为Docker的运行提供环境支持。安装完成后,进行环境变量的设置。

2) 配置yum源仓库,通过yum源下载Docker安装包。yum源仓库配置如下:

[dockerrepo]

name=Docker Repository

baseurl=https://yum.dockerproject.org/repo/main/centos/7/

enabled=1

gpgcheck=1

gpgkey=https://yum.dockerproject.org/gpg

yum源仓库配置完成后,执行#yum install docker-engine命令,进行Docker的安装。

3) 启动Docker,运行命令service docker start,测试Docker是否正常运行,运行命令docker run hello-world,正常运行情况如图5所示。

图5 Docker运行示例

4) 连接Docker公共仓库下载MySQL镜像,Docker公共仓库默认为Docker Hub镜像仓库。使用命令进行镜像的搜索和下载:

#docker search mysql

#docker pull mysql

5) 下载镜像后,检查本机安装的镜像和本机运行的容器,使用命令:

#docker s

#docker ps -a

6) 启动MySQL容器,本文在1台虚拟机上启动了2个MySQL容器,用以测试容器的性能,2个容器的启动命令如下:

#docker run --name mysqltest1 -v /home/mysqltest1/conf/my.cnf:/etc/my.cnf -v /home/mysqltest1/logs:/logs -v /home/mysqltest1/data:/mysql_data -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

#docker run --name mysqltest2 -v /home/mysqltest2/conf/my.cnf:/etc/my.cnf -v /home/mysqltest2/logs:/logs -v /home/mysqltest2/data:/mysql_data -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

启动容器后,使用#docker ps查看容器运行状态。

完成Docker容器搭建后,本文分别向虚拟机上的MySQL实例和Docker容器中的MySQL数据库写入气象自动站小时观测数据,写入数据量为10万条和100万条。测试结果如表1所示。

表1 Docker容器写入测试结果

通过测试,可以发现基于轻量级数据库,Docker容器和虚拟机的入库效率相当,而Docker资源利用率更高,系统启动速度更快,移植性更高,更适合气象云平台的服务要求。

4 结语

本文引入的Docker容器在操作系统层面上实现了虚拟化,复用本地主机的操作系统,更加轻量级。实验证明,与虚拟机相比,容器在启动速度、复杂度、并发性、资源利用率等方面均优于虚拟机。在气象云服务平台建设中,可以根据实际业务确定适用场景,将虚拟机和容器有机地结合起来,有效提高平台的可用性、可靠性以及伸缩性。后期气象云服务平台会逐渐形成数量庞大且关系复杂的容器集群,可以使用Kubernetes容器编排技术进行容器集群的资源管理、调度以及负载均衡,进一步提高气象云服务平台的计算服务能力。

猜你喜欢

镜像虚拟化容器
Different Containers不同的容器
镜像
难以置信的事情
基于OpenStack虚拟化网络管理平台的设计与实现
镜像
对基于Docker的虚拟化技术的几点探讨
虚拟化技术在计算机技术创造中的应用
存储虚拟化还有优势吗?
取米
镜像