Retour au cours

Leçon 22 : Optimisation des Couches d'Image et de la Mise en Cache

Docker, de zéro à héros : Le cours complet sur la conteneurisation pour débutants

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.