Probando los patrones de archivo Docker .dockerignore
Utiliza un script para comprobar los directorios y archivos que se incluirán en tu Docker image de forma rápida y fácil.
Este es un corto post sobre algo que quise hacer hace mucho tiempo y para lo cual finalmente encontré algo de tiempo. En realidad no se trataba de un caso de TLT;DR (Too Long; no lo leí), sino más bien de algo como TLT;DR (Too Little Time; no lo leí). Como probablemente sepas, el archivo Docker .dockerignore se utiliza para evitar que ciertos archivos y directorios terminen en tu Docker image. El archivo Docker .dockerignore se utiliza cuando se construye un Docker image y consiste en reglas que coinciden con los archivos y/o directorios.
Razones para hacer esto:
- Reducción del tamaño de Docker image
- Más rápido Docker image construye
- Evita la exposición de los secretos
Ya tenía un archivo .dockerignore pero ahora buscaba una forma fácil de comprobar lo que iría en el Docker image.
Escribir reglas, ejecutar el script, comprobar los archivos
Encontré un buen post en Internet y lo puse en un guión. Lo que esto hace es comportarse como cuando estás construyendo tu Docker image pero ahora usa la imagen busybox . Da salida a la lista de directorios y archivos que están incluidos y sale. Puede revisar estos archivos y si no está satisfecho, edita el archivo .dockerignore y ejecuta el script de nuevo.
Todos los créditos a los chicos en Stackoverflow, ver también los enlaces de abajo. Nombré el 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é hay de las reglas de .dockerignore ?
Mucha gente en Internet se queja de que la documentación de Docker en el archivo .dockerignore no es realmente útil y yo también tuve este problema. Al final lo mantuve simple, excluí algunos directorios y los archivos .pyc. Los directorios en sí no están eliminados, sólo los archivos y subdirectorios en él. La regla para esto es:
**/<directory name>/*
El doble asterisco al principio significa que el directorio puede estar en todos los niveles de la ruta. El asterisco al final significa que coincidirá con todo en el directorio especificado. Mi archivo .dockerignore se ve así:
# ./project/.dockerignore
#
# ignore directories
**/.pytest_cache/*
**/alembic/versions/*
**/misc/*
**/static/*
**/tmp/*
**/tests_frontend/*
# ignore files
**/*.pyc
Conclusión
El uso del archivo Docker .dockerignore es esencial cuando se construyen Docker images. El guión presentado es una forma fácil de comprobar qué archivos se incluirán en el Docker image.
Enlaces / créditos
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
Leer más
Docker Docker-compose
Recientes
- Cómo ocultar las claves primarias de la base de datos UUID de su aplicación web
- Don't Repeat Yourself (DRY) con Jinja2
- SQLAlchemy, PostgreSQL, número máximo de filas por user
- Mostrar los valores en filtros dinámicos SQLAlchemy
- Transferencia de datos segura con cifrado de Public Key y pyNaCl
- rqlite: una alternativa de alta disponibilidad y dist distribuida SQLite
Más vistos
- Usando Python's pyOpenSSL para verificar los certificados SSL descargados de un host
- Usando UUIDs en lugar de Integer Autoincrement Primary Keys con SQLAlchemy y MariaDb
- Usando PyInstaller y Cython para crear un ejecutable de Python
- Conectarse a un servicio en un host Docker desde un contenedor Docker
- SQLAlchemy: Uso de Cascade Deletes para eliminar objetos relacionados
- Flask RESTful API validación de parámetros de solicitud con esquemas Marshmallow