SuperAPI AI 工具集

container-native-deployment

部署与运维

查看项目

更新于 10-16 02:31

技能介绍

用途:在将 Spring Boot 3 应用打包为 OCI 镜像或 GraalVM 原生可执行文件时使用,帮助在 JVM 与原生两种部署模式间做选择,并规范容器化与原生构建流程。

主要能力: 容器镜像方面,推荐标准服务使用 Spring Boot 的 build-image 任务配合 Cloud Native Buildpacks;保持依赖层与应用层分离以最大化缓存复用;在可复现发布流水线中固定 builder 与 run-image 系列;在应用允许时以非 root 用户运行于只读文件系统;密钥仅在运行时注入,绝不烘焙进镜像;配置优雅关闭并使平台终止宽限期与应用超时对齐。 运行时行为方面,设置内存与 CPU 限制后验证 JVM 在该限制内的自适应表现;通过 Actuator 暴露独立的就绪与存活探针;对慢启动保留启动探针而非削弱存活探针;临时文件只写入显式可写位置。 原生镜像方面,使用 Spring AOT 与受支持的 GraalVM 原生构建工具;为分析无法推断的反射、资源、序列化或代理添加 RuntimeHints;避免运行时改变 bean 形态等封闭世界违规;运行原生集成测试,仅 JVM 测试通过并不充分。 供应链方面,生成 SBOM、扫描最终镜像并定期修补 builder/run 镜像;跨环境晋级使用不可变镜像摘要。

使用方式:示例见 examples/good-dockerfile 与 examples/bad-dockerfile。good 示例面向 Boot 3.3+,在 builder 阶段使用 jarmode=tools 提取;Boot 3.0-3.2 使用较旧的 -Djarmode=layertools ... extract 命令。普通 Maven package 不会自行创建 target/dependencies/ 或 target/application/ 目录。

适用场景:Spring Boot 3 服务的容器化交付、原生镜像构建与发布流水线。

限制与常见陷阱:把单个 fat jar 复制进可变 root 容器;将密钥烘焙进镜像层;为通过原生构建而添加宽泛反射配置;用存活探针测试所有依赖;未测量吞吐与构建成本就选原生;复制不存在的 target/dependencies 目录;在 Boot 3.0-3.2 上使用 jarmode=tools。官方来源见 Spring Boot 容器镜像与 Dockerfiles 文档及 Boot 3.3 发布说明。