❤️ ×
各类单机,绅士游戏不断更新:https://www.acghua.com/
网站地址

Docker技术之Docker—Compose研究

摘 要:软件产品的传统部署与维护一直是困扰技术人员的难题。随着公司业务的不断拓展,软件产品的部署与更新不断增加,该问题更加突出(部署步骤繁琐,耗费大量的人力财力)。本文通过研究Docker容器技术,运用Docker-Compose技术与Shell脚本结合对公司软件产品进行了升级改造,简化了安装部署与维护。同时将其运用于公司软件产品的研发、测试、部署与产品迭代(业务平台升级)。

关键词:Docker容器;Docker-Compose;Linux系统

中图分类号:TP31 文献标识码:A 文章编号:2096-4706(2018)10-0075-03

Abstract:The traditional deployment and maintenance of software products has always been a puzzle for technicians. With the continuous expansion of the companys business,the deployment and update of the software products are increasing,and the problem is more prominent(the tedious deployment steps,a large amount of manpower and financial resources). Through the research of docker container technology,docker-compose technology and shell script are used to upgrade the software products of the company and simplify the installation and maintenance. At the same time,it is applied to RD,testing,deployment and product iteration (business platform upgrade).

Keywords:docker container;docker-compose;Linux system

0 引 言

Docker-Compose的前身Fig是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用通常由多个容器组成。使用Docker-Compose,不再需要使用Shell脚本来启动容器。Compose通过一个配置文件管理多个Docker容器,在配置文件中,所有容器通过Services来定义,然后使用Docker-Compose脚本来启动、停止和重启应用,和应用中的服务以及所有依赖服务的容器。非常适合组合使用多个容器进行部署、开发和测试的场景。本文主要研究内容为Compose架构设计基于Docker的镜像制作和Compose编排启动设置。

1 Compose的架构设计

Compose在Docker中扮演着部署工具的重要角色。在Compose中,可以使用YAML文件来配置应用服务。然后只需要一个简单的命令,就可以创建并启动配置的所有服务。Compose主要分为三个模块:Image、Service和Software,架构图如图1所示。

(1)Service,在Service中自定义Docker-Compose.YAML和Env(Shell脚本)配置文件。定义用户需要Compose所完成的任务,根据自己的实际需求增加修改参数配置。一个Service包含的内容无非是用户对服务的定义。定义一个服务可以为服务容器指定镜像,设定构建的Dockerfile,可以为其指定Link的其他容器,还可以为其指定端口的映射等。Env文件是自定义参数,在Docker进行服务启动时将参数传递到容器内部,便于服务之间的交互。

从配置文件到Service,实现了用户语义到Compose语义的转换。虽然一个Service尽可能详细地描述了一个容器的具体信息,但是Compose并一定必须在Service之上管理容器,如果用户使用Docker-Compose pull服务命令,则仅仅完成服务中指定镜像的下载。除此之外,Compose的Service还可以映射多个容器,如果用户使用Docker-Compose Scale Web=3命令,则可以将Web服务横向扩展到3个容器;

(2)Software,存放需要安装的Docker相关组件,其中包含Centos7(Docker基于Centos7操作系统)系统内核更新包、Docker组件的相关离线程序包、Yum相关离线程序包,Software里面的所有依赖包都是通过严格的测试验证后的最基础的程序包。配合Shell脚本进行遍历文件安装(进行一键式安装),既简化了安装步骤,也节省了安装过程中各种依赖环境所花的时间。

(3)Image是存放Tomcat、Mysql、Mongodb、Kafka、Zookeeper、Otp_Src_R14B03、Rabbitmq-Server-Generic-Unix等软件的镜像文件,结合Shell脚本,在加载镜像时直接运行Load-Image.sh即可完成。

2 基于Docker的镜像制作

2.1 定制化镜像制作

(1)通过Docker官方仓库拉取基础操作系统

(2)安装定制软件,如Mysql,Tomcat等软件;

(3)通过Docker Commit将镜像打包;

(4)使用Docker Save生成定制化镜像。

2.2 Docker数据管理

生产环境中使用Docker的过程中,往往需要将数据持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作。

容器中管理数据主要有两种方式:

(1)数据卷(Data Volumes):容器内数据直接映射到本地主机环境;在容器内创建数据卷,并且把本地的目录或文件挂载到容器内的数据卷中;

(2)数据卷容器(Data Volume Containers):使用特定容器维护数据卷;使用数据卷容器在容器和主机、容器和容器之间共享数据,并实现数据的备份和恢复。

Docker Volume数据卷可以实现:

(1)绕过“拷贝写”系统,以达到本地磁盘IO的性能,(比如运行一个容器,在容器中对数据卷内容进行修改,会直接改变宿主机上的数据卷内容,所以是本地磁盘IO的性能,而不是先在容器中写一份,最后还要将容器中修改的内容拷贝出来进行同步;

(2)绕过“拷贝写”系统,有些文件不需要在Docker Commit打包进镜像文件;

(3)数据卷可以在容器间共享和重用数据;

(4)数据卷可以在宿主和容器间共享数据;

(5)数据卷数据改变是直接修改的;

(6)数据卷是持续性的,直到没有容器使用它们。即便初始的数据卷容器或中间层的数据卷容器删除了,只要还有其他的容器使用数据卷,那么里面的数据就不会丢失。

3 Compose编排启动设置

3.1 镜像文件加载

3.4 Docker-Compose的基本指令

Docker-Compose的选项包括:

(1)-verbose:输出详细信息。

(2)-f:制定一个非docker-compose.yml命名的yaml文件。

(3)-p:设置一个项目名称,默认是当前目录的名称。

Docker-compose的动作包括:

(1)build:构建yml中某个服务的镜像,本地需存在Dockerfile文件,才能使用docker-compose build来构建服务的镜像;

(2)config:验证和查看yml文件;

(3)create:创建一个服务,但并不会启动容器,使用docker ps-a可以看见此容器;

(4)down:移除某个容器,包括网络、镜像和卷;跟rm命令不同,down命令不管是运行的,还是不运行的,都可以移除;

(5)exec:对一个正在运行的容器执行命令;

(6)logs:输出日志;

(7)pause:暂停某个服务,在服务暂停期间,关闭、删除都无法操作;

(8)unpause:解锁某个暂停的服务;

(9)port:输出绑定的端口;

(10)ps:输出运行的容器;

(11)rm:删除已经停止的容器,正在运行的不能删除;

(12)start:启动服务;

(13)stop:提供服务;

(14)restart:重启一个服务;

(15)up:创建和启动一个容器;

(16)run:运行某个服务。

4 结 论

运用Docker技术Docker-Compose工具,以业务应用为中心,采用“应用即容器,容器即服务”的全新理念,将业务模块打包成一个容器,应用平台就像一艘“货船”,承载着多个这样的容器。所有容器在研发阶段被生产出来,直接使用容器进行建设部署和维护升级,使用Docker技术,从以前的多模块复杂部署到目前的一键安装,简化了部署流程,可节约时间,提高工作效率。

参考文献:

[1] 杨保华,戴王剑,曹亚仑.Docker技术入门与实战 [M].第二版.北京:机械工业出版社,2017.

[2] [美]乔约翰斯顿.Docker生产环境实践指南 [M].北京:人民邮电出版社,2016.

[3] 彭东稳.Docker:Compose架构设计与实现 [OL].http: //www.ywnds.com/?p=7592,2016,12,27.

作者简介:蒋安国(1989.05-),男,汉族,四川遂宁人,主管。研究方向:docker技术;王金泉(1986.12-),男,汉族,甘肃金塔人,品控工程师,本科。研究方向:docker技术。

相关阅读