张世超
摘要:针对爆炸式增长的应用系统数量与不断攀升的运维经费间的矛盾,基于Docker技术迁移应用系统至容器,实现网络隔离,搭建多应用集成,并与Vmware虚拟机进行对比分析。
关键词:Docker;Vmware;容器
中图分类号:TP391 文献标识码:A 文章编号:1007-9416(2020)02-0101-02
在以往的年代,每台服务器运行单个应用系统,现在如果依然采用这种模式,服务器数量将呈爆炸式增长,运维成本不可想象,日常工作中通常购买比实际需求更好的服务器来满足性能和日后升级需要,最终导致很多服务器计算资源大部分时间处于空闲状态,这是一种极大的浪费,为了解决上述问题,陆续诞生了VMware虚拟机和Docker容器。
1 Docker与VMware
VMware虚拟机在硬件层面上实现虚拟化,Docker容器是在操作系统层面上实现的虚拟化。Docker共享宿主机硬件资源和操作系统,无论运行多少容器都共享一个操作系统,VMware虚拟机依赖操作系统,有多少个虚拟机就需要运行多少操作系统。容器节省大量系统资源,如CPU内存和存储,同时还能节省操作系统许可证开销,以及为操作系统打补丁等运维成本[1]。
2 Docker容器多应用集成实现
这里用市面上使用率最高,最具代表性的的LAMP(Linux+ Apache+PHP+Mysql)举例说明实现步骤,使用其他语言或者数据库需选择其他对应镜像构建容器,具体用法及设置略有不同。
2.1 安装Docker
系统选用Centos8(由于客观条件限制,是在Win10系统上用VMware架设的)。
按照官方手册安装依赖包。
yum install-y yum-utils device-mapper-persistent-data lVmware2
更新源(也可以自己修改国内镜像源)。
yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装并启动Docker-CE。
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
如果出现podman-manpages-1.4.2-5.module_el8.1.0+ 237+63e26edc.noarch错误则需要先yum remove删除后再安装Docker-CE,如果出现containerd.io版本过低,先升级containerd.io,或安装时加入—nobest参数。
2.2 构建容器
创建多个网络,每个应用使用单独网络与其他应用系统隔离。
docker network create -d bridge app1
docker network create -d bridge app2
……
使用镜像运行多个应用容器和数据库容器,映射容器端口到宿主机,例如把容器80端口映射到宿主机10001端口,分配各个专用网络及挂载持久化资源。
docker run --name app1 -p 10001:80 -v /var/docker/app1:/var/www/html --network app1 -d php:7-apache
docker run --name db1 -p 20001:3306 -v /var/docker/db1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= 123456 --network app1 -d mysql:5.7
进入PHP容器安装连接Mysql必需组件,这里安装需要连接数据库的mysqli和pdo_mysql。
docker exec -it app1 bash
cd /usr/local/bin
./docker-php-ext-install mysqli pdo_mysql
退出容器回到宿主机,重启容器。
exit
docker restart app1
其余几个系统也参照上述步骤构建容器,如果遇到容器无法互访请配置防火墙或者关闭防火墙。
systemctl stop firewalld.service
这里举例构建应用和数据库容器各5个,一共10个容器模拟日常运行的5个应用系统。
2.3 配置系统
运行容器时使用-v参数挂载持久化数据,把系统文件放置在宿主机/var/docker/xx目录下,如容器app1使用的应用文件放置在app1文件夹下,对应的数据库db1使用文件放置db1下,其他配置文件和日志文件也可使用多个-v参数挂载在相应位置。完成各个系统配置后通过宿主机上映射的端口访问系统,如访问app1就输入宿主机IP地址:10001/应用目录,数据库地址为宿主机IP地址:20001。
3 性能对比
用VMware架设5台Centos服务器,分别安装与Docker容器里一樣的应用及数据库,通过容量、资源利用率、多并发数测试和系统启动时间分析优缺点。
3.1 镜像容量
如表1所示,对比测试实验VMware镜像大约比Docker镜像多占5倍空间。
3.2 资源利用率
VMware虚拟机5台,每台分配内存2G,平均使用率70%,每台分配CPU2个核心,空闲时使用率1%,比Docker容器消耗了更多内存在运行VMware操作系统。Docker宿主机分配内存10G,内存平均使用率60%,CPU使用率0%。VMware主机内存16G,内存平均使用率87%,CPU使用率3%,由此可见Docker资源利用率更佳,本次测验VMware部署5个应用已经接近极限,而Docker运行20个容器模拟10个应用依然比VMware消耗更少内存,如图1所示。
3.3 多并发测试
使用ApacheBench的ab -c 5000 -n 50000命令对VMware和Docker的同个系统进行并发数5000总数50000并发测试,Docker容器80%响应时间小于57ms,但是有10%响应时间大于3s,VMware虚拟机50%请求响应时间230ms,其余至少响应超过1秒,可见高并发高访问的情况下,Docker比VMware性能更胜一筹,如表2所示。
3.4 系统启动时间
Docker容器啟动时间大约2秒,VMware虚拟机因为需要启动整个Centos系统,启动时间大约1分30秒,在遇到问题重启系统或者日常维护时,Docker可以更快上线。
4 结语
本次多应用集成搭建中使用Docker容器技术迁移多个应用系统至一台服务器,迁移过程快捷方便,仅需要一些命令就可以完成环境部署,比以往单服务器单应用模式节省大量时间及数台服务器购买资金,如果应用操作系统是windows,还能节省windows许可证费用,日常维护和操作系统补丁升级工作量也大大减少,甚至跟VMware相比也毫不逊色。
通过使用Docker容器合理利用资源,实现了单台服务器运行多应用系统的目标。以本单位现有情况,安全稳定性要求较高的核心应用大约占40%,其余是要求较低的非核心应用,如保持核心应用不变,把非核心应用全部迁移至Docker容器,可以减少一半服务器数量,节约大笔经费,降低运维人员工作量。
参考文献
[1] Nigel Poulton.深入浅出Docker[M].北京:人民邮电出版社,2019.
Construction of Multiple Application Integration Based on Docker Container
ZHANG Shi-chao
(National Radio and Television Administration 731 Station, Longyan Fujian 364000)
Abstract:In view of the contradiction between the exploding number of application systems and the rising maintenance cost, migrate applications to containers based on Docker technology, achieve network isolation, build multi-application integration, compare and analysis with VMware virtual machine.
Key words:Docker;VMware;container