Cómo usar .dockerignore para imágenes más pequeñas

Clase 12 de 34Curso de Docker Avanzado

Resumen

Optimiza tus imágenes de Docker desde el primer build con un enfoque claro: omite lo que no necesitas. Con práctica, usar imagen base pequeña, multi-stage y, sobre todo, .dockerignore se vuelve natural. Aquí entenderás cómo este archivo, análogo a .gitignore, te ayuda a excluir carpetas y configuraciones innecesarias para reducir drásticamente el tamaño de tus imágenes y evitar sorpresas al desplegar.

¿Qué resuelve .dockerignore en imágenes de Docker?

Usar .dockerignore es como aplicar el mismo criterio de .gitignore pero para tu imagen: no subes archivos que no deben estar en el contenedor. Al crear un proyecto .NET en Visual Studio, aparecen carpetas como OBJ y BIN que no hacen falta en la imagen; omitirlas es clave.

¿Cómo se relaciona con .gitignore?

  • Misma lógica: excluir archivos y carpetas que no deben empaquetarse.
  • Evita incluir artefactos de compilación: OBJ y BIN en .NET.
  • Excluye secretos y variables: archivos ENV cuando no se requieren en la imagen.

¿Por qué impacta en el tamaño?

  • Menos archivos copiados, menos capas y menos espacio ocupado.
  • Reduce ruido y riesgo de exponer configuraciones innecesarias.
  • Ejemplo práctico con configuración: se omitieron temporalmente appsettings.json y appsettings.Development.json para evidenciar el efecto, aunque no debe hacerse en un proyecto real.

¿Cómo configurarlo en .NET y construir la imagen?

Primero, crea el archivo .dockerignore. Visual Studio Code lo reconoce de inmediato (icono de la ballena en gris). Añade patrones como en .gitignore: carpetas y archivos a omitir durante el build de Docker.

¿Qué poner en .dockerignore?

obj/
bin/
*.env
appsettings.json
appsettings.Development.json

Nota: en el ejemplo se excluyeron los JSON para demostrar la omisión; no lo hagas en producción si son parte de la configuración necesaria.

¿Qué pasos seguir para construir y ejecutar?

  • Preparar el Dockerfile: actualizar el nombre del proyecto en las líneas indicadas para .NET (líneas 4, 8 y 15 según el archivo creado).
  • Construir la imagen con etiqueta.
  • Ejecutar el contenedor de forma interactiva.
# Ubicarse en la carpeta del proyecto
cd Ignore

# Construir imagen con etiqueta "ignorar"
docker build -t ignorar .

# Ejecutar de forma interactiva
docker run -it ignorar

¿Cómo verificar en Docker Desktop?

  • Abrir Docker Desktop y entrar en la sección de containers.
  • Seleccionar el contenedor en ejecución (si no tiene nombre, Docker asigna uno por defecto).
  • Usar la pestaña exec y ejecutar ls para listar archivos.
  • Resultado inicial: no aparecen los JSON porque fueron omitidos por .dockerignore.
  • Luego, al quitar esos patrones del .dockerignore, reconstruir y volver a ejecutar: ahora sí aparecen appsettings.json y appsettings.Development.json.

¿Qué aprender y qué evitar?

Incorporar .dockerignore garantiza que, sin importar la imagen base ni las capas, solo empaquetas lo necesario. La práctica refuerza las buenas decisiones y simplifica tu workflow.

¿Qué habilidades y comandos se ponen en juego?

  • Crear y editar .dockerignore en Visual Studio Code.
  • Ajustar el Dockerfile con el nombre del proyecto en puntos clave.
  • Construir imágenes con docker build -t ignorar ..
  • Ejecutar contenedores con docker run -it ignorar.
  • Inspeccionar archivos en el contenedor con Docker Desktop > containers > exec > ls.
  • Detener y eliminar imágenes para repetir el proceso con un entorno limpio.

¿Qué errores evitar y qué beneficios esperar?

  • No excluyas configuraciones críticas por costumbre; en el ejemplo se hizo solo para demostrar la omisión.
  • Si sabes que un archivo o carpeta no es necesaria, omítela: mejora tamaño y claridad.
  • Caso típico: la carpeta de Node modules. No necesitas “llevarte” esos cuatro mil quinientos paquetes de NPM a la imagen; se instalan al ejecutar el contenedor, evitando incrementar el tamaño final.

¿Tienes dudas sobre tu configuración de .NET, tu Dockerfile o tu .dockerignore? Cuéntame tu caso y lo revisamos juntos.