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

Het testen van de Docker bestandpatronen .dockerignore

Gebruik een script om de mappen en bestanden die in uw Docker image worden opgenomen snel en eenvoudig te controleren.

22 september 2020
In Docker
post main image
https://unsplash.com/@mira09

Dit is een kort berichtje over iets wat ik al lang geleden wilde doen en waarvoor ik eindelijk wat tijd heb gevonden. Het was niet echt een geval van TL;DR (Too Long; heeft niet gelezen), maar meer zoiets als TLT;DR (Too Little Time; heeft niet gelezen). Zoals u waarschijnlijk weet, wordt het Docker bestand .dockerignore gebruikt om te voorkomen dat bepaalde bestanden en directories in uw Docker image terecht komen. Het bestand Docker .dockerignore wordt gebruikt wanneer u een Docker image bouwt en bestaat uit regels die overeenkomen met bestanden en/of mappen.

Redenen om dit te doen:

  • Verkleining van Docker image grootte
  • Snellere Docker image bouwt
  • Vermijdt blootstelling van geheimen

Ik had al een .dockerignore bestand, maar nu was ik op zoek naar een gemakkelijke manier om te controleren wat er in de Docker image zou komen.

Schrijf regels, voer script uit, controleer bestanden

Ik vond een leuke post op het internet en zette het in een script. Wat dit doet is zich gedragen als je je Docker image aan het bouwen bent, maar nu gebruikt het de busybox afbeelding. Het geeft de lijst met mappen en bestanden die zijn opgenomen en afgesloten. U kunt deze bestanden controleren en als u niet tevreden bent, bewerkt u het .dockerignore -bestand en voert u het script opnieuw uit.

Alle credits voor de jongens op Stackoverflow, zie ook de links hieronder. Ik heb het script 'dockerignore_test.sh' genoemd:

#!/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

Hoe zit het met de .dockerignore regels?

Veel mensen op het internet klagen over de Docker documentatie over het .dockerignore bestand is niet echt nuttig en ik had ook dit probleem. Uiteindelijk heb ik het gewoon simpel gehouden, ik heb een aantal directories en de .pyc-bestanden uitgesloten. De directories zelf worden niet verwijderd, alleen de bestanden en subdirectories erin. De regel hiervoor is:

**/<directory name>/*

De dubbele asterisken aan het begin betekenen dat de directory op elk niveau in het pad kan staan. De asterisk aan het einde betekent dat het overeenkomt met alles in de gespecificeerde directory. Mijn .dockerignore bestand ziet er zo uit:

# ./project/.dockerignore
#
# ignore directories
**/.pytest_cache/*
**/alembic/versions/*
**/misc/*
**/static/*
**/tmp/*
**/tests_frontend/*
# ignore files
**/*.pyc

Conclusie

Het gebruik van het bestand Docker .dockerignore is essentieel bij het bouwen van Docker images. Het gepresenteerde script is een eenvoudige manier om te controleren welke bestanden in de Docker image worden opgenomen.

Links / credits

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

Laat een reactie achter

Reageer anoniem of log in om commentaar te geven.

Opmerkingen

Laat een antwoord achter

Antwoord anoniem of log in om te antwoorden.