| Options | temurin:17-jre-alpine | distroless/java17 |
|---|---|---|
| Shell disponible | Oui (sh) | Non |
| Package manager | Oui (apk) | Non |
| Utilisateur root | Oui par défaut | Nonroot fourni |
| Surface d'attaque | Moyenne | Minimale |
| Debug facile | Oui | Non |
| Usage recommandé | Dev / Debug | Production |
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY target/flashcards-*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
FROM gcr.io/distroless/java17-debian12
WORKDIR /app
COPY target/flashcards-*.jar app.jar
USER nonroot
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
| Image | Objectif |
|---|---|
| Dockerfile | Production sécurisée |
| Dockerfile.debug | Développement / Investigation |
Cela change la culture d'investigation.
Lors d'incident en production, cela peut compliquer l'analyse
FROM eclipse-temurin:17-jre-slim
WORKDIR /app
COPY target/flashcards-*.jar app.jar
RUN useradd -m appuser && chown -R appuser /app
USER appuser
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
docker build -f Dockerfile -t val7304/flashcards:prod .
# debug:
docker build -f Dockerfile.debug -t appuser/flashcards:debug .
Cela permet d'avoir: en Prod: Une image légère et sécurisée (distroless)
en local (debug/incident): L'image avec shell et outils installables (temurin-slim)
L'accès au shell devient un anti-pattern.
Et c'est précisément l'argument fort pour utiliser une image distroless
L'utilisation de distroless n'est pas un simple choix esthétique, c'est aussi une décision de sécurité et une discipline d'immutabilité
En dev, nous avions déjà activé:
health, info, metrics, mappings, env, configprops, loggers
En [staging] Ajoutez: ", heapdump" en fin de liste
management.endpoint.env.show-values=never
pour éviter la fuite de secretsEn [prod], ajoutez: ", threaddump" en fin de liste
Est une bonne pratique complémentaire sur une image non-distroless et, peut être une alternative à un Healthcheck géré par un orchestrateur (Docker Compose /Kubernetes)
ou, à un monitoring externe
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s CMD \
wget -qO- http://localhost:8080/actuator/health || exit 1
.git
.gitignore
target/
node_modules/
README.md