从镜像仓库的两种维度来看:

第一:开如开启了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>-->
                            <!--                                &lt;!&ndash;设置容器名,可采用通配符&ndash;&gt;-->
                            <!--                                <containerNamePattern>${project.artifactId}</containerNamePattern>-->
                            <!--                                &lt;!&ndash;设置端口映射&ndash;&gt;-->
                            <!--                                <ports>-->
                            <!--                                    <port>8082:8082</port>-->
                            <!--                                </ports>-->
                            <!--                                &lt;!&ndash;设置容器间连接&ndash;&gt;-->
                            <!--                                <links>-->
                            <!--                                    <link>mysql:db</link>-->
                            <!--                                </links>-->
                            <!--                                &lt;!&ndash;设置容器和宿主机目录挂载&ndash;&gt;-->
                            <!--                                <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>

参考文章:三种自动化构建Docker镜像的Maven插件使用 - 简书

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐