介绍

在持续集成过程中,项目工程一般使用 Maven 编译打包,然后生成镜像,通过镜像上线,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了实现在Maven工程中,通过简单的配置,自动生成镜像并推送到仓库中。

使用

配置 DOCKER_HOST

docker-maven-plugin 插件需要设置 Docker 地址为。

DOCKER_HOST=unix:///var/run/docker.sock

构造镜像

构建镜像可以使用一下两种方式

  • 将构建信息指定到 POM 中

    支持将 FROM, ENTRYPOINT, CMD, MAINTAINER 以及 ADD 信息配置在 POM 中

  • 使用已存在的 Dockerfile 构建。
    上述不支持的必须使用Dockerfile

插件配置见附录

执行命令

mvn clean package docker:build #只执行 build 操作mvn clean package docker:build -DpushImage   #执行 build 完成后 push 镜像mvn clean package docker:build -DpushImageTag #执行 build 并 push 指定 tag 的镜像mvn docker:build -DdockerImageTags=1.0.0-dev docker:push  #镜像指定tag

注意:这里必须指定至少一个 imageTag,它可以配置到 POM 中,也可以在命令行指定。

绑定Docker 命令到 Maven 各个阶段

我们可以绑定 Docker 命令到 Maven 各个阶段,我们可以把 Docker 分为 buildtagpush,然后分别绑定 Maven 的 packagedeploy 阶段,此时,我们只需要执行mvn deploy就可以完成整个 build、tag、push操作了,当我们执行mvn build就只完成 build、tag 操作。除此此外,当我们想跳过某些步骤或者只执行某个步骤时,不需要修改 POM 文件,只需要指定跳过 docker 某个步骤即可。比如当我们工程已经配置好了自动化模板了,但是这次我们只需要打镜像到本地自测,不想执行 push 阶段,那么此时执行要指定参数-DskipDockerPush就可跳过 push 操作了。

如果我们想跳过 docker 某个过程时,只需要:

  • -DskipDockerBuild 跳过 build 镜像
  • -DskipDockerTag 跳过 tag 镜像
  • -DskipDockerPush 跳过 push 镜像
  • -DskipDocker 跳过整个阶段

安全认证配置

当我们 push 镜像到 Docker 仓库中时,不管是共有还是私有,经常会需要安全认证,登录完成之后才可以进行操作。当然,我们可以通过命令行 docker login -u user_name -p password docker_registry_host 登录,但是对于自动化流程来说,就不是很方便了。使用 docker-maven-plugin 插件我们可以很容易实现安全认证。

首先在 Maven 的配置文件 setting.xml 中增加相关 server 配置,主要配置 Docker registry用户认证信息。

<servers><server><id>docker-registry</id><username>user</username><password>12345678</password><configuration><email>xxxx@xxxx</email></configuration></server>
</servers>

然后只需要在 pom.xml 中使用 server id 即可。

然后只需要在 pom.xml 中使用 server id 即可。

附录

pom

        <plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><imageName>${docker.image.prefix}/${project.name}:${project.version}-dev</imageName><!-- dockerfile所在目录 --><dockerDirectory>${basedir}/src/main/docker</dockerDirectory><dockerHost>${docker.host}</dockerHost><!-- maven settings.xml 中配置的docker 仓库的 server  --><serverId>docker-registry</serverId><!-- 以下是docker build 的命令 《《《《《 --><baseImage>java</baseImage><maintainer>docker_maven docker_maven@email.com</maintainer><workdir>/ROOT</workdir><cmd>["java", "-version"]</cmd><entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint><!-- 》》》》》》  --><resources><resource><targetPath>/ROOT</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration><executions><execution><id>build-image</id><phase>package</phase><goals><goal>build</goal></goals></execution><execution><id>tag-image</id><phase>package</phase><goals><goal>tag</goal></goals><configuration><image>${docker.image.prefix}/${project.name}:${project.version}-dev</image><newName>${docker.image.prefix}/${project.name}:${project.version}-RELEASE</newName></configuration></execution><execution><id>push-image</id><phase>deploy</phase><goals><goal>push</goal></goals><configuration><imageName>${docker.image.prefix}/${project.name}:${project.version}-RELEASE</imageName></configuration></execution></executions></plugin>

参数

docker-maven-plugin 插件还提供了很多很实用的配置:

参数 说明 默认值
true build 时强制覆盖 tag,配合 imageTags 使用 false
true build 时,指定 –no-cache 不使用缓存 false
true build 时,指定 –pull=true 每次都重新拉取基础镜像 false
true build 完成后 push 镜像 false
true build 完成后,push 指定 tag 的镜像,配合 imageTags 使用 false
5 push 镜像失败,重试次数 5
10 push 镜像失败,重试时间 10s
true build 时,指定 –rm=true 即 build 完成后删除中间容器 false
true build 时,使用最近的 git commit id 前7位作为tag,例如:image:b50b604 。前提是不配置 newName false

参考

https://github.com/spotify/docker-maven-plugin

Maven(5)--常用插件相关推荐

  1. maven 常用插件3

    maven 常用插件3 转载:http://www.cnblogs.com/dennyzhangdd/p/5831112.html 1.根据项目类型打包:jar/war打包插件. 首先看<pac ...

  2. Maven 配置文件 POM 的常用插件配置代码

    Maven 配置文件 POM 的常用插件配置代码 普通 将 Maven 多模块依赖集成打进一个 JAR 包(方法 1) 将 Maven 多模块依赖集成打进一个 JAR 包(方法 2) 生成单入口类 J ...

  3. maven常用插件配置

    常用插件配置详解 Java代码    <!-- 全局属性配置 --> <properties> <project.build.name>tools</proj ...

  4. 大家都用什么Maven插件?及本人的几个常用插件分享

    2019独角兽企业重金招聘Python工程师标准>>> 大家都用什么Maven插件?及本人的几个常用插件分享 博客分类: Java框架 maven Spring Flex Myecl ...

  5. Maven常用插件介绍及如何打一个瘦jar包

    目录 零:说在前面 一:常用插件的介绍 二:常用插件的对比 三:打一个瘦jar包 3.1:背景 3.2:解决方案 四:插件应用举例 4.1:maven-jar-plugin 举例及部分说明 4.2:m ...

  6. maven常用插件详解

    1. 简介 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说, ...

  7. Maven 常用插件

    1.Maven 打包package插件 <build><plugins><plugin><groupId>org.apache.maven.plugin ...

  8. androidstudio mac mini_GitHub - jp1017/AndroidStudioPlugins: Android Studio 常用插件及浅释

    AndroidStudioPlugins Android Studio 常用插件及浅释 这里给出几个平时常用的as插件,方便我们的开发.点击标题就直接可以进入插件的github源码查看. as第一大插 ...

  9. python测试用例管理_Python测试框架Pytest的常用插件测试报告

    原标题:Python测试框架Pytest的常用插件测试报告 一.pytest-html 生成 html 测试报告 要求:Python 3.6+ 安装:pip install pytest-html 文 ...

  10. maven之打包插件(maven-assembly-plugin,maven-shade-plugin与maven-assembly-plugin)

    一. 介绍 maven提供的打包插件有如下三种: plugin function maven-jar-plugin maven 默认打包插件,用来创建 project jar maven-shade- ...

最新文章

  1. Spring Boot 实现接口幂等性的 4 种方案!还有谁不会?
  2. python结束不退出_Python 基本功: 1. Hello world
  3. MySQL 绿色版安装方法图文教程
  4. Canal实时同步数据到RocketMQ
  5. C++之string类
  6. 考试系统(未完成的小程序)
  7. 【caffe-Windows】微软官方caffe之 matlab接口配置
  8. 从工程文化和运维理念理解Netflix
  9. Linq的优点以及注意事项
  10. SpringBoot使用CommandLineRunner和ApplicationRunner执行初始化业务
  11. C# GDI+ 生成自定义进度条
  12. java Flink使用addSink方法保存流到mysql数据库中
  13. 为什么说ES6的class是语法糖?
  14. thinkphp开启子域名无法正常访问_内网穿透之动态域名解析_DDNS(二)
  15. ios自建服务器降级,苹果系统怎样降级?iOS11降级至iOS10的方法
  16. Keil5的详细安装教程
  17. 二进制,十进制,十六进制转化
  18. 接收微信支付通知php代码,微信支付开发告警通知实例
  19. 2021牛客寒假算法基础集训营1 C 无根树问题的处理策略 前序后序遍历 奇偶匹配 DFS
  20. vue中用canvas 画一个六边形 类似蜂窝形的功能导航主菜单

热门文章

  1. 数字图像处理之频率域图像增强
  2. 网络摄像头2 mjpg_streamer流程,编译
  3. linux【报错】userdel: user xiaoming is currently used by process 4713解决
  4. centos6.9下安装composer
  5. Maven对插件进行全局设置
  6. SchemaCrawler 9.3 发布
  7. 让人期待的2011年度最佳 jQuery 插件发布啦
  8. Jscript中window.setInterval和window.setTimeout的区别
  9. Tomcat5.5 配置mysql数据库连接池
  10. 为啥有的程序员不爱说话,却表达能力爆表?(附教程)