idea Maven 插件 docker-maven-plugin 打包docker镜像上传到远程仓库的过程详解

 更新时间:2023年05月19日 09:05:49   作者:文艺流浪汉  
这篇文章主要介绍了idea Maven插件docker-maven-plugin打包docker镜像上传到远程仓库,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

原理:

docker-maven-plugin调用一个 docker的api,进行打包镜像,tag标签,push到远程仓库。

远程仓库的密码,在本地maven的setting.xml里配置一个server ,idea根据id可以获取到远程仓库的账号,密码

一、docker主机开启docker 远程访问API

Ubuntu:

vi /lib/systemd/system/docker.service

Centos7

vi /usr/lib/systemd/system/docker.service

找到ExecStart

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

修改完后 重置重启

systemctl daemon-reload
systemctl restart docker

防火墙开放端口:2375

验证

http://ip:2375/images/json 或curl http:/ip:2375/info

二、在docker主机配置远程仓库地址,以便非https 也能访问

vi  /etc/docker/daemon.json
{
"registry-mirrors":  [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
],
    "insecure-registries": ["registry1的IP地址:端口号","registry2的IP地址:端口号"]
}

修改完后 重置重启

systemctl daemon-reload
systemctl restart docker

三、maven 配置 远程仓库的账号密码

编辑 maven settings.xml文件

<server>  
        <id>local_docker</id>  
         <username>lulu</username>
        <password>123456</password>
 </server>

四、pom 配置

<properties>
    <project.name>bluetoothled</project.name>
<!-- 私有仓库配置,需要settings.xml文件配合serverId对应的仓库服务 账号密码 -->
    <docker.serverId>local_docker</docker.serverId>
    <docker.registry>192.168.182.100:5000</docker.registry>
     <docker.host>http://192.168.182.100:2375</docker.host>
</properties>
<build>
        <plugins>
            <!-- Srping Boot 打包工具 打包成可执行的jar  -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!--打包后 复制jar包到指定文件目录-->
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <!-- here the phase you need -->
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <!-- 复制资源后的输出目录 -->
                            <outputDirectory>target</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/main/docker</directory>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!-- docker插件 -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.0</version>
                <configuration>
                    <!-- 私有仓库配置,需要settings.xml文件配合serverId对应的服务地址 -->
                    <serverId>${docker.serverId}</serverId>
                    <!-- docker私服地址 -->
                    <registryUrl>${docker.registry}</registryUrl>
                    <!-- 指定docker server的地址,该配置不需要本机安装docker -->
                    <dockerHost>${docker.host}</dockerHost>
                    <imageName>${project.name}/${project.artifactId}:${project.version}</imageName>
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                    </imageTags>
                    <!-- docker的构建目录(构建上下文),包含Dockerfile  -->
                    <dockerDirectory>target</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
                <executions>
                    <!-- package之前清除上一次构建的image -->
                    <execution>
                        <id>remove-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>removeImage</goal>
                        </goals>
                        <configuration>
                            <imageName>
                               ${project.name}/${project.artifactId}
                            </imageName>
                            <imageTags>
                                <imageTag>${project.version}</imageTag>
                                <imageTag>latest</imageTag>
                            </imageTags>
                        </configuration>
                    </execution>
                    <execution>
                        <id>remove-tag-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>removeImage</goal>
                        </goals>
                        <configuration>
                            <imageName>
                                ${docker.registry}/${project.name}/${project.artifactId}
                            </imageName>
                            <imageTags>
                                <imageTag>${project.version}</imageTag>
                                <imageTag>latest</imageTag>
                            </imageTags>
                        </configuration>
                    </execution>
                    <!-- 将docker:build绑定到package这个phase  -->
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                        <configuration>
                            <!-- imageName中若不指定tag,则会打上latest -->
                            <imageName>${project.name}/${project.artifactId}:${project.version}</imageName>
                            <!-- 可以使用<imageTags>标签打其他额外的tag -->
                        </configuration>
                    </execution>
                    <!-- 将docker:tag绑定到package这个phase  -->
                    <execution>
                        <id>tag-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>tag</goal>
                        </goals>
                        <configuration>
                            <!-- docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]  -->
                            <!-- images与IMAGE[:TAG]对应,必须在build阶段已经构建了 -->
                            <image>${project.name}/${project.artifactId}:${project.version}</image>
                            <!-- newName与tag命令的第二个参数对应 -->
                            <newName>
                                ${docker.registry}/${project.name}/${project.artifactId}:${project.version}
                            </newName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>tag-image-latest</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>tag</goal>
                        </goals>
                        <configuration>
                            <!-- docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]  -->
                            <!-- images与IMAGE[:TAG]对应,必须在build阶段已经构建了 -->
                            <image>${project.name}/${project.artifactId}:${project.version}</image>
                            <!-- newName与tag命令的第二个参数对应 -->
                            <newName>
                                ${docker.registry}/${project.name}/${project.artifactId}:latest
                            </newName>
                        </configuration>
                    </execution>
                    <!-- 将docker:push绑定到deploy这个phase  -->
                    <execution>
                        <id>push-image</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>push</goal>
                        </goals>
                        <configuration>
                            <imageName>
                                ${docker.registry}/${project.name}/${project.artifactId}:${project.version}
                            </imageName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>push-image-latest</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>push</goal>
                        </goals>
                        <configuration>
                            <imageName>
                                ${docker.registry}/${project.name}/${project.artifactId}:latest
                            </imageName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

docker-maven-plugin详细说明请参考https://www.jb51.net/article/224164.htm

五、在idea中命令控制台中使用

创建镜像

mvn clean package docker:build

推送镜像到Registry

mvn clean package docker:build -DpushImage

推送指定tag的镜像到Registry

mvn clean package docker:build -DpushImageTag

执行 build、tag、push 操作

mvn deploy

如果想跳过 docker 某个过程时,只需要:
-DskipDockerBuild 跳过 build 镜像
-DskipDockerTag 跳过 tag 镜像
-DskipDockerPush 跳过 push 镜像
-DskipDocker 跳过整个阶段

到此这篇关于ideaMaven插件docker-maven-plugin打包docker镜像上传到远程仓库的文章就介绍到这了,更多相关ideaMaven插件docker-maven-plugin内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot 拦截器和自定义注解判断请求是否合法

    SpringBoot 拦截器和自定义注解判断请求是否合法

    这篇文章主要介绍了SpringBoot 拦截器和自定义注解判断请求是否合法,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-12-12
  • Mybatis-plus selectByMap条件查询方式

    Mybatis-plus selectByMap条件查询方式

    这篇文章主要介绍了Mybatis-plus selectByMap条件查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java如何实现kaptcha网页验证码验证

    Java如何实现kaptcha网页验证码验证

    在做关于SSM项目之商铺系统时,了解到了kaptcha实现网页验证码验证,感觉就很有趣,所以便开始学习记录了起来,复制粘贴即可用
    2025-01-01
  • IntelliJ IDEA代码提示忽略大小写的具体设置步骤

    IntelliJ IDEA代码提示忽略大小写的具体设置步骤

    在IDEA开发过程中,代码补全功能是提升编码效率的核心特性之一,默认情况下,IDEA的代码提示会严格匹配大小写,这对于遵循命名规范的项目是合理的,然而,在某些场景下,开发者可能希望代码提示忽略大小写,以提升输入灵活性,所以本文介绍了如何设置IDEA提示忽略大小写
    2025-06-06
  • Java中&与&&的区别及说明

    Java中&与&&的区别及说明

    这篇文章主要介绍了Java中&与&&的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 浅试仿 mapstruct实现微服务编排框架详解

    浅试仿 mapstruct实现微服务编排框架详解

    这篇文章主要为大家介绍了浅试仿 mapstruct实现微服务编排框架详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Java基础学习之接口详解

    Java基础学习之接口详解

    接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法。本文通过一些示例详细为大家展示了接口的使用,需要的可以参考一下
    2022-10-10
  • spring-AOP 及 AOP获取request各项参数操作

    spring-AOP 及 AOP获取request各项参数操作

    这篇文章主要介绍了spring-AOP 及 AOP获取request各项参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • java前后端传值,参数有集合类型的数据时的两种操作方式

    java前后端传值,参数有集合类型的数据时的两种操作方式

    这篇文章主要介绍了java前后端传值,参数有集合类型的数据时的两种操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 解决Dubbo应用启动注册ZK获取IP慢的原因之一

    解决Dubbo应用启动注册ZK获取IP慢的原因之一

    这篇文章主要介绍了解决Dubbo应用启动注册ZK获取IP慢的原因之一,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04

最新评论