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

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.

22 septiembre 2020
En Docker
post main image
https://unsplash.com/@mira09

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

Deje un comentario

Comente de forma anónima o inicie sesión para comentar.

Comentarios

Deje una respuesta.

Responda de forma anónima o inicie sesión para responder.