DOCKER Compose编排服务

Docker Compose是Docker官方推出的一个单机容器编排工具。

Compose是由用户定义的适合运行的多个容器的应用程序,可以在YMAL配置文件(docker-compose.yml)定义和配置服务,以及服务所需的环境变量、镜像、网络、数据卷等依赖,然后使用Docker Compose命令启动服务。Docker Compose可以自动从配置文件读取程序需要配置启动的单个或多个容器。使用Docker Compose可以一键启动多个容器,这样就解决了多个服务打包在一个镜像或者启动多个镜像的问题,只需要编写一个docker-compose.yml,就可以同时构建并启动多个镜像。使用Compose有如下三个步骤。

(1)在DockerFile中定义你的应用环境,使其可以在任何地方被复制。

(2)在docker-compose.yml中定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行。

(3)运行docker-compose up命令,Compose将启动并运行整个应用程序。

我们将SIA-Gateway中依赖的多个服务,分别存放在不同的镜像,由Compose统一构建并编排启动SIA-Gateway服务。我们将SIA-Gateway中的三个大模块分别拆分为三个镜像,并将镜像上传到私服。

● Nginx镜像。

● SIA-Gateway Admin镜像。

● SIA-Gateway Core镜像。

maven docker(程序员都会的DockerCompose编排服务与Maven插件构建Docker镜像)(1)

下面使用docker-compose.yml编排定义SIA-Gateway服务集群。

maven docker(程序员都会的DockerCompose编排服务与Maven插件构建Docker镜像)(2)

maven docker(程序员都会的DockerCompose编排服务与Maven插件构建Docker镜像)(3)

将 docker-compose.yml 上 传 至 服 务 器 , 然 后 进 入 目 录 , 执 行docker命令,启动整个Gateway服务集群。下面的命令将根据YML文件按照顺序启动这个网关服务集群,执行docker-compose命令。

maven docker(程序员都会的DockerCompose编排服务与Maven插件构建Docker镜像)(4)

Maven插件构建Docker镜像

Maven是一个强大的项目管理与构建工具,可以用来构建Docker镜像。以下几款Maven的Docker插件比较常用,插件名称可以从GitHub开源项目中搜索到。

● spotify

● fabric8io

● bibryam

从各项目的功能性、文档易用性、更新频率、社区活跃度、Stars等几个纬度考虑,我们选用了第一款由Spotify公司开发的Maven插件,作为构建Docker镜像的工具。下面我们来详细探讨如何使用Maven插件构建Docker镜像。

准备工作

使用该插件构建Docker镜像,需要有一个安装好的Docker运行环境,并且需要在运行该插件的机器上定义DOCKER_HOST环境变量,配置访问Docker的URL,如下:

maven docker(程序员都会的DockerCompose编排服务与Maven插件构建Docker镜像)(5)

上面的例子是在Linux环境下定义的DOCKER_HOST环境变量,因为Docker安装在本机上,所以使用localhost地址。如果你的Docker运行环境不在本机,则使用Docker所在机器的IP地址。

Docker默认开启远程访问API的端口(2375),如果你开启的是其他端口,则使用具体的端口配置。如果你的Docker没有开启远程访问API,则请自行开启。如果你要在Windows上运行该Maven插件,则同样需要在Windows上配置DOCKER_HOST环境变量,具体如下。

变量名:DOCKER_HOST

变量值:tcp://127.0.0.1:2375

配置pom.xml

在pom.xml中引入dockerFile-maven-plugin插件,并配置该插件,示例如下。

maven docker(程序员都会的DockerCompose编排服务与Maven插件构建Docker镜像)(6)

下面是插件相关指令参数的说明。

● Repository:指定Docker镜像的仓库名字。

● Tag:指定Docker镜像的Tag。

● buildArgs:指定一个或多个变量,传递给DockerFile,并通过ARG指令进行引用。

● execution:指定build和push目标,当运行mvn package时,会自动执行build目标,构建Docker镜像。当运行mvn deploy命令时,会自动执行push目标,将Docker镜像推送到Docker仓库。

需要说明的是,该插件要求必须提供DockerFile,而且要求放在项目根目录下,即与pom.xml同级目录。然后不需要像docker-mavenplugin插件那样指定dockerDirectory(DockerFile存放路径的参数)。代码如下所示。

maven docker(程序员都会的DockerCompose编排服务与Maven插件构建Docker镜像)(7)

构建Docker镜像

接下来,就可以运行Maven命令来构建Docker镜像了。

maven docker(程序员都会的DockerCompose编排服务与Maven插件构建Docker镜像)(8)

命令执行成功后,运行docker命令检查镜像是否存在。

maven docker(程序员都会的DockerCompose编排服务与Maven插件构建Docker镜像)(9)

推送和拉取Docker镜像

Docker镜像构建好后,我们还可以使用该插件将镜像推送到Docker仓库,在运行的mvn命令行上以参数的形式提供认证信息。

maven docker(程序员都会的DockerCompose编排服务与Maven插件构建Docker镜像)(10)

拉取Docker镜像,运行命令如下。

maven docker(程序员都会的DockerCompose编排服务与Maven插件构建Docker镜像)(11)

运行Docker。

maven docker(程序员都会的DockerCompose编排服务与Maven插件构建Docker镜像)(12)

小结

相比单体架构,微服务架构在部署灵活性上有了很大改善,然而频繁的服务发布也给微服务架构下的软件质量带来了稳定性的挑战。

传统的手动部署方式已经不适用于微服务架构,目前基于容器的交付方式已经成为微服务的标准交付方式,通过持续集成交付工具,配合自动化、可持续交付部署的基础设施,来支撑微服务应用快速地迭代交付,成为软件交付的最佳实践。

本文给大家讲解的内容是微服务交付:Docker Compose编排服务与Maven插件构建Docker镜像
  1. 下篇文章给大家讲解的内容是微服务交付:服务监控治理,监控系统概述
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!
,