小暖男石头哥|微服务架构中将SpringBoot项目打包Docker镜像


小暖男石头哥|微服务架构中将SpringBoot项目打包Docker镜像目前主流的互联网公司采用的架构设计应该都比较超前 , 微服务 , 容器和云原生等基础架构应该都有采用和进行二次开发 。 在微服务架构设计中 , 项目发布时需要将项目打包成容器镜像 , 这一步是最基本的操作 。
下面我们介绍下 , 如何将SpringBoot项目打包成docker容器镜像 , 通过笔记的形式记录下来方便以后查阅 。 将SpringBoot项目打包成Docker容器镜像主要分为两部分:

  1. 添加Maven插件
  2. 定义Dockerfile
下面通过一个详细的例子来介绍下具体的内容 。
小暖男石头哥|微服务架构中将SpringBoot项目打包Docker镜像添加Maven插件在maven的pom.xml中添加我们需要的插件 , 这里我们采用dockerfile-maven-plugin , 当然也可以选择其他的插件 , 不同的插件的使用方法可能不太一样
com.spotify dockerfile-maven-plugin defaultbuildpush ${docker.repostory}/${project.artifactId}${project.version}target/${project.build.finalName}.jardockerfile-maven-plugin插件主要使用了两个goal:
  • build是指构建Docker容器镜像;
  • push是将构建的Docker容器镜像推送到公有或者私有镜像仓库中;
dockerfile-maven-plugin插件的configuration说明如下:
  • repository定义一个公有或者私有的镜像仓库;
  • tag是Docker镜像的版本号;
  • buildArgs是向Dockerfile传递参数 , 该节点下面的子节点标签可以自定义 , 因为该节点标签的数据类型是Map;
  • JAR_FILE是自定义标签 , 定义了Maven打包后jar文件的位置 , 该参数会在Dockerfile中用到;

小暖男石头哥|微服务架构中将SpringBoot项目打包Docker镜像定义Dockerfile接下来我们就需要定义Dockerfile了 。 那么 , Dockerfile是什么呢?
Dockerfile 是一个用来构建镜像的文本文件 , 文本内容包含了一条条构建镜像所需的指令和说明 。
Dockerfile常用的指令有如下几种:
COPY
复制指令 , 从上下文目录中复制文件或者目录到容器里指定路径 。 格式:
COPY [--chown=:] <源路径1>...<目标路径>COPY [--chown=:] ["<源路径1>",..."<目标路径>"][--chown=:]:可选参数 , 用户改变复制到容器内文件的拥有者和属组 。
<源路径>:源文件或者源目录 , 这里可以是通配符表达式 , 其通配符规则要满足 Go 的 filepath.Match 规则 。 例如:
COPY hom* /mydir/COPY hom?.txt /mydir/<目标路径>:容器内的指定路径 , 该路径不用事先建好 , 路径不存在的话 , 会自动创建 。
ADD
ADD 指令和 COPY 的使用格式一致(同样需求下 , 官方推荐使用 COPY) 。 功能也类似 , 不同之处如下: