Maven 入门实战(3)--docker-maven-plugin 插件使用

打印 上一主题 下一主题

主题 938|帖子 938|积分 2814

本文主要介绍如何通过 docker-maven-plugin 插件把 Java 服务构建成 docker 镜像;文中所使用到的软件版本:Docker 20.10.17、Java 1.8.0_341、SpringBoot 2.7.12、Maven 3.8.4、docker-maven-plugin 1.2.2。
1、docker-maven-plugin 插件信息

使用如下命令查看插件详细信息:
  1. mvn help:describe -DartifactId=docker-maven-plugin -DgroupId=com.spotify -Dversion=1.2.2 -Ddetail
复制代码
1.1、插件目标

该插件包含 5 个目标:
目标说明
docker:build构建镜像
docker:help显示帮助信息
docker:push上传镜像
docker:removeImage删除镜像
docker:tag给镜像打标签
1.2、常用配置参数

1.2.1、docker:build 参数

参数说明
baseImage基础镜像,如果设置了 dockerDirectory,忽略该参数 
buildArgs定义 docker build 时的参数,可以在 Dockerfile 文件中使用这些参数
cmd定义容器默认的运行程序,如果设置了 dockerDirectory,忽略该参数 
dockerDirectoryDockerfie 文件所在目录(相对 pom.xml 的相对目录),如果没有配置该参数,将会根据 baseImage、entryPoint、cmd、maintainer 参数自动生成 Dockerfie
dockerHostdocker 地址
entryPoint定义容器默认的运行程序,如果设置了 dockerDirectory,忽略该参数 
imageName镜像名称
maintainer镜像维护者,如果设置了 dockerDirectory,忽略该参数
resources定义构建镜像所需的资源,这些资源会先 copy 到 Dockerfile 所在目录下
resources/resource一个资源配置
resources/resource/targetPath定义资源 copy 到的目标目录,该配置会在 Dockerfile 所在目录中创建对应参数值的目录
resources/resource/directory资源所在目录
resources/resource/include资源包含的文件
1.2.2、docker:removeImage 参数

参数说明
dockerHostdocker 地址
imageName删除的镜像名称,包括 REPOSITORY 和 TAG
imageTags与 imageName 中 REPOSITORY 一致, 其他需删除的 TAG
1.2.3、docker:tag 参数

参数说明
dockerHostdocker 地址
image镜像名称或镜像 id
newName新的标签名称
1.2.4、docker:push 参数

参数说明
serverId服务 id,对应 Maven settings.xml 中 servers/server 节点配置信息
registryUrl被推送的镜像仓库
imageName推送的镜像名称
2、docker-maven-plugin 插件使用

2.1、新建 SpringBoot 工程
  1. <groupId>com.abc</groupId>
  2. <artifactId>demo-general</artifactId>
  3. <version>1.0.0</version>
  4. <parent>
  5.     <groupId>org.springframework.boot</groupId>
  6.     <artifactId>spring-boot-starter-parent</artifactId>
  7.     <version>2.7.12</version>
  8.     <relativePath />
  9. </parent>
复制代码
2.2、在 POM 中设置 build 信息
  1. <plugin>
  2.     <groupId>com.spotify</groupId>
  3.     <artifactId>docker-maven-plugin</artifactId>
  4.     <version>1.2.2</version>
  5.     <configuration>
  6.         <dockerHost>http://10.49.196.33:2375</dockerHost>
  7.         <baseImage>adoptopenjdk/openjdk8:latest</baseImage>
  8.         <imageName>${project.artifactId}:${project.version}</imageName>
  9.         <cmd>["java", "-jar", "/root/${project.build.finalName}.jar"]</cmd>
  10.         <resources>
  11.             <resource>
  12.                 <targetPath>/root</targetPath>
  13.                 <directory>${project.build.directory}</directory>
  14.                 <include>${project.build.finalName}.jar</include>
  15.             </resource>
  16.         </resources>
  17.     </configuration>
  18. </plugin>
复制代码
 执行如下命令生成镜像:
  1. mvn package docker:build
复制代码
先打包,然后生成镜像;镜像可在 docker 中查看:

2.3、使用 Dockerfile

2.3.1、新建 Dockerfile 文件

在项目下新建 docker 目录,并在该目录下新建 Dockerfile 文件:

Dockerfile 文件文件内容为:
  1. From adoptopenjdk/openjdk8
  2. ARG jarFile
  3. COPY ${jarFile} /root/demo-general-1.0.0.jar
  4. EXPOSE 9090
  5. CMD ["java", "-jar", "/root/demo-general-1.0.0.jar"]
复制代码
adoptopenjdk/openjdk8 为直接 pull 到本地的官方 jdk 镜像。
2.3.2、docker-maven-plugin 插件配置
  1. <plugin>
  2.     <groupId>com.spotify</groupId>
  3.     <artifactId>docker-maven-plugin</artifactId>
  4.     <version>1.2.2</version>
  5.     <configuration>
  6.         <dockerHost>http://10.49.196.33:2375</dockerHost>
  7.         <imageName>${project.artifactId}:${project.version}</imageName>
  8.         <dockerDirectory>docker</dockerDirectory>
  9.         <buildArgs>
  10.             <jarFile>${project.build.finalName}.jar</jarFile>
  11.         </buildArgs>
  12.         <resources>
  13.             <resource>
  14.                 <targetPath>/</targetPath>
  15.                 <directory>${project.build.directory}</directory>
  16.                 <include>${project.build.finalName}.jar</include>
  17.             </resource>
  18.         </resources>
  19.     </configuration>
  20. </plugin>
复制代码
执行如下命令生成镜像:
  1. mvn package docker:build
复制代码
2.4、绑定 Docker 命令到 Maven 生命周期阶段
  1. <plugin>
  2.     <groupId>com.spotify</groupId>
  3.     <artifactId>docker-maven-plugin</artifactId>
  4.     <version>1.2.2</version>
  5.     <configuration>
  6.         <dockerHost>http://10.49.196.33:2375</dockerHost>
  7.         <imageName>${project.artifactId}:${project.version}</imageName>
  8.         <dockerDirectory>docker</dockerDirectory>
  9.         <buildArgs>
  10.             <jarFile>${project.build.finalName}.jar</jarFile>
  11.         </buildArgs>
  12.         <resources>
  13.             <resource>
  14.                 <targetPath>/</targetPath>
  15.                 <directory>${project.build.directory}</directory>
  16.                 <include>${project.build.finalName}.jar</include>
  17.             </resource>
  18.         </resources>
  19.     </configuration>
  20. </plugin>                        build-image            package                            build                                        tag-image            package                            tag                                        ${project.artifactId}:${project.version}                10.49.196.34:18080/test/${project.artifactId}:${project.version}                                        push-image            verify                            push                                        my-harbor                http://10.49.196.34:18080                10.49.196.34:18080/test/${project.artifactId}:${project.version}                        
复制代码
上面的配置在打包阶段绑定了生成镜像及给镜像打标签的目标,执行 mvn package 命令后,到 docker 中查看镜像信息:

在 verify 阶段绑定了 push 镜像的目标,在 Maven settings.xml 中配置远程仓库 Harbor 的用户名密码:
  1. <servers>
  2.   <server>
  3.     <id>my-harbor</id>
  4.     <username>admin</username>
  5.     <password>Harbor12345</password>
  6.   </server>
  7. </servers>
复制代码
执行 mvn verify 命令后,到 Harbor 中查看镜像信息:

3、替换插件

该插件在 Docker 的基础上引入了额外的抽象和配置,容易给用户带来困扰;官网建议使用 dockerfile-maven-plugin 来替换该插件。

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表