Docker Compose编排工具
在正式介绍微服务项目如何部署在Docker容器中之前,有必要对Docker Compose工具进行介绍。Docker compose工具能够很大程度上简化多容器项目的配置和部署,提高服务部署效率。
1. Compose file文件的简单说明
Docker Compose编排工具的使用非常简单,只需要如下三步。
- 编写Dockerfile文件。使用Dockerfile定义应用程序的环境,这样可以在任何地方使用他,Dockerfile的作用就是为每一个服务构建镜像
- 定义yml文件(通常是docker-compose.yml)。就是将前面介绍的为服务部署指令及相关参数都统一在该文件中编写和配置,省去了针对不同服务各自运行的麻烦
- 运行服务部署指令。根据部署的具体要求,来执行相应的部署指令,Docker会读取docker-compose.yml文件的内容以启动整个应用服务。
下面对一些配置项进行讲解: - version: ''3表示文件是用3版本的约束进行编写
- service:每一个服务项都包含镜像image,端口ports,网络networks,和部署deploy登配置信息,同时配置依赖项
### 微服务与Docker的整合
微服务与Docker的整合大致分为三步
1.添加Dockerfile文件
在Docker中,应用都是部署在容器中的,而容器又由镜像构成,镜像则通常是通过Dockerfile文件构建的,所以微服务与Docker整合的第一步就是提供Dockerfile文件
FROM java:8
MAINTAINER lidengyin
#参数代表jar包的位置
ARG JAR_FILE
ADD ${JAR_FILE} hcnet-website-1.jar
EXPOSE 8211
ENTRYPOINT ["java","-jar","hcnet-website-1.jar"]
具体说明如下
- 1~2行 设置了一个基础镜像java来提供项目的运行环境,并且通过MANTAINER配置了该镜像的维护者信息
- 3—~4行通过ADD指令将生成的项目jar包(在target目录下)复制到工作目录,并重命名为hcnet-website-1.jar
- 第五行指定了暴露端口与yml中指定的端口相同即可
- 第六行通过ENTRYPOINT指定了容器启动时要执行的命令,其实就是启动jar的命令
其他的基本类似只需要改变相应的端口以及jar包就可以
2. 添加dockerdile-maven插件
Dockerfile文件编写完成之后,就可以使用docker的相关指令构建镜像并运行微服务,然后访问容器中的应用了。只是上述所有的操作都属手动完成的,如果需要部署多个服务,那么将会非常麻烦。
针对这种情况,MAVEN提供了一个dockerfile-maven-plugin插件,很好的支持了与Docker的整合。该插件的使用非常简单,只需要在所有需要生成Docker项目的pom文件中添加该插件,并进行yiixe相关配置即可,其具体实例如下:
<!--使用Maven和Dockerfile命令构建镜像-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!--生成镜像名称-->
<repository>
${docker.image.prefix}/${project.name}
</repository>
<!--生成镜像版本-->
<tag>${project.version}</tag>
<!--推送到私有仓库或者DockerHub时需要开启用户认证-->
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
<!--直接使用 mvn install 命令打包项目, 就会自动构建并推送镜像-->
<executions>
<execution>
<id>default</id>
<phase>install</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
配置以及作用如下:
- plugin标签添加了一个版本为1.3.6的dockerfile-maven-plugin插件
- 分别是用和标签配置了生成的镜像名称和标签。其中 {project.artifacted}用于将项目名称指定为镜像名称,${project.version}用于将项目版本指定为镜像版本。
- 使用useMavenSettingsForAuth标签开启仓库用户认证。该maven插件的作用就是开启用户认证
- 标签中分别使用和子标签配置了mvn执行命令和自动化动作。其中上述配置表示在使用mvn install执行打包项目时,会先进行打包,然后自动执行镜像构建和镜像推送任务,这种配置可以很好的完成项目与Docker的自动化整合工作
- 标签中使用了<docker.image.prefix>子标签配置了生成的镜像前缀(也就是本地私有仓库),来为${docker.image.prefix}赋值
上述配置文件指定了<docker.image.prefix>标签(即镜像仓库前缀),这里使用的地址
<properties>
<java.version>1.8</java.version>
<spring-boot-admin.version>2.2.2</spring-boot-admin.version>
<docker.image.prefix>47.97.170.173:5000</docker.image.prefix>
</properties>
就是服务器的私有仓库地址
上述dockerfile-maven-plugins插件的设置,需要在子项目模块中的pom文件分别进行添加,并不需要任何的修改
3.添加docker-compose编排文件
对于个别文件直接通过Docker run等指令启动容器服务,但对于多个项目服务来说,有必要通过Docker compose编排运行服务,但是CPU服务器1核2核是不可能一起部署的,还是分开部署的好
version: '3'
services:
micro-hcnet-website:
image: 172.18.0.1:5000/hcnet-website:0.0.1-SNAPSHOT
ports:
- 8210:8210
restart: on-failure
至此。微服务项目与Docker的整合配置已经完成,剩下的就是如何将项目进行打包,并且通过docker进行部署了
环境搭建以及镜像准备
环境搭建
1. 搭建Docker主机
2. 安装JDK
3. 安装应用打包工具maven