Un dernier fichier pour la route .dockerignore

Ignorer, c'est parfois la meilleur des réponses.

DONNE MOI LE RÉSUMÉ

Si tu travailles dans des projets où il y a déjà docker, tu as peut-être déjà vu un fichier qui s’appelle .dockerignore.

Ce fichier ressemble en tout point au fichier .gitignore et permet de définir des fichiers à exclure lors de la construction de notre image.

Par exemple, disons que nous avons un Dockerfile qui ressemble au suivant

...
COPY ./ ./
...

Par défaut, l’ensemble des fichiers du contexte courant va être copié dans le conteneur. Ce n'est pas toujours ce que l’on veut, car si quelque ne fait pas attention, il pourrait copier des fichiers d’environnement et les publier sans faire attention dans le registry.

Pour contrer cela, on peut indiquer dans le fichier .dockerignore l’exclusion des fichiers .env

*.env

Lors du build, docker commence par regarder l’existence du ou des fichiers .dockerignore. S’il existe, les fichiers à exclure seront garder en mémoire, ce qui évitera de leak des fichiers ou de copier des fichiers trop volumineux inutiles par exemple.

La syntaxe du .dockerignore est la suivante :

# Indique un commentaire
*.env # L'étoile indique n'importe quel répétition de caractères, ici cela match tous les fichiers ayant pour terminaison .env dans ce niveau de dossier
?.txt # Le point d'interrogation indique un seul caractères. Ici cela match les a.txt, b.txt mais pas les babar.txt ou babar.toto
*/*/temp* # Indique n'importe quel fichier dans n'importe quel sous arborescence contenant le mot temp

Bien sûr, on peut combiner ces éléments ensemble, et .env, .txt et temp ne sont que des exemples. Voici quelques autres exemples

Exemple 1 : je veux exclure tous les fichiers babar-<chiffre> (ex: babar-1, babar-2…)

*/**/babar-?

Exemple 2 : j’exclus tout le répertoire node_modules

node_modules

De manière générale, le fichier .gitignore et .dockerignore seront très semblables de ce genre de dépôt.

Une dernière bonne pratique pour la route : minimise un maximum l’utilisation de COPY ./ ./. Privilégie toujours la copie explicite de chaque dossier pour être certain de ne pas copier des éléments que l’on ne souhaite pas par défaut.

Takeaways

Le fichier .dockerignore permet d’indiquer à docker des fichiers à exclure lors de la copie d’élément vers le conteneur.

Ce fichier repose sur la même syntaxe que le fichier .gitignore

De fait, ces deux fichiers sont très souvent quasiment identiques.

On privilégie un maximum la copie de fichier explicites, plutôt que la copie fainéante COPY ./ ./. Cela permet d’éviter de leak / de copier des fichiers sans le vouloir dans le conteneur.