从镜像仓库的两种维度来看:
第一:开如开启了docker的远程登录端口2375, 可以直接登录到远程的docker, 直接使用远程docker服务器build后,镜像就在远程服务器了
第二:不使用docker的远程登录端口,推送到register/docker hub/ harbor / 阿里云仓库,则需要build镜像后,在push到镜像仓库
插件一:spotify/docker-maven-plugin 插件 (不推荐)
这个插件官方已经不建议使用了,取而代之的是com.spotify:dockerfile-maven-plugin,虽然过时,我也记录一下以防一些老项目要用。
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--对应maven的setting.xml 内的server配置信息,主要是用来推送到私人仓库认证使用的-->
<serverId>harbor</serverId>
<!-- harbor的地址-->
<registryUrl>http://${docker.registry}</registryUrl>
<!-- 镜像名称:${docker.registry} harbor地址 ${docker.registry.name} harbor项目名称 ${project.name} maven项目名称 ${project.version} maven项目版本-->
<imageName>${docker.registry}/${docker.registry.name}/${project.name}:${project.version}</imageName>
<!--必须配置dockerHost标签(除非配置系统环境变量DOCKER_HOST)经本人测试,不写也可以,环境变量我也没配置,好像默认会使用127.0.0.1:2375作为docker镜像的打包服务-->
<!--<dockerHost>http://${local.docker.host}</dockerHost>-->
<baseImage>java:8</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>
</configuration>
</plugin>
插件二:spotify/dockerfile-maven-plugin 插件(推荐)
<!-- 这个插件是docker-maven-plugin 的升级版-->
<!-- 打包推送命令:mvn clean package dockerfile:push -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<!--运行mvn package时,会自动执行build目标,构建Docker镜像;
运行mvn deploy命令时,会自动执行push目标,将Docker镜像push到Docker仓库-->
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<!--${docker.registry} harbor地址 ${docker.registry.name} harbor项目名称 ${project.name} maven项目名称 -->
<repository>${docker.registry}/${docker.registry.name}/${project.name}</repository>
<!-- maven项目版本-->
<tag>${project.version}</tag>
<!--在settings.xml中配置server-->
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<!--可以指定一个或多个变量,传递给Dockerfile,在Dockerfile中通过ARG指令进行引用-->
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
插件三:/fabric8io/docker-maven-plugin 插件 (墙裂推荐)
<!--功能强大的查插件 推荐使用-->
<!--打包推送命令 mvn clean package docker:push-->
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.39.1</version>
<configuration>
<!--认证配置,用于私有registry认证-->
<authConfig>
<username>admin</username>
<password>xxxxx</password>
</authConfig>
<!-- harbor镜像仓库地址-->
<pushRegistry>http://${docker.registry}</pushRegistry>
<images>
<image>
<!--推送到私有镜像仓库,镜像名需要添加仓库地址-->
<name>${docker.registry}/test/${project.name}:${project.version}</name>
<!--定义镜像构建行为-->
<build>
<dockerFileDir>${project.basedir}</dockerFileDir>
</build>
<!--定义容器启动行为-->
<!-- <run>-->
<!-- <!–设置容器名,可采用通配符–>-->
<!-- <containerNamePattern>${project.artifactId}</containerNamePattern>-->
<!-- <!–设置端口映射–>-->
<!-- <ports>-->
<!-- <port>8082:8082</port>-->
<!-- </ports>-->
<!-- <!–设置容器间连接–>-->
<!-- <links>-->
<!-- <link>mysql:db</link>-->
<!-- </links>-->
<!-- <!–设置容器和宿主机目录挂载–>-->
<!-- <volumes>-->
<!-- <bind>-->
<!-- <volume>/etc/localtime:/etc/localtime</volume>-->
<!-- </bind>-->
<!-- </volumes>-->
<!-- </run>-->
</image>
</images>
</configuration>
<executions>
<!--如果想在项目打包时构建镜像添加-->
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>