Curso de Docker Avanzado

Qué es el build context en Docker

Curso de Docker Avanzado

Contenido del curso

Optimización Avanzada en Docker

Orquestación

Qué es el build context en Docker

Resumen

El build context en Docker define el área de archivos a la que tu Dockerfile tiene acceso al construir una imagen. Entender este concepto te ayuda a crear imágenes más ligeras, seguras y listas para producción, evitando que archivos innecesarios se cuelen en tu despliegue.

Qué es el build context en Docker

Cuando ejecutas docker build, el motor de Docker no trabaja con todo tu disco: trabaja con un contexto específico que tú le indicas. Ese contexto es la carpeta donde Docker puede leer archivos para construir la imagen.

La pista está en el famoso puntito al final del comando. Ese . no es decoración: le dice a Docker dónde buscar el Dockerfile y qué archivos puede tocar.

¿Qué significa el punto en docker build? Es el indicador de la ubicación del Dockerfile y del build context. Le dice a Docker: trabaja con todo lo que esté en esta carpeta y nada más.

Cómo organizar tu proyecto con Dockerfile fuera del código

En proyectos reales no encontrarás el Dockerfile mezclado con tu código fuente. La práctica habitual es separarlo así:

  • Una carpeta raíz del proyecto, por ejemplo api-node.
  • Dentro, una carpeta src con todo el código.
  • En la raíz, junto a package.json y package.lock, vive el Dockerfile.

Con esa estructura, cuando ejecutas docker build desde la raíz del proyecto usando el punto, Docker tiene acceso a src, a los archivos de Node y al propio Dockerfile. Todo lo que esté dentro de api-node queda dentro de la jurisdicción del build context.

Cómo apuntar a un Dockerfile en otra carpeta

No siempre vas a parado dentro de la carpeta del Dockerfile. A veces tu terminal está un nivel arriba y necesitas señalarle a Docker dónde mirar.

En lugar del punto, puedes pasar la ruta de la carpeta. Por ejemplo, parado en build-context:

bash docker build -t aplicacion-node ./api-node

Eso le dice a Docker dos cosas a la vez: dónde está el Dockerfile y cuál es la carpeta que define el build context. Si pones solo el punto desde fuera, Docker te responderá que no encuentra el Dockerfile.

¿Para qué sirve apuntar a una carpeta específica en docker build? Sirve para acotar el área de acceso. Solo los archivos dentro de esa carpeta entran al contexto, lo que reduce peso y evita que documentos o assets innecesarios se cuelen en la imagen.

Por qué importa la regla del build context acotado

La regla es simple: todo lo necesario para construir tu imagen debe estar dentro del build context, y todo lo que sobre debería quedarse fuera. Si tienes documentación, imágenes de marketing o archivos de configuración local que no aportan a la imagen, déjalos fuera de la carpeta a la que apunta Docker.

Esto te da tres beneficios concretos:

  • Imágenes más ligeras porque no arrastras archivos basura.
  • Builds más rápidos porque Docker envía menos información al daemon.
  • Menor superficie de ataque al no incluir archivos sensibles por descuido.

Cómo usar EXPOSE sin abrir puertos de más

Dentro del Dockerfile de Node aparece la sentencia EXPOSE, que declara qué puerto de la imagen queda disponible por defecto al publicarla. En este caso, el puerto 3000.

Aquí va una recomendación de seguridad importante: abre solo los puertos estrictamente necesarios. Si tu app usa un único puerto, no expongas tres o cuatro por inercia. Cada puerto abierto es una puerta más por la que un atacante puede intentar entrar.

dockerfile EXPOSE 3000

Menos puertos expuestos significa una imagen menos vulnerable a ataques externos.

Pasos para construir la imagen Node con build context

Para replicar el flujo de la práctica:

  1. Crea una carpeta contenedora, por ejemplo build-context.
  2. Dentro, coloca tu carpeta de proyecto api-node con su src, package.json y el Dockerfile.
  3. Muévete con cd build-context a la carpeta padre.
  4. Ejecuta docker build -t aplicacion-node ./api-node para apuntar al Dockerfile y delimitar el contexto.
  5. Verifica que la imagen se haya creado y revisa su tamaño.

Un detalle práctico: los nombres de imágenes en Docker deben ir en lowercase. Si usas mayúsculas, el comando fallará y tendrás que corregirlo antes de seguir.

Cómo reducir el tamaño de tu imagen Docker desde el contexto

Delimitar bien el build context es una de las palancas más directas para reducir peso. Si tu carpeta de proyecto tiene PDFs, capturas, datasets de prueba o carpetas de documentación, sácalas del contexto antes de construir.

La imagen resultante de la API de Node sigue siendo grande y necesita refactor adicional con imágenes base más ligeras, pero el primer paso siempre es el mismo: llevar a la imagen lo estrictamente necesario. Cada archivo que evitas incluir es espacio que ahorras en el registry, en el pull y en el despliegue.

¿Cómo organizas tú las carpetas de tus proyectos cuando trabajas con Docker? Cuéntame en los comentarios qué estructura te ha funcionado mejor.