关于 java-docker
java-docker 是帮助 Java 开发者将应用容器化的技能,侧重优化 Dockerfile 和容器中的 JVM 设置。它还涵盖镜像层优化、容器安全、健康检查与常见问题排查。
主要功能
- 01使用多阶段构建优化 Dockerfile
- 02配置容器中的 JVM 参数
- 03优化镜像层与依赖缓存
- 04应用非 root 和只读文件系统策略
- 05配置健康检查并扫描漏洞
适用场景
- 01为 Java 应用构建精简镜像
- 02按容器内存限制配置 JVM
- 03为生产容器加强安全措施
- 04排查 OOMKilled 或权限问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-java --skill java-docker安装后在 Claude Code 中输入/java-docker确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/config.yamlDockerfile.javaschema.jsonreferences/GUIDE.mdPATTERNS.mdscripts/validate.py详细介绍
Java Docker 技能
使用经过优化的 Dockerfile 和 JVM 设置对 Java 应用进行容器化。
概述
本技能涵盖 Java 的 Docker 最佳实践,包括多阶段构建、JVM 容器设置、安全加固和镜像层优化。
何时使用本技能
在以下情况下使用:
- 创建经过优化的 Java Dockerfile
- 为容器配置 JVM
- 实施安全最佳实践
- 缩减镜像大小
- 设置健康检查
涵盖主题
Dockerfile 优化
- 多阶段构建
- 镜像层缓存策略
- Spring Boot 分层 JAR
- 依赖缓存
JVM 容器设置
- UseContainerSupport
- MaxRAMPercentage
- GC 选择
- 在发生 OOM 时退出
安全
- 非 root 用户
- 只读文件系统
- 漏洞扫描
- 密钥处理
快速参考
# Multi-stage optimized Dockerfile
FROM eclipse-temurin:21-jdk-alpine AS builder
WORKDIR /app
# Cache dependencies
COPY pom.xml .
COPY .mvn .mvn
RUN mvn dependency:go-offline -B
# Build and extract layers
COPY src ./src
RUN mvn package -DskipTests && \
java -Djarmode=layertools -jar target/*.jar extract
# Runtime stage
FROM eclipse-temurin:21-jre-alpine
# Security: non-root user
RUN addgroup -S app && adduser -S app -G app
USER app
WORKDIR /app
# Copy layers in order of change frequency
COPY --from=builder /app/dependencies/ ./
COPY --from=builder /app/spring-boot-loader/ ./
COPY --from=builder /app/snapshot-dependencies/ ./
COPY --from=builder /app/application/ ./
# JVM container settings
ENV JAVA_OPTS="-XX:+UseContainerSupport \
-XX:MaxRAMPercentage=75.0 \
-XX:+ExitOnOutOfMemoryError \
-XX:+UseG1GC"
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=3s --start-period=30s \
CMD wget -qO- http://localhost:8080/actuator/health/liveness || exit 1
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS org.springframework.boot.loader.launch.JarLauncher"]
JVM 容器标志
# Recommended production settings
JAVA_OPTS="
-XX:+UseContainerSupport
-XX:MaxRAMPercentage=75.0
-XX:InitialRAMPercentage=50.0
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/heapdump.hprof
-XX:+UseG1GC
-Djava.security.egd=file:/dev/./urandom
"
基础镜像对比
| 镜像 | 大小 | 安全性 | 使用场景 |
|---|---|---|---|
| temurin:21-jre | ~200MB | 良好 | 通用场景 |
| temurin:21-jre-alpine | ~100MB | 良好 | 优化镜像大小 |
| distroless/java21 | ~80MB | 最佳 | 生产环境 |
安全最佳实践
# Non-root user
RUN addgroup -S app && adduser -S app -G app
USER app
# Read-only filesystem
# (Configure at runtime with --read-only)
# No shell access with distroless
FROM gcr.io/distroless/java21-debian12
# Health check
HEALTHCHECK --interval=30s --timeout=3s \
CMD wget -qO- localhost:8080/actuator/health || exit 1
故障排除
常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| OOMKilled | 堆内存 > 限制 | 设置 MaxRAMPercentage |
| 启动缓慢 | 镜像过大 | 使用多阶段构建 |
| 权限被拒绝 | 需要 root 权限 | 修复文件权限 |
| 无内存信息 | JVM 版本过旧 | 更新至 Java 11+ |
调试清单
□ Check container memory limits
□ Verify JVM sees container limits
□ Review health check configuration
□ Scan image for vulnerabilities
□ Test with resource constraints
用法
Skill("java-docker")
相关技能
java-maven-gradle- 构建集成java-microservices- K8s 部署
评论
支持 Markdown