Spring Boot用Maven打包为Docker镜像发布到Harbor

这是我参与更文挑战的第17天,活动详情查看: 更文挑战

介绍

先对标题中的几个名词做下介绍:

  • Spring Boot: 不认识我就别看了
  • Maven: 目前比较通用的Java包管理器
  • Docker: 理解为一种集成环境, 可直接运行项目, 不需要再手动安装各种依赖
  • Harbor: 私有的DockerHub

本文重在记录并讲解如何使用jib-maven-plugin将Spring Boot项目进行打包发布

默认您已熟知Spring Boot和Maven相关配置并了解Docker相关概念

增加发布配置

我们的项目会发布在私有仓库中, 所以先修改pom文件, 增加相关配置, pom.xml

<properties>
    <release.url>http://Houtaroy/repository/releases/</release.url>
    <snapshot.url>http://Houtaroy/repository/snapshot/</snapshot.url>
</properties>

<distributionManagement>
    <repository>
      <id>releases</id>
      <name>Release Repository</name>
      <url>${release.url}</url>
    </repository>
    <snapshotRepository>
      <id>snapshots</id>
      <name>Snapshot Repository</name>
      <url>${snapshot.url}</url>
    </snapshotRepository>
</distributionManagement>
复制代码

使用jib-maven-plugin

我们最终目的是将项目打包为Docker镜像, 在完成发布配置后, 需要引入jib-maven-plugin打包插件

同样修改pom.xml:

<properties>
    <maven-jib-plugin.version>2.5.2</maven-jib-plugin.version>
    <docker.from.image>repository.harbor.com/library/java8-cn:latest@sha256:xxxx</docker.from.image>
    <docker.repository>repository.harbor.com/test</docker.repository>
</properties>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>${maven-jib-plugin.version}</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <from>
                        <image>${docker.from.image}</image>
                    </from>
                    <to>
                        <image>${docker.repository}/${project.artifactId}:${project.version}</image>
                    </to>
                    <container>
                        <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
                        <jvmFlags>
                            <jvmFlag>-Duser.timezone=GMT+8</jvmFlag>
                        </jvmFlags>
                        <volumes>
                            <volume>/app/config</volume>
                            <volume>/app/data</volume>
                        </volumes>
                        <workingDirectory>/app</workingDirectory>
                    </container>
                    <extraDirectories>
                        <paths>
                            <path>${project.basedir}/target/extra-directory/</path>
                        </paths>
                    </extraDirectories>
                    <allowInsecureRegistries>true</allowInsecureRegistries>
                    <containerizingMode>packaged</containerizingMode>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
复制代码

讲解几个需要注意的配置参数:

<from>: 基础镜像, 项目基于Java8环境, 所以使用java8-cn:latest@sha256:xxxx

这里需要注意的是, 我们需要指定image的digest, 可以在Harbor中查看:

image.png

<to>: 打包路径, 会将项目镜像发布到此路径

container: 容器相关配置, 比如我挂载了/app目录

增加Maven认证

完成上述配置后, 我们只需要在push镜像时增加Maven私服和Harbor的用户认证即可

我在Idea中替换了默认Maven为自己本机的Maven, 所以需要修改%MavenHome%/conf/setting.xml:

<servers>
    <server>
        <id>releases</id>
        <username>admin</username>
        <password>123456</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>admin</username>
        <password>123456</password>
    </server>
    <server>
        <id>repository.harbor.com</id>
        <username>admin</username>
        <password>123456</password>
    </server>
</servers>
复制代码

到此为止, 只需要执行Maven的deploy命令, 就可以把Spring Boot打包成Docker镜像发布到Harbor上啦

总结

最后梳理一遍流程:

  1. 拥有Maven仓库和Docker仓库, 并且有项目运行的基础镜像
  2. 修改pom文件增加发布配置
  3. 修改pom文件使用jib-maven-plugin插件进行打包
  4. 修改Maven的setting.xml, 增加仓库用户认证
  5. 执行Maven的deploy命令
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享