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.
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
Lees meer
Docker Docker-compose
Recent
- Database UUID primaire sleutels van je webapplicatie verbergen
- Don't Repeat Yourself (DRY) met Jinja2
- SQLAlchemy, PostgreSQL, maximum aantal rijen per user
- Toon de waarden in SQLAlchemy dynamische filters
- Veilige gegevensoverdracht met Public Key versleuteling en pyNaCl
- rqlite: een alternatief voor SQLite met hoge beschikbaarheid en distributed
Meest bekeken
- Met behulp van Python's pyOpenSSL om SSL-certificaten die van een host zijn gedownload te controleren
- Gebruik van UUIDs in plaats van Integer Autoincrement Primary Keys met SQLAlchemy en MariaDb
- Maak verbinding met een dienst op een Docker host vanaf een Docker container
- PyInstaller en Cython gebruiken om een Python executable te maken
- SQLAlchemy: Gebruik van Cascade Deletes om verwante objecten te verwijderen
- Flask RESTful API verzoekparametervalidatie met Marshmallow-schema's