将插件绑定在某个phase执行,推送镜像
阅读原文时间:2022年04月06日阅读:1

文章目录

需求:在执行mvn clean package 时,插件自动为构建Docker镜像。

实现:将插件的的goal绑定在某个phase即可。

phase和goal可以这样理解:maven命令格式是mvn phase:goal ,例如mvn package docker:build。那么,package和docker都是phase,build则是goal。

示例:

<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.4.13</version>
            <excutions>
                <excution>
                    <id>build-image</id>
                    <phase>package</phase>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </excution>
            </excutions>
            <configuration>
                <imageName>itmuch/discovery-eureka:0.0.1</imageName>
                <baseImage>java</baseImage>
                <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
                <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

由配置可知,只需添加如下配置:

          <excutions>
                <excution>
                    <id>build-image</id>
                    <phase>package</phase>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </excution>
            </excutions>

就可将插件绑定在package的phase上。也就是说,用户只需执行mvn package,就会自动执行mvn docker:build。

使用Maven插件推送一个Docker 镜像到Docker Hub.

1.修改Maven的全局配置文件settings.xml,在其中添加以下内容,配置Docker Hub的用户信息。

<server>
    <id>docker-hub</id>
    <username>用户名</username>
    <password>密码</password>
    <configuration>
        <email>邮箱</email>
    </configuration>
</server>

2.修改pom.xml。

<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.4.13</version>
                <imageName>itmuch/discovery-eureka:0.0.1</imageName>
                <baseImage>java</baseImage>
                <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
                <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>

            <!-- 与maven配置文件settings.xml中配置的server.id一致,用于推送镜像 -->
            <serverId>docker-hub</serverId>
            </configuration>
        </plugin>
    </plugins>
</build>

3.执行以下命令,添加pushImage的标签,表示推送镜像。

mvn clean package docker:build -DpushImage

也可推送镜像到私有仓库,只需要将imageName指定类似如下的形式即可:

<imageName> localhost:5000/itmuch/discovery-eureka:0.0.4</imageName>