java-docker について
java-dockerは、Javaアプリケーションをコンテナ化する開発者向けのスキルで、Dockerfileの最適化とコンテナ内のJVM設定を扱います。イメージレイヤー、コンテナのセキュリティ、ヘルスチェック、一般的な問題の調査も説明します。
主な機能
- 01マルチステージビルドによるDockerfile最適化
- 02コンテナ内のJVMオプション設定
- 03イメージレイヤーと依存キャッシュの最適化
- 04非rootユーザーと読み取り専用ファイルシステムの適用
- 05ヘルスチェック設定と脆弱性スキャン
活用シーン
- 01Javaアプリケーションの小さなイメージ作成
- 02コンテナのメモリー制限に応じたJVM設定
- 03本番コンテナのセキュリティ強化
- 04OOMKilledや権限問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
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 アプリケーションをコンテナ化します。
概要
このスキルでは、マルチステージビルド、JVM のコンテナ設定、セキュリティ強化、レイヤーの最適化など、Java 向けの Docker のベストプラクティスを扱います。
このスキルを使用するタイミング
次のような場合に使用します。
- 最適化された 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 対応