一个用于构建和推送Docker镜像的Maven插件。

使用Maven插件构建Docker镜像,将Docker镜像pushDockerHub上,或者私有仓库,上一篇文章是手写Dockerfile,这篇文章借助开源插件docker-maven-plugin 进行操作

以下操作。默认你已经阅读过我上一篇文章:

Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

http://www.ymq.io/2018/01/11/Docker-deploy-spring-boot-Integrate-redis

最终效果

环境准备

  • 系统:Ubuntu 17.04 x64
  • Docker 17.12.0-ce

    Ubuntu 17.04 x64 安装 Docker CE

http://www.ymq.io/2018/01/11/Docker-Install-docker-ce/

插件地址

docker-maven-plugin

GitHub 地址:https://github.com/spotify/docker-maven-plugin

一、简单使用

1.修改POM

pom.xml中添加下面这段,

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin --><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>0.4.12</version><configuration><!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 --><!-- 详见:https://github.com/spotify/docker-maven-plugin    Invalid repository name ... only [a-z0-9-_.] are allowed--><imageName>microservice-discovery-eureka</imageName><baseImage>java</baseImage><entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin></plugins>
</build>

2.构建镜像

使用 maven 命令: mvn clean package docker:build

& cd /opt/other-projects/docker-spring-boot-demo-maven-plugin
& mvn clean package docker:build

我们会发现控制台有类似如下内容:

Results :Tests run: 1, Failures: 0, Errors: 0, Skipped: 0[INFO]
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ docker-spring-boot-demo-maven-plugin ---
[INFO] Building jar: /opt/other-projects/docker-spring-boot-demo-maven-plugin/target/docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.5.9.RELEASE:repackage (default) @ docker-spring-boot-demo-maven-plugin ---
[INFO]
[INFO] --- docker-maven-plugin:0.4.12:build (default-cli) @ docker-spring-boot-demo-maven-plugin ---
[INFO] Copying /opt/other-projects/docker-spring-boot-demo-maven-plugin/target/docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar -> /opt/other-projects/docker-spring-boot-demo-maven-plugin/target/docker/docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar
[INFO] Building image docker-spring-boot-demo-maven-plugin
Step 1/3 : FROM java---> d23bdf5b1b1b
Step 2/3 : ADD /docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar //---> b5d8f92756f2
Step 3/3 : ENTRYPOINT ["java", "-jar", "/docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar"]---> Running in 6867f460b40c
Removing intermediate container 6867f460b40c---> 378fd82432e0
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 378fd82432e0
Successfully tagged docker-spring-boot-demo-maven-plugin:latest
[INFO] Built docker-spring-boot-demo-maven-plugin
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.568 s
[INFO] Finished at: 2018-01-15T09:21:39+00:00
[INFO] Final Memory: 37M/89M
[INFO] ------------------------------------------------------------------------
root@souyunku:/opt/other-projects/docker-spring-boot-demo-maven-plugin#

恭喜,构建成功了。

-我们执行docker images 会发现该镜像已经被构建成功:

& root@souyunku:# docker images docker-spring-boot-demo-maven-plugin
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
docker-spring-boot-demo-maven-plugin   latest              378fd82432e0        3 minutes ago       659MB

3.启动镜像

root@souyunku:# docker run --name MySpringBootMavenPlugin -d -p 8080:80 docker-spring-boot-demo-maven-plugin
84ebb2ebb8c002d3935e6e31c6d2aab05c32c075036368228e84f818d20ded4a

4.查看容器

& root@souyunku:# docker container ps -a
CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
84ebb2ebb8c0        docker-spring-boot-demo-maven-plugin   "java -jar /docker-s…"   About an hour ago   Up About an hour    0.0.0.0:8080->80/tcp     MySpringBootMavenPlugin

5.访问服务

浏览器输入:http://Docker宿主机IP:8080能够正常看到界面,文章开头的最终效果页面。

二、使用Dockerfile

1.新建Dockerfile

使用Dockerfile进行构建Docker镜像

上文讲述的方式是最简单的方式,很多时候,我们还是要借助Dockerfile进行构建的,
首先我们在/docker-spring-boot-demo-maven-plugin/src/main/resources目录下,建立文件Dockerfile

FROM java:8
VOLUME /tmp
ADD docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 9000
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

2.修改POM

项目pom.xml修改为如下: 指定Dockerfile所在的路径

<build><plugins><!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin --><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>0.4.12</version><configuration><!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 --><!-- 详见:https://github.com/spotify/docker-maven-plugin    Invalid repository name ... only [a-z0-9-_.] are allowed--><imageName>docker-spring-boot-demo-maven-plugin</imageName><!-- 指定Dockerfile所在的路径 --><dockerDirectory>${basedir}/src/main/resources</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin></plugins>
</build>

3.构建镜像

使用 maven 命令: mvn clean package docker:build

& cd /opt/other-projects/docker-spring-boot-demo-maven-plugin
& mvn clean package docker:build

4.启动镜像

root@souyunku:# docker run --name MySpringBootMavenPlugin -d -p 8080:80 docker-spring-boot-demo-maven-plugin
84ebb2ebb8c002d3935e6e31c6d2aab05c32c075036368228e84f818d20ded4a

其他步骤和上面一样。这样即可使用Dockerfile进行构建Docker镜像啦。

5.访问服务

浏览器输入:http://Docker宿主机IP:8080能够正常看到界面,文章开头的最终效果页面。

三、push 镜像

Docker镜像pushDockerHub

1.修改Maven配置

首先修改Maven的全局配置文件settings.xml

查看settings.xml 所在位置

root@souyunku:# find / -name settings.xml
/etc/maven/settings.xml

添加以下段落

vi /etc/maven/settings.xml
<servers><server><id>docker-hub</id><username>DockerHub 的账号</username><password>DockerHub 的密码</password><configuration><email>admin@souyunku.com</email></configuration></server>
</servers>

2.创建Repository

注册个账号:https://hub.docker.com/

DockerHub上创建Create Repository ,例如:docker-spring-boot-demo-maven-plugin,如下图

3.修改POM

项目pom.xml修改为如下:注意imageName的路径要和repo的路径一致

镜像名称

<properties><docker.image.prefix>souyunku</docker.image.prefix>
</properties>

Docker镜像pushDockerHub

<!--3:将Docker镜像push到DockerHub上--><!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin -->
<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>0.4.12</version><configuration><!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 --><!-- 详见:https://github.com/spotify/docker-maven-plugin Invalid repositoryname ... only [a-z0-9-_.] are allowed --><!-- 如果要将docker镜像push到DockerHub上去的话,这边的路径要和repo路径一致 --><imageName>${docker.image.prefix}/${project.artifactId}</imageName><!-- 指定Dockerfile所在的路径 --><dockerDirectory>${basedir}/src/main/resources</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources><!-- 以下两行是为了docker push到DockerHub使用的。 --><serverId>docker-hub</serverId><registryUrl>https://index.docker.io/v1/</registryUrl></configuration>
</plugin>

4.构建镜像

使用 maven 命令: mvn clean package docker:build -DpushImage

& cd /opt/other-projects/docker-spring-boot-demo-maven-plugin
& mvn clean package docker:build  -DpushImage

看到类似这样的数据,就证明构建镜像没毛病

[INFO] Building image souyunku/docker-spring-boot-demo-maven-plugin
Step 1/6 : FROM java:8---> d23bdf5b1b1b
Step 2/6 : VOLUME /tmp---> Using cache---> cb237cc84527
Step 3/6 : ADD docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar app.jar---> 7fb5e3363ed5
Step 4/6 : RUN bash -c 'touch /app.jar'---> Running in ab5d10dd64ad
Removing intermediate container ab5d10dd64ad---> 05d96fe59da4
Step 5/6 : EXPOSE 9000---> Running in d63e20122d8e
Removing intermediate container d63e20122d8e---> 55ba378141fd
Step 6/6 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]---> Running in 962d476363a3
Removing intermediate container 962d476363a3---> 654b596fe91f
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 654b596fe91f
Successfully tagged souyunku/docker-spring-boot-demo-maven-plugin:latest
[INFO] Built souyunku/docker-spring-boot-demo-maven-plugin
[INFO] Pushing souyunku/docker-spring-boot-demo-maven-plugin
The push refers to repository [docker.io/souyunku/docker-spring-boot-demo-maven-plugin]
464800d90790: Pushed
d52b146f9147: Pushed
35c20f26d188: Mounted from souyunku/docker-spring-boot-demo
c3fe59dd9556: Mounted from souyunku/docker-spring-boot-demo
6ed1a81ba5b6: Mounted from souyunku/docker-spring-boot-demo
a3483ce177ce: Mounted from souyunku/docker-spring-boot-demo
ce6c8756685b: Mounted from souyunku/docker-spring-boot-demo
30339f20ced0: Mounted from souyunku/docker-spring-boot-demo
0eb22bfb707d: Mounted from souyunku/docker-spring-boot-demo
a2ae92ffcd29: Mounted from souyunku/docker-spring-boot-demo
latest: digest: sha256:8d78ced0034f38be8086c8f812817ec4c12b178470b4cea668046906c825c9ee size: 2424
null: null
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 41.764 s
[INFO] Finished at: 2018-01-16T09:56:23+00:00
[INFO] Final Memory: 36M/88M
[INFO] ------------------------------------------------------------------------
root@souyunku:/opt/other-projects/docker-spring-boot-demo-maven-plugin# 

5.查看镜像

root@souyunku:# docker images souyunku/docker-spring-boot-demo-maven-plugin
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
souyunku/docker-spring-boot-demo-maven-plugin   latest              654b596fe91f        27 minutes ago      674MB
root@souyunku:# docker images souyunku/docker-spring-boot-demo-maven-plugin
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
souyunku/docker-spring-boot-demo-maven-plugin   latest              654b596fe91f        27 minutes ago      674MB

Docker Hub 查看镜像,看到已经上传成功

6.启动镜像

root@souyunku:# docker run --name MySpringBootMavenPlugin -d -p 8080:80 docker-spring-boot-demo-maven-plugin
84ebb2ebb8c002d3935e6e31c6d2aab05c32c075036368228e84f818d20ded4a

其他步骤和上面一样。这样即可使用Dockerfile进行构建Docker镜像啦。

7.访问服务

浏览器输入:http://Docker宿主机IP:8080能够正常看到界面,文章开头的最终效果页面。

四、绑定phase执行

将插件绑定在某个phase执行

在很多场景下,我们有这样的需求,例如执行mvn clean package 时,自动地为我们构建docker镜像,可以吗?答案是肯定的。我们只需要将插件的goal 绑定在某个phase即可。

所谓的phasegoal,可以这样理解:maven命令格式是:mvn phase:goal ,例如mvn package docker:build 那么,packagedocker 都是phase,build 则是goal

1.修改POM

下面是示例:

首先配置属性:

<properties><docker.image.prefix>souyunku</docker.image.prefix>
</properties>
<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>0.4.12</version><executions><execution><id>build-image</id><phase>package</phase><goals><goal>build</goal></goals></execution></executions><configuration><!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 --><!-- 详见:https://github.com/spotify/docker-maven-plugin Invalid repositoryname ... only [a-z0-9-_.] are allowed --><!-- 如果要将docker镜像push到DockerHub上去的话,这边的路径要和repo路径一致 --><imageName>${docker.image.prefix}/${project.artifactId}</imageName><!-- 指定Dockerfile所在的路径 --><dockerDirectory>${basedir}/src/main/resources</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources><!-- 以下两行是为了docker push到DockerHub使用的。 --><serverId>docker-hub</serverId><registryUrl>https://index.docker.io/v1/</registryUrl></configuration>
</plugin>

新加内容

<executions><execution><id>build-image</id><phase>package</phase><goals><goal>build</goal></goals></execution>
</executions>

本例指的是讲docker的build目标,绑定在package这个phase上。
也就是说,用户只需要执行mvn package ,就自动执行了mvn docker:build

2.构建镜像

使用 maven 命令: mvn package

& cd /opt/other-projects/docker-spring-boot-demo-maven-plugin
& mvn package

3.启动镜像

root@souyunku:# docker run --name MySpringBootMavenPlugin -d -p 8080:80 docker-spring-boot-demo-maven-plugin
84ebb2ebb8c002d3935e6e31c6d2aab05c32c075036368228e84f818d20ded4a

4.访问服务

浏览器输入:http://Docker宿主机IP:8080能够正常看到界面,文章开头的最终效果页面。

推荐阅读:Docker Hub 仓库使用,及搭建 Docker Registry

http://www.ymq.io/2017/12/31/Docker-dockerHub/

GitHub :docker-spring-boot-demo-maven-plugin

https://github.com/souyunku/other-projects/tree/master/docker-spring-boot-demo-maven-plugin

Contact

  • 作者:鹏磊
  • 出处:http://www.ymq.io/2018/01/15/Docker-maven-plugin
  • Email:admin@souyunku.com
  • 版权归作者所有,转载请注明出处
  • Wechat:关注公众号,搜云库,专注于开发技术的研究与知识分享

使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上相关推荐

  1. docker eclipse打包_【Docker】Maven打包SpringBoot项目成Docker镜像并上传到Harbor仓库(Eclipse、STS、IDEA、Maven通用)...

    写在前面 最近,在研究如何使用Maven将SpringBoot项目打包成Docker镜像并发布到Harbor仓库,网上翻阅了很多博客和资料,发现大部分都是在复制粘贴别人的东西,没有经过实践的检验,根本 ...

  2. spring boot项目生成docker镜像并完成容器部署

    一.问题产生 把spring boot项目生成的jar打成docker镜像并生成docker容器完成部署是比较简单方便的部署方式,而且部署过程很少会出错. 二.部署步骤 1.利用maven或者grad ...

  3. 使用spotify的docker-maven-plugin插件将SpringBoot项目打包为Docker镜像

    此项目的代码已经放到GitHub中,地址https://github.com/twingao/springboot-docker.先展示SpringBoot项目的目录结构. tree springbo ...

  4. 【Spring boot 实战】使用Maven插件构建Docker镜像

    本文主要介绍如何使用Maven插件将SpringBoot应用打包为Docker镜像,并上传到私有镜像仓库Docker Registry的过程. 使用Maven构建本地Docker镜像 我们以项目spr ...

  5. Docker学习总结(31)——使用Maven插件构建docker镜像

    Maven是一个强大的项目管理与构建工具.如果可以使用Maven构建Docker镜像,以下几款Maven的Docker插件比较常用. 插件名称 官方地址 docker-maven-plugin htt ...

  6. Springboot项目使用Idea直接生成docker镜像部署到Centos7.6

    废话不多说,直接开干: 1.开放docker仓库访问地址: #输入此命令设置docker.service的仓库访问端口,ExecStart项添加:-H tcp://0.0.0.0:2375vim /u ...

  7. 使用maven插件构建docker镜像并推送到阿里镜像仓库

    1.阿里云镜像仓库 阿里云提供了docker镜像仓库,可以上传私有的镜像 2.com.spotify 提供的docker构建插件 docker-maven-plugin <plugin>& ...

  8. docker简介和安装(阿里云加速)以及Springboot项目部署docker,实现局域网下同时访问项目(详细过程)

    文章目录 关于Docker: Docker简介 Docker优势 Docker的基本组成 Docker安装: Springboot项目部署到Docker 实现局域网内多台电脑可以访问 关于Docker ...

  9. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

最新文章

  1. 机器学习 集成学习篇——python实现Bagging和AdaBOOST算法
  2. Python Django 事务管理
  3. =在php中,PHPExcel在PHP7中,save(‘php://output’)出现ERR_INVALID_RESPONSE错误的解决方法...
  4. Oracle 创建表空间,用户,赋值(简装)
  5. AndroidStudio安卓原生开发_UI高级_自定义主题和样式---Android原生开发工作笔记129
  6. location定位_javascript自学记录:location对象
  7. 用Netty解析Redis网络协议
  8. angular6 设置全局变量_angularjs 设置全局变量的3种方法
  9. Android抓包方法(二) 之Tcpdump命令+Wireshark
  10. C#之http transfer-Encoding模式
  11. Android日志工具Log的使用
  12. Atitit.分布式远程调用  rpc  rmi  CORBA的关系
  13. 手机端自动播放网页背景音乐代码
  14. matlab三维绘图函数plot3【matlab图行绘制四】
  15. Android 退出登录实现
  16. android按钮添加音效,Android中为按钮设置点击音效
  17. 使用Free Spire.Doc for Java 处理word文档换行
  18. __filename意思
  19. 白鹭引擎开发飞机大战详尽教程(三创建飞机)
  20. 什么是无极性电解电容?

热门文章

  1. 简单几行代码,写一个百度广告屏蔽插件,爽到爆
  2. Spark(六):SparkSQLAndDataFrames对结构化数据集与非结构化数据的处理
  3. eclipse new server Cannot create a server using the selected type 网上有两种办法,其实原理一样...
  4. jquery入门 修改网页背景颜色
  5. 运维人员处理云服务器故障的方法总结
  6. 跨区域MPLS TE
  7. CV00-04-卷积
  8. k8s crd构建方法_告诉您正在构建没人想要的东西的8种方法(以及处理方法)
  9. 前端页面紫红色_谷歌正在开发一种神秘的新型移动操作系统,称为紫红色
  10. LaZagne检测windows本地存储的密码