El contexto de build

Clase 30 de 33Curso de Docker

Contenido del curso

Resumen

¿Qué es el contexto de build en Docker?

Cuando trabajamos con Docker, un concepto crucial que debemos manejar es el contexto de build. Este se refiere a que, durante la construcción de una imagen, Docker monta temporalmente un sistema de archivos incluyendo todos los archivos disponibles en la ruta que le especificamos al comando docker build. Por defecto, este comando toma el directorio actual, representado por un punto ('.') como argumento. Esto permite a Docker tener acceso a los archivos necesarios para la construcción de la imagen, asegurándose de que el proceso de build no acceda a partes del sistema de archivos fuera de su alcance.

En esencia, el contexto de build es la manera en la que Docker controla y limita el acceso a los archivos, garantizando un entorno seguro durante la construcción de imágenes.

¿Cómo optimizar el contexto de build?

Contar con un contexto de build optimizado es fundamental para prevenir que se incluyan archivos innecesarios que hagan que el contexto sea más grande de lo requerido. Esto es particularmente importante cuando se trabaja con aplicaciones que tienen muchas dependencias como node_modules. A continuación explicamos cómo optimizar este contexto.

Uso del archivo Dockerignore

Así como Git utiliza .gitignore para excluir archivos del control de versiones, Docker utiliza .dockerignore para indicar qué archivos o directorios deben ser excluidos del contexto de build.

Por ejemplo, si tienes un directorio node_modules, este puede incluir gran cantidad de archivos no necesarios para la imagen final. Al incluir node_modules en .dockerignore, evitamos que estos archivos sean copiados al contexto de build, reduciendo así el peso innecesario de las imágenes.

# Contenido de .dockerignore node_modules Dockerfile docker-compose.yml

Este archivo .dockerignore hace que el contexto de build sea más pequeño, ya que excluye directorios grandes como node_modules y archivos que no deberían estar en la imagen final como Dockerfile o docker-compose.yml.

Ejemplo práctico

Al construir una imagen sin un .dockerignore configurado adecuadamente, puedes terminar con un contexto de build significativamente pesado:

docker build -t prueba . # Output: contexto de build ocupa 11MB incluyendo node_modules

Al actualizar el archivo .dockerignore y construir de nuevo:

# Añadir node_modules a .dockerignore echo 'node_modules' > .dockerignore docker build -t prueba . # Output: el contexto de build ahora ocupa 128KB

Esto demuestra cómo un contexto optimizado puede ahorrar tiempo y espacio, crucial cuando se despliega a entornos de producción.

¿Por qué es importante gestionar el contexto de build?

Gestionar adecuadamente el contexto de build es vital para:

  1. Seguridad: Evitar que se incluyan datos sensibles o archivos innecesarios que podrían exponerse durante el build.

  2. Eficiencia: Reducir el tamaño de las imágenes y acelerar el proceso de build, optimizando así el uso de recursos y tiempo.

  3. Repetibilidad: Asegurar que las imágenes construidas en diferentes entornos sean consistentes y funcionen como se espera.

Al entender y gestionar el contexto de build, mejoras la calidad de tus imágenes Docker, promoviendo una mejor práctica de desarrollo de software con contenedores.


Permíteme animarte a seguir profundizando en Docker y el arte de la creación de imágenes. Si continúas refinando tus habilidades en el manejo del contexto de build y optimización, te convertirás en un experto en el manejo de contenedores de manera eficiente y segura. ¡Sigue adelante, la práctica hace al maestro!