Passer au contenu principal

.dockerignore : le filtre indispensable pour des images Docker propres et légères

Quand vous construisez une image Docker, tout le répertoire où se trouve votre Dockerfile est envoyé au démon Docker comme contexte de build.

Et sauf indication contraire, Docker copie tout ce contexte dans l’image.

Résultat : sans précaution, vos images peuvent embarquer vos tests, vos caches, vos secrets ou même votre .git/.

C’est ici que le fichier .dockerignore entre en scène.

Lorsqu’on exécute une commande comme :

docker build -t mon-app .

le point . indique à Docker : “Envoie tout le contenu de ce dossier au démon Docker pour construire l’image.”

Le fichier .dockerignore sert justement à filtrer ce contenu : il exclut certains fichiers avant même qu’ils ne soient envoyés au démon Docker.

Ainsi, les instructions COPY et ADD du Dockerfile ne voient que les fichiers restants dans ce contexte allégé.

Les avantages du .dockerignore

1. Réduction de la taille des images

En excluant les répertoires comme :

.git/
node_modules/
vendor/
var/cache/
tests/

on évite d’ajouter des centaines de mégaoctets inutiles à l’image finale.

2. Build plus rapide et cache plus efficace

Docker met en cache chaque instruction du Dockerfile (comme RUN, COPY ou ADD) sous forme de couches.

Lorsqu’on relance un build, Docker réutilise les couches existantes tant que le contenu et les fichiers utilisés par ces instructions n’ont pas changé.

En revanche, si un seul fichier du contexte de build est modifié, la couche correspondante ainsi que toutes celles qui la suivent doit être reconstruite. Cela peut considérablement rallonger le temps de compilation.

C’est ici que le fichier .dockerignore devient essentiel : en excluant les fichiers inutiles (logs, caches, tests, dépendances locales, etc.), il réduit la taille du contexte envoyé au démon Docker et limite les changements détectés par le système de cache.

Résultat :

  • moins de données à transférer.

  • moins de couches invalidées.

  • Des builds beaucoup plus rapides.

3. Sécurité renforcée

Éviter de copier des fichiers sensibles

.env
id_rsa
private.pem

empêche toute fuite accidentelle de secrets dans l’image.

4. Couches Docker mieux optimisées

Dans un Dockerfile, on installe souvent les dépendances avant de copier le reste du code :

COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader --no-scripts
COPY . .

Si le dossier vendor/ est exclu dans le .dockerignore, il ne sera pas copié lors du COPY . ..

Cela évite d’écraser les dépendances déjà installées pendant l’étape précédente.

En revanche, si vendor/ n’est pas dans le .dockerignore, Docker le copiera et remplacera le contenu existant, annulant ainsi l’optimisation.

Exemple de .dockerignore

# Dépendances locales
node_modules/
vendor/

# Données temporaires et caches
var/cache/
var/logs/

# Tests et documentation
tests/
docs/

# Secrets et fichiers locaux
.env*
*.pem
*.key

# Outils de versionnement
.git/
.gitignore