Test des modèles de fichiers Docker .dockerignore
Utilisez un script pour vérifier rapidement et facilement les répertoires et les fichiers qui seront inclus dans votre Docker image .
Voici un court article sur un sujet que je voulais faire il y a longtemps et pour lequel j'ai enfin trouvé du temps. Ce n'était pas vraiment un cas de TL;DR (Too Long ; n'a pas lu), mais plutôt quelque chose comme TLT;DR (Too Little Time ; n'a pas lu). Comme vous le savez probablement, le fichier Docker .dockerignore est utilisé pour éviter que certains fichiers et répertoires ne se retrouvent dans votre Docker image. Le fichier Docker .dockerignore est utilisé lorsque vous construisez un Docker image et consiste en des règles correspondant à des fichiers et/ou des répertoires.
Raisons de le faire :
- Réduction de la taille du fichier Docker image
- Plus rapide Docker image construit
- Éviter la divulgation des secrets
J'avais déjà un fichier .dockerignore , mais je cherchais maintenant un moyen facile de vérifier ce qui allait dans le Docker image.
Écrire des règles, exécuter un script, vérifier des fichiers
J'ai trouvé un bon article sur Internet et je l'ai mis dans un script. Il se comporte de la même manière que lorsque vous construisez votre Docker image , mais il utilise maintenant l'image busybox . Il produit la liste des répertoires et des fichiers qui sont inclus et quitte. Vous pouvez vérifier ces fichiers et si vous n'êtes pas satisfait, vous éditez le fichier .dockerignore et exécutez à nouveau le script.
Tous les crédits aux gars sur Stackoverflow, voir aussi les liens ci-dessous. J'ai nommé le script "dockerignore_test.sh" :
#!/bin/sh
# dockerignore_test.sh
# based on BMitch's answer from:
# How to test dockerignore file?
# https://stackoverflow.com/questions/38946683/how-to-test-dockerignore-file
# tested on: ubuntu 18.04 lts (desktop)
# with: Docker version 19.03.12, build 48a66213fe
# note: will create and delete temporary file "Dockerfile.build-context"
# instructions
#
# 1. put this script in the folder where the image is being built
# make it executable using chmod 755 dockerignore_test.sh
#
# 2. edit this script to change the build-context
# for me the build-context is './project' because
# my docker-compose.yaml file has lines:
# if the build-context is the current directory
# then change this to '.'
#
# web:
# image: ...
# ...
# build:
# context: ./project
#
# 3. edit the .dockerignore file and put it in the build-context directory
#
# 4. run script
# ./dockerignore_test.sh
# you should see list of files in build context
# these are the files that end up in your image
#
# 5. (optional) capture the list of files
# ./dockerignore_test.sh > images_files_list
#
# 6. if you see unwanted files, go back to step 3
#
cat <<EOF > Dockerfile.build-context
FROM busybox
COPY . /build-context
WORKDIR /build-context
CMD find .
EOF
docker build -f Dockerfile.build-context -t build-context ./project
docker run --rm -it build-context
rm Dockerfile.build-context
Qu'en est-il des règles .dockerignore ?
De nombreuses personnes sur Internet se plaignent que la documentation Docker sur le fichier .dockerignore n'est pas vraiment utile et j'ai également eu ce problème. En fin de compte, j'ai fait simple, j'ai exclu certains répertoires et les fichiers .pyc. Les répertoires eux-mêmes ne sont pas supprimés, seulement les fichiers et les sous-répertoires qu'ils contiennent. La règle est la suivante :
**/<directory name>/*
Les doubles astérisques au début signifient que le répertoire peut se trouver à tous les niveaux du chemin d'accès. L'astérisque à la fin signifie qu'il correspondra à tout ce qui se trouve dans le répertoire spécifié. Mon fichier .dockerignore ressemble à ceci :
# ./project/.dockerignore
#
# ignore directories
**/.pytest_cache/*
**/alembic/versions/*
**/misc/*
**/static/*
**/tmp/*
**/tests_frontend/*
# ignore files
**/*.pyc
Conclusion
L'utilisation du fichier Docker .dockerignore est essentielle pour la construction des Docker image. Le script présenté est un moyen facile de vérifier quels fichiers seront inclus dans le fichier Docker image.
Liens / crédits
Do not ignore .dockerignore (it’s expensive and potentially dangerous)
https://codefresh.io/docker-tutorial/not-ignore-dockerignore-2/
How to test dockerignore file?
https://stackoverflow.com/questions/38946683/how-to-test-dockerignore-file
En savoir plus...
Docker Docker-compose
Récent
- Masquer les clés primaires de la base de données UUID de votre application web
- Don't Repeat Yourself (DRY) avec Jinja2
- SQLAlchemy, PostgreSQL, nombre maximal de lignes par user
- Afficher les valeurs des filtres dynamiques SQLAlchemy
- Transfert de données sécurisé grâce au cryptage à Public Key et à pyNaCl
- rqlite : une alternative à haute disponibilité et dist distribuée SQLite
Les plus consultés
- Utilisation des Python's pyOpenSSL pour vérifier les certificats SSL téléchargés d'un hôte
- Utiliser UUIDs au lieu de Integer Autoincrement Primary Keys avec SQLAlchemy et MariaDb
- Utiliser PyInstaller et Cython pour créer un exécutable Python
- Connexion à un service sur un hôte Docker à partir d'un conteneur Docker
- SQLAlchemy : Utilisation de Cascade Deletes pour supprimer des objets connexes
- Flask RESTful API validation des paramètres de la requête avec les schémas Marshmallow