IDEA 使用 Docker Maven Plugin 发布镜像
当使用 IDEA 开发完一个工程项目时,如果想要将 jar 包生成镜像,上传到服务器上,有两种方式:
- 手动方式:将 jar 包手动上传到服务器,手动编写 Dockerfile 文件,执行 docker build 命令生成镜像
- 自动方式:使用 IDEA 集成 Docker 的 Maven 插件,配置好相关参数,双击插件的命令自动生成并上传镜像到服务器
相比而言自动方式还是要方便一些,本篇博客将介绍如何使用 IDEA 集成和使用 Docker 的 Maven 插件,具体官网地址如下:
GitHub 地址:https://github.com/spotify/docker-maven-plugin
Gitee 地址:https://gitee.com/mirrors/docker-maven-plugin
一、配置 Docker
我的 CentOS7 虚拟机 ip 地址是 192.168.136.128,之前通过 yum 的方式已经安装好了 docker
首先我们必须修改 docker 的配置,让其允许远程访问,需要设置一个特殊端口
找到 docker 服务配置文件,通过 yum 安装的服务文件,位置在 /lib/systemd/system/docker.service
对其进行修改:在 ExecStart= 这行添加配置 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
docker.service 具体修改后的效果如下所示:
其中 2375 就是 docker 允许远程上传镜像的端口,该端口可以随意指定,只要不和现有的操作系统已有端口冲突就行
二、IDEA 集成 Docker 的 Maven 插件
我采用之前的一个 SpringBoot 文件上传下载的 Demo 工程为例,工程名称为 fileupdown,博客最后会提供源代码下载地址。
修改其 pom 文件,集成 docker-maven-plugin 插件,并进行相关参数的配置,具体内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
</parent>
<groupId>com.jobs</groupId>
<artifactId>fileupdown</artifactId>
<version>1.0</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<build>
<!--
这里将 finalName 配置为 fileupdown,
这样打包后的 jar 包名称就为:fileupdown.jar
-->
<finalName>fileupdown</finalName>
<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>1.2.2</version>
<configuration>
<!--配置最终生成的镜像名称-->
<imageName>192.168.136.128:8050/${project.artifactId}:${project.version}
</imageName>
<baseImage>java:8-alpine</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>
<!--配置 docker 的地址,当运行 docker build 命令时构建并上传镜像-->
<dockerHost>http://192.168.136.128:2375</dockerHost>
</configuration>
</plugin>
</plugins>
</build>
</project>
配置完成后,刷新 maven 在右侧就能够看到 maven 插件的相关命令,常用的命令主要有 docker:build 、docker:push 、docker:removeImage
我们可以先双击 clean 清除项目文件,再双击 package 对项目打包成 jar 包,然后双击 docker:build 命令生成并上传镜像到服务器上
然后使用 docker images 命令查看服务器上的镜像,能够查看到已经上传成功了
需要注意的是:如果重复运行 clean 、package、docker:build 命令,并且镜像的 tag 版本号不变的话,之前上传的镜像的相关信息就会变成 none,没有被覆盖,如下图所示,目前没有找到相关的解决办法,只能在服务器上手动运行 docker rmi 镜像id 进行删除了。
三、向 Docker 私服仓库推送镜像
有关 Docker 私有仓库的搭建,可以参考我之前的博客:https://www.cnblogs.com/studyjobs/p/17481217.html
上面介绍中,我们之所有将镜像名称构建成 ip地址:端口/镜像名称
这种格式,就是为了能够向 docker 私有仓库进行推送
在上面介绍的项目 pom 文件中,我们已经配置了 docker 私有仓库的访问地址,如下所示:
<!--配置 docker 私有仓库的地址,当运行 docker push 命令时上传镜像-->
<registryUrl>http://192.168.136.128:8050</registryUrl>
注意:要想将镜像推送到 docker 私有仓库,必须满足一下条件:
- 私有仓库的访问地址,在私有仓库所在服务器上的 docker 信任地址中添加过了(具体细节参考上面我给出的之前博客地址)
- 本地项目所构建的镜像,已经通过上面第二部分的介绍,通过 clean,package,docker:build 上传到了服务器上
- 构建的镜像名称格式必须是
私有仓库的ip地址:端口号/镜像名称
然后我们点击 docker:push 命令就可以把构建好的镜像上传到私有仓库中
推送成功之后,在 docker 私有仓库的 ui 界面上,就可以看到镜像:
点击之后,会跳转到详情页面,就可以看到所上传镜像的版本号:
需要注意的是:使用 docker:push 推送镜像时,如果镜像名称和 tag 版本号已经存在的话,不会重复推送和覆盖。
本篇博客所使用的 demo 源代码下载地址为:https://files.cnblogs.com/files/blogs/699532/fileupdown.zip