Leçon 22 : Optimisation des Couches d'Image et de la Mise en Cache
La construction efficace des images Docker repose fortement sur la compréhension de la manière dont Docker met en cache les couches. Si une instruction dans le Dockerfile n'a pas changé, Docker réutilise la couche existante, accélérant ainsi le processus de construction.
1. Ordonner Correctement les Instructions
Docker évalue les couches de haut en bas. Si une couche change, toutes les couches suivantes sont invalidées et doivent être reconstruites.
Stratégie : Placez les instructions qui changent le moins souvent (comme l'OS de base et les dépendances statiques) en haut, et les instructions qui changent le plus souvent (comme la copie du code d'application) en bas.
Mauvais Exemple (Forte Invalidité du Cache)
dockerfile COPY . /app # Le changement de code invalide tout ce qui suit RUN apt-get update && apt-get install -y ... RUN npm install # S'exécutera chaque fois que le code change
Bon Exemple (Mise en Cache Optimisée)
dockerfile
1. Installer les dépendances statiques (change rarement)
FROM python:3.11-slim
2. Copier les fichiers de définition des dépendances (par exemple, requirements.txt) (change rarement)
COPY requirements.txt /app/ WORKDIR /app RUN pip install -r requirements.txt # Mis en cache si requirements.txt ne change pas
3. Copier le code source de l'application (change fréquemment)
COPY . /app/
2. Réduire le Nombre de Couches (Enchaînement de RUN)
Comme discuté dans la Leçon 9, enchaînez les commandes dans une seule instruction RUN en utilisant && \ pour réduire le nombre total de couches. Chaque RUN crée une couche, ce qui ajoute des surcharges.
3. Utilisation de .dockerignore
Pour empêcher l'envoi de fichiers inutiles (comme l'historique .git, les node_modules, ou les fichiers temporaires locaux) au démon Docker pendant le contexte de construction, créez un fichier .dockerignore.
Contenu de .dockerignore
Dépendances et sortie compilée
**/node_modules pycache/ target/
Contrôle de source et métadonnées
.git .gitignore .vscode
Logs et fichiers temporaires
*.log tmp/
Cela accélère considérablement le processus de construction, en particulier pour les grands projets, en minimisant les données qui doivent être transférées.