这个插件的作用就是帮你自动生成跨全平台的镜像服务,无需再自己手动写Dockerfile文件了,它是基于buildpacks这个规范,有一系列的生命周期,和maven差不多意思。正常来说,如果你是在互联网的话,它会自动的检测你项目的语言,运行时环境(python、nodejs、jvm)等等,自动从网络下载对应的依赖,一键即可生成,实在是非常好用!

        它的一些生命周期和配置可以在https://github.com/paketo-buildpacks这里看到,首先spring-boot-maven-plugin2.5.2版本使用的默认构建器是paketobuildpacks:builder:base,这里我们可以去看看github上的配置GitHub - paketo-buildpacks/base-builder,主要是builder.toml配置文件,里面有很多不同语言运行时环境的构建包(这里定义了很多,实际执行时就会检测,使用特定的构建包) 。

        我是用java,所以就会用到paketo-buildpacks/java这里包,继续找https://github.com/paketo-buildpacks/java,我们看buildpack.toml文件,里面又有很多依赖,这里一般的spring-boot项目只会用到5个依赖("paketo-buildpacks/ca-certificates", "paketo-buildpacks/bellsoft-liberica", "paketo-buildpacks/executable-jar","paketo-buildpacks/dist-zip","paketo-buildpacks/spring-boot",),我们主要看bellsoft-liberica这个,这个是jdk相关的配置

        如果是这么简单,那就没必要写一篇博客了,我遇到的问题是需要在内部网络使用,这时候就会报错,它默认会从上面说的bellsoft-liberica/buildpack.toml里配置的uri下载,就会报错,这里找了半天,终于找到了答案,不过解决方案需要在spring-boot-maven-plugin的2.5.x以上版本才支持。maven的配置如下:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>2.5.2</version>
    <configuration>
        <image>
            <bindings>
                <binding>
                    /bellsoft-jdk-config:/platform/bindings/bellsoft-jdk-config
                </binding>
            </bindings>
        </image>
    </configuration>
</plugin>

这里binding的意思是在构建器(构建器实际上就是个镜像)运行时,带上--volume 参数,把本地的地址映射到容器里的地址,:前面是自己的配置,可以任意,后面是容器里的地址,是固定的。

那本地地址里需要一些配置,主要是一个名为type的文件,内容就是dependency-mapping,然后再是其他的文件,文件名是在paketo-buildpacks/bellsoft-liberica的buildpack.toml里的uri下面的sha256的值,内容就是你jdk的内部网络可下载地址,配置好之后就可以一键生成镜像啦

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐