1
0

chore: create docker artifacts

Signed-off-by: Alan Brault <alan.brault@visus.io>
This commit is contained in:
2026-06-05 07:40:10 -04:00
parent 08bc2b8918
commit e9f52fa230
3 changed files with 107 additions and 0 deletions
+22
View File
@@ -0,0 +1,22 @@
build/
.gradle/
.kotlin/
.idea/
*.iml
.vscode/
.editorconfig
.git/
.gitattributes
.gitignore
.env
.env.*
!.env.example
HELP.md
*.md
.DS_Store
Thumbs.db
+45
View File
@@ -0,0 +1,45 @@
# syntax=docker/dockerfile:1
# ── Stage 1: Builder ──────────────────────────────────────────────────────────
# eclipse-temurin:21-jdk-noble
FROM eclipse-temurin@sha256:81cecb98bcca2d5d5c3d496e71779073865db0d0bd776ecf434e017f20dac638 AS builder
WORKDIR /workspace
COPY gradle/ gradle/
COPY gradlew gradlew
COPY build.gradle.kts build.gradle.kts
COPY settings.gradle.kts settings.gradle.kts
COPY gradle.properties gradle.properties
RUN chmod +x gradlew && ./gradlew dependencies --no-daemon
# Source build
COPY src/ src/
RUN ./gradlew bootJar --no-daemon -x test -x ktlintCheck
# ── Stage 2: Runtime ─────────────────────────────────────────────────────────
# gcr.io/distroless/java21-debian12 — no shell, no package manager, minimal attack surface
# Predefined nonroot user UID/GID: 65532
FROM gcr.io/distroless/java21-debian12@sha256:f34fd3e4e2d7a246d764d0614f5e6ffb3a735930723fac4cfc25a72798950262 AS runtime
WORKDIR /app
# Glob matches fat jar (kotlin-api-0.0.1-SNAPSHOT.jar) but not -plain.jar
# --chown uses numeric UID:GID since distroless has no shell to resolve names
COPY --from=builder --chown=65532:65532 /workspace/build/libs/kotlin-api-*SNAPSHOT.jar app.jar
USER 65532
EXPOSE 8080
# Leave empty so Spring fails fast with a clear error if not provided at runtime.
ENV MONGODB_URI=""
ENV JWT_ENCRYPTION_SECRET=""
ENTRYPOINT ["/usr/bin/java", \
"-XX:+UseContainerSupport", \
"-XX:MaxRAMPercentage=75.0", \
"-Djava.security.egd=file:/dev/./urandom", \
"-jar", "/app/app.jar"]
+40
View File
@@ -0,0 +1,40 @@
services:
app:
build: .
ports:
- "8080:8080"
environment:
# Override the local-dev default — "mongodb" resolves to the service below
MONGODB_URI: mongodb://mongodb:27017/kotlin-api
# Interpolated from .env (copy .env.example → .env and fill in the value)
JWT_ENCRYPTION_SECRET: ${JWT_ENCRYPTION_SECRET}
depends_on:
mongodb:
condition: service_healthy
networks:
- backend
mongodb:
# mongo:8.0
image: mongo@sha256:f93b9015613e393b76fdf4fb71f3435ece6a3b46cc56c62c08875ad08442aa4c
ports:
- "27017:27017"
environment:
MONGO_INITDB_DATABASE: kotlin-api
volumes:
- mongodb_data:/data/db
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
networks:
- backend
networks:
backend:
driver: bridge
volumes:
mongodb_data: