关于 container-native-deployment
面向 Spring Boot 服务的部署 Skill,依据启动、内存、吞吐量和构建约束比较 JVM 与原生镜像。内容涵盖容器镜像构建、运行配置、原生镜像测试及供应链检查。
主要功能
- 01比较 JVM 与原生部署约束
- 02使用 Buildpacks 构建分层镜像
- 03配置探针与容器资源限制
- 04添加精确的 GraalVM RuntimeHints
- 05检查 SBOM 与镜像安全
适用场景
- 01通过基准测试选择部署模式
- 02准备可复现的 Spring Boot 镜像发布
- 03仅在运行时注入密钥以加固容器
- 04在 JVM 测试之外验证原生构建
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ rrezartprebreza/ spring-boot-skills --skill container-native-deployment安装后在 Claude Code 中输入/container-native-deployment确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlexamples/bad-dockerfilegood-dockerfile详细介绍
容器与原生部署
根据实测的启动时间、内存、吞吐量和构建约束,选择 JVM 或原生模式。
容器镜像
- 对于标准服务,优先使用 Spring Boot 的 build-image 任务和 Cloud Native Buildpacks。
- 将依赖层与应用层分开,以最大限度地复用缓存。
- 在可复现的发布流水线中固定构建器和运行镜像系列。
- 在应用允许的情况下,以非 root 用户身份运行,并使用只读文件系统。
- 在运行时提供密钥;切勿将凭据或环境文件打包进镜像。
- 配置优雅关闭,并使平台的终止宽限期与应用超时时间保持一致。
运行时行为
- 设置内存和 CPU 限制,然后验证 JVM 在这些限制下的运行时调优情况。
- 通过 Actuator 提供专用的就绪和存活探针。
- 对于初始化缓慢的情况,使用启动探针,而不是放宽存活探针。
- 仅在明确指定的可写位置写入临时文件。
原生镜像
- 使用 Spring AOT 和受支持的 GraalVM 原生构建工具。
- 对分析无法推断的反射、资源、序列化或代理,添加
RuntimeHints。 - 避免运行时 Bean 结构变更及其他违反封闭世界假设的操作。
- 运行原生集成测试;JVM 测试套件通过并不足够。
供应链
- 生成 SBOM,扫描最终镜像,并定期修补构建器和运行镜像。
- 在环境间晋级时使用不可变的镜像摘要。
示例
- 请参阅
examples/good-dockerfile和examples/bad-dockerfile。
良好示例面向 Boot 3.3+,并在构建器阶段使用 jarmode=tools 提取内容。对于 Boot
3.0-3.2,请使用较旧的 -Djarmode=layertools ... extract 命令。普通的 Maven 打包不会自行创建
target/dependencies/ 或 target/application/ 目录。
官方资料
- 容器镜像:https://docs.spring.io/spring-boot/reference/packaging/container-images/
- Dockerfile 和层提取:https://docs.spring.io/spring-boot/reference/packaging/container-images/dockerfiles.html
- Boot 3.3 tools jarmode:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.3-Release-Notes#cds-support
常见问题
- Agent 将一个大型 JAR 复制到可变的 root 容器中——请使用分层结构和非 root 运行时。
- Agent 将密钥打包进镜像层——仅在运行时注入密钥。
- Agent 为通过原生构建而添加宽泛的反射配置——请注册范围精确的运行时提示。
- Agent 使用存活探针测试每个依赖——对于会影响流量的依赖,请使用就绪探针。
- Agent 未测量吞吐量和构建成本就选择原生模式——请对两种部署模式进行基准测试。
- Agent 复制不存在的
target/dependencies目录——请在构建器阶段提取已打包的 JAR。 - Agent 在 Boot 3.0-3.2 上使用
jarmode=tools——在项目升级到 Boot 3.3 之前,请使用layertools。
评论
支持 Markdown