idea通过maven插件构建项目docker镜像并发布到远程Harbor私有仓库

前言:

可能有时候为了方便直接使用idea构建项目镜像到docker服务器上,大大方便部署时间,提供工作效率。

开始之前有版本之分,docker-maven-plugin和dockerfile-maven-plugin,前者属于淘汰的,目前推荐后者dockerfile-maven-plugin,下面也是从前者到后者一一实现开始。

第一种:

idea安装docker插件

通过idea的setting中plugins搜索docker进行安装即可
在这里插入图片描述

我这块已经安装过了,就不在截图了,安装完成重启idea即可。

idea配置docker的服务器

1、在docker的服务器上进行配置

[root@microservice ~]# vim /usr/lib/systemd/system/docker.service
在ExecStart=/usr/bin/dockerd-current 后面加上-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重新加载配置文件和重新启动docker服务:
systemctl daemon-reload
systemctl restart docker

在这里插入图片描述
2、对idea进行配置docker
在这里插入图片描述

这块选择tcp进行连接,tcp://192.168.0.233:2375 提示连接成功就可以使用了

项目的pom文件配置

1、项目pom.xml配置
在这里插入图片描述

<build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--使用docker-maven-plugin插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <!--将插件绑定在某个phase执行-->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <serverId>my-hub</serverId>
                    <!-- 指定 Dockerfile 路径-->
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    <registryUrl>http://${docker.repostory}</registryUrl>
                    <!--Building image 192.168.10.11/demo1-->
                    <imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}:latest</imageName>
                    <!--必须配置dockerHost标签(除非配置系统环境变量DOCKER_HOST)-->
                    <dockerHost>http://${docker.repostory}:2375</dockerHost>
                    <rm>true</rm>
                    <!--指定标签-->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!-- 是否有push的功能 true代表有 -->
                    <pushImage>true</pushImage>
                    <!-- push后是否覆盖已存在的标签镜像 -->
                    <forceTags>true</forceTags>
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--jar 包所在的路径  此处配置的 即对应 target 目录-->
                            <directory>${project.build.directory}</directory>
                            <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

2、maven的setting.xml配置

servers标签

注意这块的id名称my-hub 必须和 pom文件中的serverId一致

    <server> 
        <id>my-hub</id> 
        <username>admin</username> 
        <password>Harbor12345</password> 
        <configuration> 
            <email>docker@163.com</email> 
        </configuration> 
    </server>

pluginGroups

<pluginGroup>com.spotify</pluginGroup>

执行
在这里插入图片描述

通过先clean,然后在package即可或 mvn clean package -U -DskipTests=true

docker镜像仓库
在这里插入图片描述
harbor私有仓库
在这里插入图片描述

成功

在这里插入图片描述
在这里插入图片描述

其实一般情况都是直接推送到docker私有仓库中的

第二种:

前期准备:

环境变量配置 DOCKER_HOST=tcp://192.168.0.233:2375 如何不识别就重启电脑
在这里插入图片描述

docker服务器开启tcp 2375端口aip服务

[root@microservice ~]# vim /usr/lib/systemd/system/docker.service
在ExecStart=/usr/bin/dockerd-current 后面加上-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \

1、项目pom.xml中进行配置

<properties>
        <!-- docker镜像的前缀 -->
        <docker.image.prefix>jhsz</docker.image.prefix>
        <!-- docker私服地址,Harbor配置完默认地址就是80,默认不带端口号。但是我这里是81 -->
        <docker.repostory>harbor.centos123.com</docker.repostory>
        <!--项目名,需要和Harbor中的项目名称保持一致 -->
        <docker.registry.name>library</docker.registry.name>
</properties>

<build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--使用docker-maven-plugin插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.10</version>
                <!--将插件绑定在某个phase执行-->
                <executions>
                    <execution>
                        <id>default</id>
                        <!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <contextDirectory>${project.basedir}</contextDirectory>
                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                    <repository>${docker.repostory}/${docker.registry.name}/${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

总结:docker私服地址 harbor.centos123.com 这块是注册数字证书的时候就是这个域名,使用ip也是可以,但是harbor注册数字证书是ip注册即可。

2、maven中的setting.xml

servers标签

    <server> 
        <id>harbor.centos123.com</id> 
        <username>admin</username> 
        <password>Harbor12345</password> 
        <configuration> 
            <email>docker@163.com</email> 
        </configuration> 
    </server> 

pluginGroups标签

<pluginGroup>com.spotify</pluginGroup>
mvn clean package dockerfile:build dockerfile:push

或 手动
在这里插入图片描述
日志内容:

[INFO] Building jar: H:\xxx\xxx\geometry-rest\target\xxx-docker-info.jar
[INFO] Successfully built harbor.centos123.com/library/xxx:latest
[INFO] 
[INFO] --- dockerfile-maven-plugin:1.4.10:push (default) @ geometry-rest ---
[INFO] The push refers to repository [harbor.centos123.com/library/geometry-rest]
[INFO] Image 7a6b3fe588e4: Preparing
[INFO] Image 2a578a810f21: Preparing
[INFO] Image ddd76074ad4a: Preparing
[INFO] Image 35c20f26d188: Preparing
[INFO] Image c3fe59dd9556: Preparing
[INFO] Image 6ed1a81ba5b6: Preparing
[INFO] Image a3483ce177ce: Preparing
[INFO] Image ce6c8756685b: Preparing
[INFO] Image 30339f20ced0: Preparing
[INFO] Image 0eb22bfb707d: Preparing
[INFO] Image a2ae92ffcd29: Preparing
[INFO] Image a3483ce177ce: Waiting
[INFO] Image ce6c8756685b: Waiting
[INFO] Image 30339f20ced0: Waiting
[INFO] Image 0eb22bfb707d: Waiting
[INFO] Image a2ae92ffcd29: Waiting
[INFO] Image 6ed1a81ba5b6: Waiting
[INFO] Image 7a6b3fe588e4: Pushing
[INFO] Image ddd76074ad4a: Pushing
[INFO] Image 35c20f26d188: Pushing
[INFO] Image 2a578a810f21: Pushing
[INFO] Image c3fe59dd9556: Pushing
[INFO] Image 7a6b3fe588e4: Pushed
[INFO] Image ddd76074ad4a: Pushed
[INFO] Image 6ed1a81ba5b6: Pushing
[INFO] Image 35c20f26d188: Pushed
[INFO] Image a3483ce177ce: Pushing
[INFO] Image ce6c8756685b: Pushing
[INFO] Image 6ed1a81ba5b6: Pushed
[INFO] Image a3483ce177ce: Pushed
[INFO] Image 30339f20ced0: Pushing
[INFO] Image 0eb22bfb707d: Pushing
[INFO] Image ce6c8756685b: Pushed
[INFO] Image a2ae92ffcd29: Pushing
[INFO] Image 0eb22bfb707d: Pushed
[INFO] Image 30339f20ced0: Pushed
[INFO] Image a2ae92ffcd29: Pushed
[INFO] Image 2a578a810f21: Pushed
[INFO] Image c3fe59dd9556: Pushed
[INFO] latest: digest: sha256:60cbce502c48ee0adb0be9692aa38b907e0d1fc7b778a6dfa163fa406b68e08a size: 2628
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

这块提前创建好项目目录,不然会找不到项目名称,我这块是library
在这里插入图片描述

总结:不管是第一种还是二种,基本上配置差不多,根据自己习惯使用即可,唯一区别就是第二种必须必须设置maven的 useMavenSettingsForAuth为true,第一种不需要进行配置。

参考:
https://www.cnblogs.com/fangts/p/10299431.html
https://blog.csdn.net/fyk844645164/article/details/107878063?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
https://blog.csdn.net/nickDaDa/article/details/87698396

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值