Cómo usar el comando docker buildx prune para gestionar la caché de construcción

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, exploraremos cómo gestionar eficazmente la caché de construcción (build cache) de Docker utilizando el comando docker buildx prune. La caché de construcción es un mecanismo crucial para acelerar la creación de imágenes de Docker al reutilizar capas previamente construidas. Sin embargo, con el tiempo, esta caché puede acumularse y consumir un espacio significativo en el disco.

Comenzaremos construyendo una imagen simple de Docker para generar algo de caché de construcción. Luego, demostraremos varias formas de limpiar esta caché usando docker buildx prune. Esto incluye eliminar toda la caché sin filtros, podar selectivamente manteniendo datos recientes usando la opción --filter, limitar el tamaño de la caché con --keep-storage y, finalmente, eliminar toda la caché de construcción, incluidas las imágenes internas, usando la bandera --all. Al finalizar este laboratorio, tendrás un sólido entendimiento de cómo gestionar eficientemente la caché de construcción de Docker.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ImageOperationsGroup -.-> docker/images("List Images") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/images -.-> lab-555061{{"Cómo usar el comando docker buildx prune para gestionar la caché de construcción"}} docker/prune -.-> lab-555061{{"Cómo usar el comando docker buildx prune para gestionar la caché de construcción"}} docker/build -.-> lab-555061{{"Cómo usar el comando docker buildx prune para gestionar la caché de construcción"}} end

Construir una imagen para crear caché de construcción

En este paso, construiremos una imagen simple de Docker para generar algo de caché de construcción (build cache). La caché de construcción de Docker es un mecanismo que acelera el proceso de construcción al reutilizar capas de builds anteriores. Cuando construyes una imagen de Docker, cada instrucción en el Dockerfile crea una capa. Si una instrucción no ha cambiado desde el último build, Docker puede reutilizar la capa existente en lugar de reconstruirla.

Primero, creemos un directorio para nuestro proyecto y accedamos a él.

mkdir ~/project/docker-cache-demo
cd ~/project/docker-cache-demo

Ahora, crearemos un Dockerfile simple. Este Dockerfile copiará un archivo en la imagen y luego ejecutará un comando.

nano Dockerfile

Añade el siguiente contenido al Dockerfile:

FROM ubuntu:latest
COPY . /app
RUN echo "Hello, Docker Cache!" > /app/message.txt
CMD ["cat", "/app/message.txt"]

Guarda y cierra el archivo.

A continuación, creemos un archivo simple que copiaremos en la imagen.

nano message.txt

Añade algún contenido a message.txt:

This is a test message.

Guarda y cierra el archivo.

Ahora, construiremos la imagen de Docker. Etiquetaremos la imagen como cache-demo.

docker build -t cache-demo .

Verás una salida que indica que Docker está construyendo la imagen paso a paso. Cada paso corresponde a una instrucción en el Dockerfile. Docker descargará la imagen ubuntu:latest si no está presente, copiará el archivo message.txt y luego ejecutará el comando echo.

Una vez completado el build, puedes verificar que la imagen se creó listando las imágenes disponibles.

docker images

Deberías ver cache-demo en la lista de imágenes.

Ahora, construyamos la imagen nuevamente sin hacer cambios en el Dockerfile o message.txt.

docker build -t cache-demo .

Esta vez, notarás que el proceso de construcción es mucho más rápido. Docker reutiliza las capas existentes del build anterior porque las instrucciones en el Dockerfile y el contenido de message.txt no han cambiado. La salida mostrará "Using cache" para la mayoría de los pasos. Esto demuestra cómo funciona la caché de construcción de Docker para acelerar builds posteriores.

Limpiar caché de construcción sin filtros

En este paso, aprenderemos cómo limpiar la caché de construcción (build cache) de Docker sin usar filtros. La limpieza de la caché de construcción ayuda a liberar espacio en disco eliminando entradas de caché no utilizadas.

El comando para limpiar la caché de construcción es docker builder prune. Por defecto, este comando eliminará todas las entradas de caché de construcción que no estén siendo utilizadas por imágenes existentes.

Ejecutemos el comando para limpiar la caché de construcción:

docker builder prune

Se te pedirá confirmar la acción. Escribe y y presiona Enter para continuar.

WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y

La salida mostrará las entradas de caché de construcción que fueron eliminadas y el espacio total recuperado.

Para ver el efecto de la limpieza, intentemos construir la imagen nuevamente:

cd ~/project/docker-cache-demo
docker build -t cache-demo .

Esta vez, el proceso de construcción podría tardar más que en el segundo build del paso anterior, ya que parte o toda la caché de construcción pudo haber sido eliminada. Docker reconstruirá las capas que fueron limpiadas.

La limpieza sin filtros es útil cuando deseas eliminar toda la caché de construcción no utilizada para maximizar el espacio libre en disco. Sin embargo, podría afectar la velocidad de builds posteriores si reconstruyes imágenes con frecuencia. En los siguientes pasos, exploraremos cómo usar filtros para tener mayor control sobre qué entradas de caché se eliminan.

Limpiar caché de construcción conservando datos recientes usando --filter

En este paso, aprenderemos cómo limpiar la caché de construcción (build cache) de Docker manteniendo datos recientes mediante el flag --filter. Esto es útil cuando deseas liberar espacio en disco pero aún quieres beneficiarte de la caché para builds recientes.

El comando docker builder prune soporta varios filtros. Un filtro útil es until, que permite eliminar entradas de caché de construcción más antiguas que un timestamp específico. El timestamp puede ser una fecha y hora, o una duración relativa al tiempo actual.

Primero, construyamos nuestra imagen nuevamente para asegurarnos de tener algo de caché de construcción reciente.

cd ~/project/docker-cache-demo
docker build -t cache-demo .

Ahora, limpiemos la caché de construcción conservando entradas de los últimos 5 minutos. Podemos usar el filtro until con una duración como 5m.

docker builder prune --filter "until=5m"

Se te pedirá confirmar la acción. Escribe y y presiona Enter para continuar.

WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y

La salida mostrará las entradas de caché de construcción que fueron eliminadas. Solo se eliminarán las entradas más antiguas de 5 minutos.

También puedes especificar un timestamp exacto. Por ejemplo, para eliminar entradas de caché más antiguas que una fecha y hora específica, usarías un formato como "YYYY-MM-DDTHH:MM:SS".

Usar el filtro until con una duración es una forma conveniente de mantener la caché de construcción más reciente mientras se limpian entradas antiguas, equilibrando el uso de espacio en disco y la velocidad de construcción.

Limpiar caché de construcción conservando un tamaño específico usando --keep-storage

En este paso, aprenderemos cómo limpiar la caché de construcción (build cache) de Docker manteniendo una cantidad específica de almacenamiento mediante el flag --keep-storage. Esto es útil cuando deseas limitar el espacio en disco utilizado por la caché de construcción.

El comando docker builder prune con el flag --keep-storage te permite especificar la cantidad máxima de almacenamiento a conservar para la caché de construcción. Docker eliminará las entradas más antiguas hasta que el tamaño total de la caché restante esté por debajo del límite especificado.

Primero, construyamos nuestra imagen varias veces para crear más entradas en la caché:

cd ~/project/docker-cache-demo
docker build -t cache-demo:v1 .
docker build -t cache-demo:v2 .

Ahora, limpiemos la caché de construcción conservando solo 1GB de almacenamiento. Puedes especificar el tamaño en bytes, kilobytes (k), megabytes (m) o gigabytes (g).

docker builder prune --keep-storage 1g

Se te pedirá confirmar la acción. Escribe y y presiona Enter para continuar.

WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y

La salida mostrará las entradas de caché eliminadas y el espacio total recuperado. Docker eliminará las entradas más antiguas hasta que el tamaño de la caché restante sea aproximadamente 1GB o menos.

Usar el flag --keep-storage es una buena forma de gestionar el espacio en disco consumido por la caché de construcción, especialmente en entornos con almacenamiento limitado.

Limpiar toda la caché de construcción incluyendo imágenes internas usando --all

En este paso, aprenderemos cómo limpiar toda la caché de construcción (build cache) de Docker, incluyendo imágenes internas, mediante el flag --all. Esta es la forma más agresiva de limpiar la caché y eliminará todas las entradas sin importar si están siendo utilizadas por imágenes existentes.

El comando docker builder prune con el flag --all (-a como versión abreviada) eliminará todas las entradas de la caché de construcción. Esto incluye entradas asociadas con imágenes intermedias de construcción que no están etiquetadas.

Ejecutemos el comando para limpiar toda la caché de construcción:

docker builder prune --all

Se te pedirá confirmar la acción. Escribe y y presiona Enter para continuar.

WARNING! This will remove all build cache.
Are you sure you want to continue? [y/N] y

La salida mostrará todas las entradas de caché eliminadas y el espacio total recuperado. Este comando generalmente liberará más espacio en disco comparado con limpiar sin el flag --all o usando filtros.

Después de ejecutar este comando, si vuelves a construir la imagen cache-demo, probablemente tomará más tiempo ya que toda la caché ha sido eliminada y Docker necesitará reconstruir todas las capas.

cd ~/project/docker-cache-demo
docker build -t cache-demo .

Usar docker builder prune --all es útil cuando necesitas liberar la mayor cantidad de espacio en disco posible o cuando deseas asegurar una construcción limpia sin depender de caché existente. Sin embargo, ten en cuenta que ralentizará significativamente las construcciones posteriores hasta que se genere nueva caché.

Resumen

En este laboratorio, aprendimos a gestionar la caché de construcción (build cache) de Docker utilizando el comando docker buildx prune. Comenzamos construyendo una imagen simple de Docker para generar caché de construcción, observando cómo Docker reutiliza capas para acelerar construcciones posteriores.

Luego exploramos diferentes formas de limpiar la caché de construcción. Aprendimos:

  • Cómo eliminar toda la caché sin filtros
  • Cómo conservar datos recientes de caché usando la opción --filter
  • Cómo limitar el tamaño de la caché con --keep-storage
  • Finalmente, cómo eliminar toda la caché incluyendo imágenes internas con el flag --all

Estas técnicas son esenciales para gestionar espacio en disco y optimizar entornos de construcción.