Docker cache: acelerando builds

Clase 7 de 34Curso de Docker Avanzado

Resumen

Optimiza tus tiempos de creación de imágenes con el Docker cache: entiende cómo reutiliza capas, identifica cuándo aparece la línea cached y decide si conviene evitar el caché en pasos clave como apt-get update y apt-get upgrade. Con un simple cambio en el HTML y controlando el caché, el tiempo bajó de 38.8 s a 1.4 s, mientras que el paso de actualización pasó de 32.4 s a 0 s cuando quedó cacheado.

¿Qué es Docker cache y por qué acelera tus builds?

El Docker cache es una capa inteligente que compara cada instrucción del Dockerfile y reutiliza resultados si nada cambió. Así, al reconstruir una imagen con los mismos recursos, Docker evita descargar o compilar de nuevo y marca los pasos con la palabra cached. Esta reutilización explica tiempos dramáticamente menores en builds subsecuentes: con un pequeño cambio de contenido, la reconstrucción tomó 1.4 s frente a los 38.8 s iniciales.

¿Cómo se evidencia el impacto en tiempos?

  • Primera compilación con apt-get update y upgrade: 38.8 s.
  • Paso apt-get update/upgrade sin caché: 32.4 s en la primera corrida.
  • Segunda compilación tras editar el HTML: 1.4 s con pasos marcados como cached.
  • La línea cached confirma qué capas fueron reutilizadas.

¿Qué patrones debes observar en la salida de docker build?

  • La aparición de cached en pasos repetidos.
  • Reducciones de tiempo en pasos intensivos como apt-get update/upgrade.
  • Repetición del proceso cuando se fuerza a no usar caché.

¿Cómo replicar el ejemplo con NGINX y un Dockerfile?

Se partió de una imagen base NGINX para un sitio estático básico. Se actualizan repositorios, se crea un HTML con “Mi página de inicio personalizada” y se coloca en la ubicación del servidor. Luego se reconstruye cambiando el texto a “segunda versión” para ver el efecto del caché.

¿Qué instrucciones clave aparecen en el Dockerfile?

FROM nginx

# actualizar repositorios y paquetes
RUN apt-get update && apt-get upgrade -y

# crear HTML y colocarlo en la ubicación de NGINX
# (coloca el archivo en la ruta del servidor NGINX)
# ejemplo de contenido mínimo
# "Mi página de inicio personalizada"

# forzar variación para el caché en este paso específico
ARG cache_boost=1
RUN apt-get update && apt-get upgrade -y
  • FROM nginx: define la base del servidor web.
  • RUN apt-get update && apt-get upgrade: actualiza repositorios y paquetes.
  • ARG cache_boost=1: introduce un argumento para controlar el caché en un paso.

¿Qué comandos en terminal se usan para compilar?

# dentro del folder de trabajo (por ejemplo, Cache)
ls
cd Cache

# compilar con tag y contexto actual
docker build -t testing-cache .

# reconstruir para ver líneas cached cuando no cambian pasos
docker build -t testing-cache .
  • Uso de terminal para ubicarse: ls, cd.
  • Reconstrucciones rápidas cuando el contenido no cambia.

¿Cómo controlar el caché: ARG selectivo o flag global?

Hay dos formas de decidir si se usa el caché: insertar un ARG para afectar un paso específico o desactivar el caché para todo el proceso con una flag global.

¿Cuándo conviene un ARG para pasos específicos?

  • Cuando quieres que apt-get update/upgrade se ejecute siempre.
  • Cuando una parte de la imagen debe actualizarse de forma constante.
  • Cuando otras capas (como archivos estáticos) pueden mantenerse cacheadas.
# ejemplo minimalista para afectar el caché de un paso
ARG cache_boost=1
RUN apt-get update && apt-get upgrade -y
  • Con ARG, se evita que ese paso quede almacenado y se repite en cada build.

¿Cuándo usar --no-cache para todo el build?

  • Cuando necesitas una reconstrucción completa sin reutilizar ninguna capa.
  • Cuando hay dudas sobre el estado de capas previas y prefieres empezar desde cero.
# compilar sin usar caché en ningún paso
docker build --no-cache -t testing-cache .
  • La imagen base sigue almacenada, pero todos los pasos del build se vuelven a ejecutar.

¿Cómo decidir entre caché o reconstrucción total?

  • Si tus archivos cambian poco: aprovecha caché para ahorrar tiempo.
  • Si requieres datos siempre frescos: fuerza sin caché en pasos clave o en todo el build.
  • Cada escenario es distinto: selecciona capas a cachear según tu necesidad.

¿Te quedó alguna duda sobre cómo leer la salida de docker build o cuándo aplicar --no-cache versus ARG? Comparte tus preguntas y cuéntanos tu caso de uso.