Maven一键部署Springboot到Docker仓库,为自动化做准备
1 前言
前面《Springboot整合MongoDB的Docker开发,其它应用也类似》讲解了如何做Docker开发、如何把Springboot应用打包成一个镜像,但它是手动的,本文将讲解如何通过maven一键打包部署。
2 两个maven插件搞定
可以使用maven插件实现一键部署,这两个插件还是同一个公司的产品,就是著名的音乐流服务平台Spotify。

2.1 spotify/docker-maven-plugin
2.1.1 基础用法
该插件可以实现镜像打包和push到仓库,无Dockerfile和有Dockerfile两种方式都可以,建议使用Dockerfile,更灵活。在maven的pom.xml文件加入以下插件配置:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<imageName>pkslow/springboot-mongo</imageName>
<imageTags>
<imageTag>${imageVersion}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
<!-- optionally overwrite tags every time image is built with docker:build -->
<forceTags>true</forceTags>
<dockerDirectory>${project.basedir}</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
imageName:这是镜像名称;imageTags:标签,支持多标签,即同一个镜像文件多个标签;我指定了一个参数imageVersion,可以命令行传入,方便后续整合Jenkins。forceTags:是否覆盖原有标签;dockerDirectory:Dockerfile文件所在的位置;而且该目录下的所有文件都会被复制到${project.build.directory}/docker。因为我的Dockerfile放在项目根目录,所以整个项目的文件都复制过去了,包括源代码等。不得不吐槽一下这个设计,这是在强迫大家换个位置放Dockerfile吗?resources:用来添加dockerDirectory外的其它资源文件。
添加后,通过以下命令执行:
$ mvn clean package docker:build -DimageVersion=0.0.4
通过命令docker images查看成功,运行也正常。
通过下面命令可以push到registry:
mvn clean package docker:build -DpushImage
mvn clean package docker:build -DpushImageTag
2.1.2 与maven生命周期绑定
可以通过添加executions配置实现与maven生命周期的绑定。
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>VERSION GOES HERE</version>
<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>my-image:${project.version}</image>
<newName>registry.example.com/my-image:${project.version}</newName>
</configuration>
</execution>
<execution>
<id>push-image</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>registry.example.com/my-image:${project.version}</imageName>
</configuration>
</execution>
</executions>
</plugin>
有了这些绑定配置后,要打包镜像,直接mvn clean package即可。
2.1.3 仓库登陆信息配置
首先,插件可以使用配置在本地 ~/.dockercfg 或 ~/.docker/config.json的验证信息,或者可以显式地配置在maven上。
如配置在settings.xml文件:
<servers>
<server>
<id>docker-hub</id>
<username>foo</username>
<password>secret-password</password>
<configuration>
<email>foo@foo.bar</email>
</configuration>
</server>
</servers>
密码是可以加密的,详情请查看: Maven's built in encryption function 。
在项目的pom.xml中使用:
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>VERSION GOES HERE</version>
<configuration>
[...]
<serverId>docker-hub</serverId>
<registryUrl>https://index.docker.io/v1/</registryUrl>
</configuration>
</plugin>
</plugins>
2.2 spotify/dockerfile-maven
2.2.1 更简洁的插件
因为docker-maven-plugin有一些Bugs,所以Spotify开发了更方便简洁的插件dockerfile-maven。

dockerfile-maven-plugin的配置更简单:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-maven-version}</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>spotify/foobar</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
配置好后,执行以下maven命令即可打包成镜像并推送到仓库:
mvn deploy
2.2.2 仓库验证
账号可以配置在pom.xml中,如下:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${version}</version>
<configuration>
<username>repoUserName</username>
<password>repoPassword</password>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
当然,也可以配置在maven的配置文件settings.xml中,这样更安全,请参考:https://github.com/spotify/dockerfile-maven/blob/master/docs/authentication.md
3 总结
通过maven插件,可以快速方便地一键打包、部署,非常方便,对后续的整个DevOps整合也是很有益的。
参考资料:
docker-maven-plugin:https://github.com/spotify/docker-maven-plugin
dockerfile-maven:https://github.com/spotify/dockerfile-maven
欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章!
欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。
欢迎大家关注、分享。
Maven一键部署Springboot到Docker仓库,为自动化做准备的更多相关文章
- 提升10倍生产力:IDEA远程一键部署SpringBoot到Docker
作者:陶章好 juejin.im/post/5d026212f265da1b8608828b 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容 ...
- IDEA部署Spring-boot到Docker容器
一.准备工作 idea安装Docker插件 centos7系统安装docker 二.打开docker远程端口 1. 编辑docker.service文件 vim /usr/lib/systemd/sy ...
- IDEA一键部署SpringBoot项目到服务器
1. 安装Alibaba Cloud Toolkit插件 2. 配置部署环境 2.1 为本次部署设置一个名字 2.2 选择被部署文件的生成方式 IDEA提供了三种方式:Maven Build,Uplo ...
- maven一键部署tomcat war包
1.环境如下 eclipse.apache-maven-3.0.5.apache-tomcat-7.0.39 2.配置如下 apache-tomcat-7.0.39配置C:\Program Files ...
- maven一键部署linux的tomcat(wagon-maven-plugin)
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Depen ...
- 一键部署k8s 、docker 工具集——最新版本
- 用Kubernetes部署Springboot或Nginx,也就一个文件的事
1 前言 经过<Maven一键部署Springboot到Docker仓库,为自动化做准备>,Springboot的Docker镜像已经准备好,也能在Docker上成功运行了,是时候放上Ku ...
- IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈项目有来商城云环境的部署方式
一. 前言 最近有些童鞋对开源微服务商城项目 youlai-mall 如何部署到线上环境以及项目中 的Dockerfile 文件有疑问,所以写了这篇文章做个答疑以及演示完整的微服务项目发布到线上的流程 ...
- 超简单的 Docker部署 SpringBoot项目 步骤
很久之前就用过,一直没有好好写篇博客,今天就总结一下 创建一个 SpringBoot项目 创建一个SpringBoot项目并打成jar包,结构如图 编写 Dockerfile文件 FROM java: ...
随机推荐
- 终于我用JOL打破了你对java对象的所有想象
目录 简介 JOL简介 使用JOL分析VM信息 使用JOL分析String 使用JOL分析数组 使用JOL分析自动装箱 使用JOL分析引用关系 总结 简介 使用面向对象的编程语言的好处就是,虽然没有女 ...
- 获取Google浏览器保存的密码
获取Google中保存的密码 直接在浏览器上输入 chrome://settings/passwords
- PyQt5 对话框示例
import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * class Example(QMainWindow): def _ ...
- vue甘特图gantt
vue做甘特图,先大致介绍下核心功能: (1)横轴.纵轴拖拽: (2)自定义监听点击事件(双击.右键等)(3)任务之间显示父子层级关系:(4)左侧列表信息,右侧时间轴表示任务:(5)每个任务可以订制样 ...
- git新手入门问题总结
git新手入门问题总结 前言 本人为2019年6月份刚刚毕业,大三暑假中旬来到上海,实习时间大致为十个月,在这十个月里面学到了许多关于git使用方面的知识 经常会逛开源中国水水动态,看看技术帖子学习知 ...
- 使用JFreeChart生成条形图
1. 准备工作 下载JFreeChart,我使用的版本为1.0.19,相关内容参见JFreeChart,下载链接为https://sourceforge.net/projects/jfreechart ...
- 懒羊羊找朋友(struct实现优先排序)
4907: 懒羊羊找朋友(点击) 时间限制: 1 Sec 内存限制: 128 MB ...
- Ubuntu:E: Sub-process /usr/bin/dpkg returned an error code (1)
Ubuntu系统安装软件时报以下错误: E: Sub-process /usr/bin/dpkg returned an error code (1) 解决: mv /var/lib/dpkg/inf ...
- swift - TextView和TextField之return隐藏回收键盘
一.点击界面空白处即可收起键盘,空白处不能有其他控件的响应事件. //点击空白处关闭键盘 override func touchesEnded(_ touches: Set<UITouch> ...
- Moco测试知多少?
什么是mock? Mock就是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来替代它,帮助我们测试这种场景. 一般前端工程师会在后端工程师还没有完成后台接口开发的时候,自己根据事先 ...