使用Cloud Native Buildpacks构建镜像时如何添加自定义文件及安装额外包
Cloud Native Buildpacks在Spring Boot场景下的两类需求实现方案
1. 构建过程中添加自定义文件到镜像文件系统
常用的实现方式有两种:
- 基于
source-uploadbuildpack挂载文件:
提前在本地创建对应目录,目录结构和镜像内的目标路径完全对应,比如你要把custom.properties放到镜像的/app/config路径,本地就创建./extra-files/app/config/custom.properties。然后在Spring Boot构建插件(Maven/Gradle)中引入paketo-buildpacks/source-upload,同时添加目录绑定,参考Maven配置:
构建时buildpack会自动把绑定目录下的所有文件按目录结构复制到镜像根路径。<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <buildpacks> <buildpack>urn:cnb:builder:paketo-buildpacks/source-upload</buildpack> </buildpacks> <bindings> <binding>./extra-files:/platform/bindings/files</binding> </bindings> </configuration> </plugin> - 基于分层Jar自定义层:
如果你已经开启了Spring Boot的分层Jar构建,可将自定义文件放到单独的层目录,在插件的<layers>配置中包含该目录,CNB会自动将该层内容合并到镜像文件系统中。
2. 构建镜像时安装额外软件包
注意:Spring Boot默认使用的Paketo构建器基于Ubuntu系统,软件包适配apt包管理体系
- 安装apt源内的软件包:
用Paketo官方的aptbuildpack即可实现,步骤如下:- 本地创建
./apt-config目录,目录下新增两个文件:type:文件内容写aptapt-packages:每行写一个需要安装的包名,比如curl、vim、net-tools
- 修改Spring Boot构建插件配置,引入apt buildpack并添加目录绑定,参考Maven配置:
构建时会自动读取包列表执行安装。<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <buildpacks> <buildpack>urn:cnb:builder:paketo-buildpacks/apt</buildpack> <buildpack>urn:cnb:builder:paketo-buildpacks/java</buildpack> </buildpacks> <bindings> <binding>./apt-config:/platform/bindings/apt</binding> </bindings> </configuration> </plugin> - 本地创建
- 安装非apt源的自定义二进制包:
可以自行编写轻量自定义buildpack,逻辑仅需要将二进制文件下载后放到镜像的/usr/local/bin或者自定义的/layers路径下即可,符合CNB生命周期规范即可生效。
不建议在镜像启动阶段执行软件包安装操作,会拉长启动时长,也不符合不可变镜像的规范
内容的提问来源于stack exchange,提问作者Saheera Eranhikkal
相关产品推荐
相关产品推荐

