Skip to content

feat(java): add Java Dockerfile templates#16

Merged
kssd merged 2 commits into
mainfrom
worktree-java-templates
May 14, 2026
Merged

feat(java): add Java Dockerfile templates#16
kssd merged 2 commits into
mainfrom
worktree-java-templates

Conversation

@kssd
Copy link
Copy Markdown
Owner

@kssd kssd commented May 14, 2026

Summary

  • Implements issue [feat] Java Dockerfile templates #14: Java Dockerfile templates with Maven/Gradle dep-caching, GraalVM Native Image, Chainguard, Lambda, and devcontainer variants
  • Dockerfile.javaeclipse-temurin:21-jdk-jammy builder with ARG BUILD_TOOL=maven|gradle; dep manifests (pom.xml / build.gradle) copied before source for layer-cache optimisation; runtime gcr.io/distroless/java21-debian12:nonroot
  • Dockerfile.java.nativeghcr.io/graalvm/native-image-community:21-ol9 builder compiles to a native binary via mvn -Pnative native:compile; runtime distroless/cc-debian12:nonroot (glibc-linked)
  • Dockerfile.java.chainguardcgr.dev/chainguard/maven builder + cgr.dev/chainguard/jre runtime; ARG BASE_TAG=latest avoids DL3007; digest-pinning documented in header
  • Dockerfile.lambdaeclipse-temurin builder + public.ecr.aws/lambda/java:21; SnapStart notes in comments
  • Dockerfile.devcontainermcr.microsoft.com/devcontainers/java:1-21-bookworm with Gradle (pinned), jq, curl; apt versions pinned (DL3008 clean)
  • .devcontainer/devcontainer.json — Language Support for Java, Maven, Gradle, Test Runner, Spring Initializr, Spring Boot extensions
  • .dockerignore — excludes target/, build/, .gradle/, *.class, stale *.jar
  • README.md — JVM vs GraalVM trade-off table, Maven/Gradle dep-cache patterns, Spring Boot layered JARs, Lambda SnapStart, digest-pinning workflow, JLink custom JRE docs, hardening checklist
  • Root README.md — Java added to intro sentence and ecosystems list; removed from "Coming soon"

Test plan

  • npm run lint passes (markdownlint, hadolint, prettier — all clean)
  • docker build --build-arg BUILD_TOOL=maven -f dockerfiles/java/Dockerfile.java . in a Maven project
  • docker build --build-arg BUILD_TOOL=gradle -f dockerfiles/java/Dockerfile.java . in a Gradle project
  • Verify dep-cache layer: second build after a source-only change skips mvn dependency:go-offline
  • docker build --build-arg APP_NAME=<bin> -f dockerfiles/java/Dockerfile.java.native . in a Spring Boot 3 project with native profile
  • Open dockerfiles/java/ in VS Code Dev Containers and verify extensions load

Closes #14

kssd added 2 commits May 14, 2026 21:24
Implements issue #14. Covers JVM and GraalVM Native Image workflows
with Maven/Gradle dep-caching, distroless runtimes, and a devcontainer.

- Dockerfile.java: eclipse-temurin:21-jdk-jammy builder with ARG
  BUILD_TOOL=maven|gradle; dep manifests copied before source for
  layer-cache optimisation; runtime gcr.io/distroless/java21-debian12:nonroot
- Dockerfile.java.native: GraalVM native-image-community:21-ol9 builder
  compiles to a native binary; runtime distroless/cc-debian12:nonroot
- Dockerfile.java.chainguard: cgr.dev/chainguard/maven builder +
  cgr.dev/chainguard/jre runtime; ARG BASE_TAG=latest avoids DL3007;
  digest-pinning documented
- Dockerfile.lambda: eclipse-temurin builder + public.ecr.aws/lambda/java:21;
  SnapStart notes included
- Dockerfile.devcontainer: mcr.microsoft.com/devcontainers/java:1-21-bookworm
  with Gradle (pinned), jq, curl; apt versions pinned (DL3008)
- .devcontainer/devcontainer.json: Language Support for Java, Maven, Gradle,
  Test Runner, Spring Initializr, Spring Boot extensions
- .dockerignore: excludes target/, build/, .gradle/, *.class, stale *.jar
- README.md: JVM vs GraalVM trade-off table, Maven/Gradle dep-cache
  patterns, Spring Boot layered JARs, Lambda SnapStart, digest-pinning,
  JLink custom JRE docs, hardening checklist

Closes #14
The builder stage inherits from an ARG-constructed alias (${BUILD_TOOL}-deps).
Hadolint treats the variable reference as an untagged image — adding a
per-line ignore since the tag concept does not apply to internal stages.
@kssd kssd merged commit f031057 into main May 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] Java Dockerfile templates

1 participant