我看了很多关于idea一键打包docker镜像并推送harbor仓库的文章,不论国内国外的,基本上99%都是瞎写的, 这些人不清楚打包插件原理,然后就是复制粘贴一大篇,写了一堆垃圾,然后别人拿来也不能用。
然后这篇文章是经过我无数次测试、踩坑后得出宝贵经验,然后在此分享给各位!
首先谈第一个问题:idea的docker插件不是必须安装的!
我看了那么多傻吊写的文章:在maven插件里面配了一大堆的harbor仓库的认证信息,结果
mvn clean package 以后,发现只能打包docker镜像没有push推送成功!
也就是:你要推送镜像还得使用docker插件, 总共需要两步才能完成docker镜像的打包和推送!
像下面这样:
这他妈叫一键推送吗?!
所以我发誓一定要研究出一套真正意义上的idea一键打包推送docker镜像的方法。
我这里提供com.spotify和io.fabric8两种方法 ,是绝对可以使用的。
两种方法都需要开启docker 2375端口.
注意:远程docker和远程harbor仓库是两个概念:
因为你打包docker镜像和push推送都需要一个docker程序,而idea需要一个能远程控制docker的机制,这就是开启远程docker 2375端口的原因。
而远程harbor仓库,说白了就是你打包后docker镜像存储的地方,仅此而已。
关于搭建harbor仓库的方法可以参看我的一篇文章: centos搭建docker镜像Harbor仓库的简明方法-CSDN博客
开启开启远程docker 2375端口的方法有两种:
1. 在/etc/docker/daemon.json文件中加入:
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] 然后重启docker
第二种方法:编辑/usr/lib/systemd/system/docker.service文件
在ExecStart=/usr/bin/dockerd 后面增加 -H tcp://0.0.0.0:2375
然后运行命令:
systemctl daemon-reload
systemctl restart docker
首先谈第一种方法: com.spotify出品的dockerfile-maven-plugin插件,
pom.xml核心配置如下:
<properties>
<!-- docker镜像的版本号 -->
<image.tag.verion>v1.0.1</image.tag.verion>
<!-- 远程harbor仓库的域名地址 -->
<docker.repostory>harbor.myhub.com</docker.repostory>
</properties>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<!-- maven打包阶段就触发dockerfile-maven-plugin插件的以下动作 -->
<phase>package</phase>
<goals>
<goal>build</goal>
<goal>tag</goal>
<goal>push</goal>
</goals>
<configuration>
<!-- 给docker镜像打上版本号 -->
<tag>${image.tag.verion}</tag>
</configuration>
</execution></executions>
<configuration>
<!-- 指定dockerfile所在目录 -->
<contextDirectory>{project.basedir}\ \