mcpField
J
java-docker

java-docker

github.com/pluginagentmarketplace云与 DevOps41263 次安装42 周前更新
代码仓库

关于 java-docker

java-docker 是帮助 Java 开发者将应用容器化的技能,侧重优化 Dockerfile 和容器中的 JVM 设置。它还涵盖镜像层优化、容器安全、健康检查与常见问题排查。

主要功能

  1. 01使用多阶段构建优化 Dockerfile
  2. 02配置容器中的 JVM 参数
  3. 03优化镜像层与依赖缓存
  4. 04应用非 root 和只读文件系统策略
  5. 05配置健康检查并扫描漏洞

适用场景

  1. 01为 Java 应用构建精简镜像
  2. 02按容器内存限制配置 JVM
  3. 03为生产容器加强安全措施
  4. 04排查 OOMKilled 或权限问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-java --skill java-docker

安装后在 Claude Code 中输入/java-docker确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
config.yaml
Dockerfile.java
schema.json
references/
GUIDE.md
PATTERNS.md
scripts/
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