angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

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 .

22 septembre 2020
Dans Docker
post main image
https://unsplash.com/@mira09

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

Laissez un commentaire

Commentez anonymement ou connectez-vous pour commenter.

Commentaires

Laissez une réponse

Répondez de manière anonyme ou connectez-vous pour répondre.