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 具体修改后的效果如下所示:

image

其中 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 命令生成并上传镜像到服务器上

image

然后使用 docker images 命令查看服务器上的镜像,能够查看到已经上传成功了

image

需要注意的是:如果重复运行 clean 、package、docker:build 命令,并且镜像的 tag 版本号不变的话,之前上传的镜像的相关信息就会变成 none,没有被覆盖,如下图所示,目前没有找到相关的解决办法,只能在服务器上手动运行 docker rmi 镜像id 进行删除了。

image


三、向 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 命令就可以把构建好的镜像上传到私有仓库中

image

推送成功之后,在 docker 私有仓库的 ui 界面上,就可以看到镜像:

image

点击之后,会跳转到详情页面,就可以看到所上传镜像的版本号:

image

需要注意的是:使用 docker:push 推送镜像时,如果镜像名称和 tag 版本号已经存在的话,不会重复推送和覆盖。


本篇博客所使用的 demo 源代码下载地址为:https://files.cnblogs.com/files/blogs/699532/fileupdown.zip

posted @ 2024-02-17 10:19  乔京飞  阅读(5639)  评论(0编辑  收藏  举报