基于容器技术的应用系统部署
2021-03-04顾伟
顾伟
关键词:容器技术;内网;镜像
一、部署内网镜像仓库并导入镜像
由于内网服务器不能访问外网资源,内网服务器将无法下载Docker官方镜像仓库hub.docker.com中的镜像文件,因此需要在内网中搭建一台镜像仓库服务器便于各个应用系统部署容器。Docker公司已将镜像仓库Registry服务代码开源,并在hub.docker.com网站提供Registry的docker镜像,因此可以非常方便的使用容器方式部署镜像仓库。
1.1安装docker服务
在使用命令“yum install docker”安装docker服务;
1.2 下载Registry服务镜像
在一台可以访问外网并装有docker服务的Linux系统上运行“docker pull registry”命令,系统将下载最新的Registry服务镜像:
1.3 导入镜像
导入Registry服务镜像到内网服务器:使用“docker save -o registry.tar registry”命令将Registry服务镜像导出为registry.tar文件,拷贝文件到内网的10.89.2.110服务器上,再运行“docker load --input registry.tar”命令将Registry服务镜像导入到本地服务器。
1.4 创建https证书
创建https证书:由于Registry服务默认需要使用https,因此需要使用“openssl req -new -x509 -days 35600 -nodes -out ./web.crt -keyout ./web.key”命令创建网站证书,
1.5 创建并启动Registry服务容器,推送镜像到仓库
使用命令“docker tag docker.io/镜像名 10.89.2.110/镜像名 ; docker push 10.89.2.110/镜像名”可以将从外网导入的各个镜像推送到10.89.2.110镜像仓库中,在其他服务器就可以使用“docker pull 10.89.2.110/镜像名”拉取需要的镜像了。
二、使用Docker Compose部署应用的示例
以某部门基础资料台账库项目为例,该项目使用NextCloud开源网盘系统作为文件存储、同步、共享的资料库,部署在一台CentOS Linux服务器上。NextCloud开源网盘系统由MariaDB数据库服务和NextCloud应用服务组成,需要部署对应的容器。完成该应用系统的部署需要如下几个步骤:
2.1 安装Docker与docker-compose
使用命令“yum install docker docker-compose”安装docker服务和docker-compose工具;
2.2 创建工作目录和容器配置文件
在数据盘上创建工作目录,并在工作目录里创建docker-compose.yml容器配置文件。容器配置文件定义了容器镜像名称、版本号、数据卷的挂载目录、容器的环境变量、对外提供服务的端口等配置项。
2.3 创建并启动容器
容器配置文件中指定了两个容器镜像——MariaDB:10.3和NextCloud:18.0.3,均是由官方开发人员制作,然后上传到hub.docker.com公共镜像仓库服务器以供所有人免费使用。由于服务器不能访问外网,本项目部署前已将两个镜像导入自建的内网镜像仓库服务器10.89.2.110中。此时,在工作目录里执行“docker-compose up -d”命令,docker-compose将从内网镜像仓库拉取镜像文件到本地服务器,并以镜像为模板,按照容器配置文件中的定义自动创建并启动两个容器。
三、使用Kubernetes实现无状态应用的负载均衡与高可用的示例
在Kubernetes中,创建了Service对象后,会自动对匹配的容器实现负载均衡;创建Deployment对象后,会自动对匹配的容器实现高可用机制。以在四台服务器组成的Kubernetes集群上部署三个nginx服务并实现负载均衡和高可用为例,通过容器和对象配置文件nginx-guwei.yaml创建一个Deployment对象、三个nginx容器和一个Service对象,访问集群服务ip,Kubernetes系统会自动轮询三个nginx容器,并返回所在容器的IP地址;删除一个nginx容器,系统会自动重建一个nginx容器,使nginx容器的数量始终保持为三。步骤如下:
3.1 创建nginx-guwei.yaml配置文件
在文件中定义对象与容器名称、容器副本数量、镜像名称与版本号、nginx容器的主页内容、对外提供服务的端口等配置项。
3.2 创建并启用对象和容器
执行“ kubectl apply -f nginx-guwei.yaml”命令创建容器和对象,查看容器和对象信息可以发现,kubernetes已经创建了一个名为“guwei-web”的Deployment对象、三个名称前缀为“guwei-web-5bb7bc98bc-”的nginx容器(分别运行在三个服务器上)和一个名为“guwei-lb-ha”的Service对象。
3.3 测试自动负载均衡
使用curl命令多次访问集群IP:192.168.239.90 ,系统会以轮询的方式返回三个nginx容器的IP,这证明系统已经自动实现了轮询方式的负载均衡
当前,各个公司正大力推进私有云的落地部署工作,其使用的主要底层技术就是基于Kubernetes的容器化技术,能够有效减少资源的消耗,降低运维的复杂度,规范应用系统部署,提升信息系统的质量。因此基于上述原因和容器技術的优势,有必要在公司范围内开展应用系统容器化部署,从而节约IT投入成本、提升信息系统的运维能力。
参考文献:
[1]James Turnbull.The Docker Book.北京.人民邮电出版社,2016.4
[2]闫健勇,龚正,吴治辉,等.Kubernetes权威指南:从Docker到Kubernetes实践全接触(纪念版).北京.电子工业出版社,2017.9