Applez Nous: +41 22 518 70 00
Chaque directive d’un Dockerfile crée une couche (layer) immuable dans le système de fichiers en superposition (OverlayFS). L’ordre des instructions est crucial : placez toujours les fichiers variant rarement (dépendances externes) avant le code source applicatif pour tirer parti du Layer Caching :
# Mauvaise pratique : Invalide le cache de npm install à chaque retouche de code
COPY . .
RUN npm install
# Bonne pratique : Réutilise le cache tant que package.json reste inchangé
COPY package*.json ./
RUN npm install
COPY . .
Le Multi-Stage Build sépare hermétiquement l’environnement lourd de compilation (contenant SDKs, compilateurs C/Go/Rust, outils de test) de l’image de livraison finale, qui ne contient que le binaire exécutable pur :
# ÉTAPE 1 : Environnement de compilation lourd
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /app/api-serveur .
# ÉTAPE 2 : Image d'exécution finale ultra-légère et sécurisée
FROM scratch
WORKDIR /
COPY --from=builder /app/api-serveur /api-serveur
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
# Exécution sous utilisateur non-root non privilégié
USER 10001:10001
EXPOSE 8080
ENTRYPOINT ["/api-serveur"]
Résultat : La taille de l’image passe de 850 Mo à seulement 15 Mo, éliminant par la même occasion 98% des vulnérabilités potentielles de paquets système non requis.
USER nonroot ou USER 1000..git/, node_modules/, les fichiers .env et les clés de chiffrement privées.# Scan de sécurité de l'image locale avec Trivy
trivy image --severity HIGH,CRITICAL educasuisse/api-service:latest
Système de fichiers en lecture seule : En production, démarrez vos conteneurs avec l’option
--read-onlypour empêcher tout attaquant d’écrire un exécutable malveillant dans le conteneur compromis.