🛢️Parcours Fioul GroupéDocker · Chapitre 03
Accueil › Docker › Chapitre 03
Chapitre 03 / 08

Écrire un Dockerfile

Un Dockerfile décrit comment construire l'image de ton application. On voit les instructions clés, puis on empaquette l'API Spring en une image légère avec un build multi-étapes.

1 Notion

Les instructions principales

InstructionRôle
FROMimage de base (ex. eclipse-temurin:21-jre)
WORKDIRrépertoire de travail dans l'image
COPYcopier des fichiers du projet dans l'image
RUNexécuter une commande à la construction
EXPOSEdocumenter le port utilisé
ENTRYPOINT / CMDcommande lancée au démarrage du conteneur
2 Exemple

Un Dockerfile simple

FROM eclipse-temurin:21-jre
WORKDIR /app
COPY target/fioul-api.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app/app.jar"]
3 Commande

Construire l'image

docker build -t fioul-api:1.0 .
docker run -d -p 8080:8080 fioul-api:1.0
Le contexte & le cache — le . est le « contexte » envoyé à Docker. Chaque instruction crée une couche mise en cache : placer ce qui change le moins en haut accélère les reconstructions.
4 Pratique

Build multi-étapes pour l'API

On compile dans l'image (étape build) puis on ne garde que le jar dans une image finale légère (sans Maven ni JDK complet).

# étape 1 : compilation
FROM maven:3-eclipse-temurin-21 AS build
WORKDIR /src
COPY . .
RUN mvn -B clean package -DskipTests
# étape 2 : image finale légère
FROM eclipse-temurin:21-jre
WORKDIR /app
COPY --from=build /src/target/fioul-api-*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app/app.jar"]
🛢️ Sur le projet Fioul Groupé

Écris ce Dockerfile multi-stage pour l'API Spring du projet, ajoute un .dockerignore (chapitre 8), et construis fioul-api:1.0. Tu obtiens une image portable qui embarque l'API — prête à être orchestrée avec la base au chapitre 7.

À retenir
  • Le Dockerfile décrit la construction de ton image (FROM, COPY, RUN, ENTRYPOINT).
  • docker build -t nom:tag . ; couches mises en cache.
  • Le multi-stage produit une image finale légère (compile puis ne garde que l'artefact).
← Chapitre 02