Idea中使用docker插件操作Harbor私库build,pull,push镜像
一. 配置
-
settings - Build,Execution,Deployment - Docker
这里如果是安装的docker Desktop, 就直接选Docker for Windows
如果是和Docker Machine一起单独安装的, 这里就选择Docker Machine的安装目录, 如果是服务器, 远程连接, 就选择TCP
-
然后是上面Docker菜单下的Docker Registry
这里要注意, 地址不要带https, 虽然写上https://也能显示connect success, 但是后面pull和push的时候会显示docker: invalid reference format
的问题.
二. 操作push和pull
build
- 方法一: 直接使用idea的docker模板
打开上面的编译配置, 找到docker模板, 如果不需要直接deploy部署的话. 把下面的run build
去掉, 选择我们配置好的docker
项, 直接跑
当然也可以在Before launch
中增加mvn打包的操作
如果出现idea : Not connected to docker
的话, 可以试试删除docker, 再创建试试
- 方法二 使用maven插件
- 在dockerfile的模块中的pom中增加插件
注意这里如果是多模块, 比如parent父模块下有repo模块, service模块, web模块, 我们一般打包的jar包在web模块中, 我们可以把dockerfile放在web模块.
至于为什么要在对应的dockerfile文件的模块中加这个插件,而不是parent父模块中统一加, 是因为父模块在编译的时候会把子模块一起编译, 虽然可以通过<dockerfile.skip>false</dockerfile.skip>
和true来控制, true表示需要dockerfile打包镜像, fasle表示不会打包镜像. 但是个人感觉还是独立开来比较好. parent继承下去太麻烦了.
但是这样的坏处就是不能直接 在根目录mvn clean package
一建打包并构建镜像. 所以看个人情况 - 如果报
Must specify baseImage if dockerDirectory is null
, 首先检查dockerDirectory
, 这个是指dockerfile文件所在的文件夹目录, 可以用相对路径, 如果都在同一个目录,./
就行. 如果目录是对的, 看看dockerfile中有没有写from java:8
这样的, 或者直接在pom中配置基础镜像<baseImage>jdk:1.8</baseImage>
- 注意配置
dockerHost
, 如果是windows本地就是默认2375端口, 如果是远程则填写远程docker地址
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- <serverId>harbor</serverId>-->
<!-- <registryUrl>http://${docker.repostory}</registryUrl>-->
<!-- 镜像名称-->
<imageName>${project.build.finalName}</imageName>
<!--指定标签 这里指定的是镜像的版本,我们默认版本是latest-->
<imageTags>
<imageTag>1.0.0</imageTag>
<!-- <imageTag>T-${maven.build.timestamp}</imageTag>-->
</imageTags>
<!--必须配置dockerHost标签(除非配置系统环境变量DOCKER_HOST),windows本地装的docker一般是localhost:2375-->
<dockerHost>http://localhost:2375</dockerHost>
<!--指定基础镜像jdk1.8-->
<baseImage>jdk:1.8</baseImage>
<dockerDirectory>./</dockerDirectory>
<!-- 是否覆盖标签, 否则同一个包一直构建镜像会把不同的tag打在一个镜像上-->
<forceTags>true</forceTags>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
- 先正常package打包
- 点击docker插件的build按钮
pull
打开idea下面的Services
标签, 可以看到我们配置的docker
在images上右键, 选择pull
如果是公共仓库的镜像, 可以直接搜索
如果是私库中的镜像, 格式为:仓库地址(不要https)/项目名/镜像:标签
push
在docker标签中的images找到我们需要push的镜像, 右键, 选择push
填写信息
这里注意, Repository的格式是 项目名/镜像名
前提是需要先在管理后台创建这个项目