Cómo usar el comando docker builder prune para eliminar 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, aprenderá cómo gestionar de manera efectiva la caché de construcción de Docker utilizando el comando docker builder prune. Comenzaremos construyendo una imagen de Docker simple para entender cómo se crea y utiliza la caché de construcción para acelerar las construcciones posteriores.

Después de construir la imagen, explorará diferentes formas de limpiar la caché de construcción. Esto incluye eliminar la caché de construcción huérfana, eliminar toda la caché de construcción no utilizada y utilizar filtros para eliminar selectivamente la caché. Finalmente, aprenderá cómo eliminar la caché de construcción mientras se preserva el espacio de almacenamiento, lo que le brindará una comprensión integral de las técnicas de gestión de la caché de construcción.


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/pull("Pull Image from Repository") 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/pull -.-> lab-555043{{"Cómo usar el comando docker builder prune para eliminar la caché de construcción"}} docker/images -.-> lab-555043{{"Cómo usar el comando docker builder prune para eliminar la caché de construcción"}} docker/prune -.-> lab-555043{{"Cómo usar el comando docker builder prune para eliminar la caché de construcción"}} docker/build -.-> lab-555043{{"Cómo usar el comando docker builder prune para eliminar la caché de construcción"}} end

Construir una imagen para crear la caché de construcción

En este paso, construiremos una imagen de Docker simple para entender cómo se crea la caché de construcción. Docker utiliza una caché de construcción para acelerar las construcciones posteriores. Cada instrucción en un Dockerfile crea una capa, y si la instrucción no ha cambiado desde la última construcción, Docker puede reutilizar la capa existente de la caché.

Primero, navegue al directorio ~/project si no está ya allí.

cd ~/project

Ahora, creemos un Dockerfile simple. Lo llamaremos Dockerfile.cache.

nano Dockerfile.cache

Agregue el siguiente contenido al archivo Dockerfile.cache:

FROM ubuntu:latest
RUN apt-get update && apt-get install -y --no-install-recommends curl
COPY . /app
WORKDIR /app
CMD ["curl", "https://www.example.com"]

Guarde el archivo y salga del editor nano (Presione Ctrl + X, luego Y, luego Enter).

Este Dockerfile hace lo siguiente:

  • FROM ubuntu:latest: Comienza con la imagen base de Ubuntu más reciente.
  • RUN apt-get update && apt-get install -y --no-install-recommends curl: Actualiza la lista de paquetes e instala el paquete curl. Esta es una operación común y probablemente se almacenará en caché en construcciones posteriores si la imagen base y esta instrucción no cambian.
  • COPY . /app: Copia el contenido del directorio actual al directorio /app en la imagen.
  • WORKDIR /app: Establece el directorio de trabajo en /app.
  • CMD ["curl", "https://www.example.com"]: Especifica el comando a ejecutar cuando se inicia un contenedor a partir de esta imagen.

Antes de construir, asegúrese de tener la imagen ubuntu:latest localmente. Si no la tiene, Docker la descargará automáticamente durante la construcción, pero descargarla explícitamente primero a veces puede hacer que la salida de la construcción sea más clara.

docker pull ubuntu:latest

Ahora, construyamos la imagen utilizando el archivo Dockerfile.cache. Etiquetaremos la imagen como myimage:cachetest.

docker build -t myimage:cachetest -f Dockerfile.cache .

Verá una salida que indica los pasos del proceso de construcción. Docker ejecutará cada instrucción en el Dockerfile. Dado que esta es la primera vez que se construye con este Dockerfile, Docker no utilizará ninguna caché de construcción para las capas definidas en este Dockerfile.

Después de que se complete la construcción, puede listar sus imágenes para ver la recién creada myimage:cachetest.

docker images

Debería ver myimage con la etiqueta cachetest en la lista. Este proceso de construcción ha creado una caché de construcción para cada capa definida en el Dockerfile.cache. En los siguientes pasos, exploraremos cómo gestionar esta caché de construcción.

Eliminar la caché de construcción huérfana

En este paso, aprenderemos cómo eliminar la caché de construcción huérfana. La caché de construcción huérfana se refiere a las capas de caché de construcción que ya no están asociadas con ninguna imagen nombrada. Esto puede suceder cuando se reconstruye una imagen y una capa anterior es reemplazada por una nueva. Eliminar la caché huérfana puede ayudar a liberar espacio en el disco.

Primero, modifiquemos ligeramente nuestro Dockerfile.cache para crear algo de caché huérfana. Cambiaremos la instrucción RUN.

Navegue al directorio ~/project si no está ya allí.

cd ~/project

Abra el archivo Dockerfile.cache para editarlo.

nano Dockerfile.cache

Cambie la instrucción RUN de:

RUN apt-get update && apt-get install -y --no-install-recommends curl

a:

RUN apt-get update && apt-get install -y --no-install-recommends wget

Guarde el archivo y salga del editor nano (Presione Ctrl + X, luego Y, luego Enter).

Ahora, reconstruyamos la imagen con la misma etiqueta.

docker build -t myimage:cachetest -f Dockerfile.cache .

Observe la salida. Docker probablemente reutilizará la capa FROM de la caché, pero la instrucción RUN ha cambiado, por lo que ejecutará ese paso de nuevo, creando una nueva capa. La capa anterior creada por la antigua instrucción RUN es ahora una caché de construcción huérfana porque ya no forma parte de la imagen myimage:cachetest.

Para ver la caché de construcción, puede usar el comando docker builder prune --dry-run, aunque no siempre es fácil distinguir específicamente la caché huérfana sin herramientas más avanzadas o una comprensión del resultado de BuildKit. Una forma más sencilla de ver el efecto es eliminar la caché huérfana y ver el espacio recuperado.

Para eliminar solo la caché de construcción huérfana, usamos el comando docker builder prune con la opción --filter dangling=true.

docker builder prune --filter dangling=true

Se le pedirá que confirme la acción. Escriba y y presione Enter.

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

La salida mostrará la cantidad de espacio recuperado. Este espacio estaba ocupado por las capas de caché de construcción huérfanas que ya no eran necesarias.

Al eliminar la caché de construcción huérfana, puede recuperar espacio en el disco que ya no está siendo utilizado por ninguna capa de imagen activa.

Eliminar toda la caché de construcción no utilizada

En este paso, aprenderemos cómo eliminar toda la caché de construcción no utilizada. Mientras que eliminar la caché huérfana remueve las capas no asociadas a ninguna imagen, eliminar toda la caché no utilizada remueve cualquier caché de construcción que no esté siendo utilizada actualmente por un contenedor en ejecución o referenciada por una imagen local. Esta es una forma más agresiva de liberar espacio en el disco.

Primero, creemos otra imagen utilizando un Dockerfile diferente para agregar más caché de construcción.

Navegue al directorio ~/project si no está ya allí.

cd ~/project

Cree un nuevo Dockerfile llamado Dockerfile.another.

nano Dockerfile.another

Agregue el siguiente contenido a Dockerfile.another:

FROM alpine:latest
RUN apk update && apk add --no-cache git
COPY . /app2
WORKDIR /app2
CMD ["git", "--version"]

Guarde el archivo y salga del editor nano (Presione Ctrl + X, luego Y, luego Enter).

Este Dockerfile utiliza la imagen base alpine e instala git.

Ahora, construya una imagen utilizando este nuevo Dockerfile. La etiquetaremos como anotherimage:latest.

docker build -t anotherimage:latest -f Dockerfile.another .

Esta construcción creará nuevas capas de caché de construcción específicas para este Dockerfile.

Para eliminar toda la caché de construcción no utilizada, usamos el comando docker builder prune sin ningún filtro.

docker builder prune -a

La bandera -a significa "todas" e indica que desea eliminar toda la caché de construcción no utilizada, no solo la caché huérfana.

Se le pedirá que confirme la acción. Escriba y y presione Enter.

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

La salida mostrará la cantidad de espacio recuperado. Este comando remueve cualquier capa de caché de construcción que no esté siendo referenciada actualmente por una imagen local o un contenedor en ejecución. Esto puede liberar una cantidad significativa de espacio en el disco, especialmente después de muchas construcciones y actualizaciones de imágenes.

Tenga en cuenta que eliminar toda la caché no utilizada puede significar que las construcciones posteriores de imágenes que aún tiene localmente pueden tardar más si dependían de las capas de caché eliminadas.

Eliminar la caché de construcción con filtros

En este paso, exploraremos cómo eliminar la caché de construcción utilizando filtros. Los filtros permiten eliminar selectivamente la caché de construcción basándose en ciertos criterios, lo que le da un control más detallado sobre lo que se elimina.

Ya hemos visto el filtro dangling=true en un paso anterior. Otro filtro útil es until, que le permite eliminar la caché de construcción creada antes de una marca de tiempo específica.

Primero, volvamos a construir nuestra imagen myimage:cachetest para asegurarnos de tener una caché de construcción reciente.

Navegue al directorio ~/project si no está ya allí.

cd ~/project

Construya la imagen nuevamente:

docker build -t myimage:cachetest -f Dockerfile.cache .

Ahora, simulemos un escenario en el que desea eliminar la caché de construcción que tiene más de un cierto tiempo. Con fines demostrativos, usaremos un filtro para eliminar la caché con más de unos minutos de antigüedad.

Para eliminar la caché de construcción con más de un tiempo específico, puede usar la opción --filter until=<timestamp>. La marca de tiempo puede estar en varios formatos, incluyendo una duración como 5m (5 minutos) o 2h (2 horas).

Vamos a eliminar la caché de construcción con más de 5 minutos.

docker builder prune --filter until=5m

Se le pedirá que confirme la acción. Escriba y y presione Enter.

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

La salida mostrará la cantidad de espacio recuperado de la caché de construcción con más de 5 minutos. Si acaba de construir la imagen, puede que no haya mucha caché con más de 5 minutos, pero en un escenario real con muchas construcciones a lo largo del tiempo, este filtro puede ser muy útil para limpiar la caché antigua.

También puede combinar filtros. Por ejemplo, para eliminar la caché huérfana con más de un cierto tiempo, podría usar:

docker builder prune --filter dangling=true --filter until=24h

Esto eliminaría solo la caché de construcción huérfana con más de 24 horas.

El uso de filtros proporciona flexibilidad en la gestión de su caché de construcción y le ayuda a liberar espacio en el disco de manera más estratégica.

Eliminar la caché de construcción manteniendo un espacio de almacenamiento

En este paso, aprenderemos cómo eliminar la caché de construcción mientras se mantiene una cierta cantidad de almacenamiento. Esto es útil cuando se desea liberar espacio en el disco, pero aún se desea conservar parte de la caché de construcción reciente para acelerar las construcciones futuras.

El comando docker builder prune tiene una opción --keep-storage que permite especificar la cantidad máxima de almacenamiento que se desea mantener para la caché de construcción. Puedes especificar el tamaño en bytes o utilizar unidades como k, m o g.

Primero, asegúrate de tener alguna caché de construcción para eliminar. Hemos construido imágenes en pasos anteriores, lo que ha creado caché.

Navega al directorio ~/project si no estás ya allí.

cd ~/project

Para eliminar la caché de construcción mientras se mantiene una cantidad específica de almacenamiento, utiliza la opción --keep-storage seguida del tamaño deseado. Por ejemplo, para mantener un máximo de 1GB de caché de construcción:

docker builder prune --keep-storage 1g

Se te pedirá que confirmes la acción. Escribe y y presiona Enter.

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

La salida mostrará la cantidad de espacio recuperado. Docker eliminará las capas de caché de construcción más antiguas hasta que el tamaño total de la caché de construcción esté por debajo del límite especificado en --keep-storage.

Puedes ajustar el valor de --keep-storage en función del espacio de disco disponible y de cuánta caché deseas conservar para construcciones más rápidas. Por ejemplo, para mantener un máximo de 500MB:

docker builder prune --keep-storage 500m

Nuevamente, confirma la acción escribiendo y y presionando Enter.

Este método proporciona un equilibrio entre la liberación de espacio en el disco y el mantenimiento de parte de la caché de construcción para mejorar el rendimiento. Es una buena práctica eliminar periódicamente la caché de construcción para evitar que consuma demasiado espacio en el disco.

Resumen

En este laboratorio, aprendimos cómo usar el comando docker builder prune para gestionar la caché de construcción de Docker. Comenzamos construyendo una imagen Docker simple utilizando un Dockerfile para entender cómo Docker crea y utiliza la caché de construcción para acelerar las construcciones posteriores. Cada instrucción en el Dockerfile crea una capa, y Docker reutiliza las capas existentes de la caché si la instrucción no ha cambiado.

Luego exploramos diferentes formas de eliminar la caché de construcción. Aprendimos cómo eliminar la caché de construcción huérfana (dangling build cache), que se refiere a las entradas de caché que ya no están asociadas con ninguna construcción. También cubrimos cómo eliminar toda la caché de construcción no utilizada, lo que efectivamente limpia todas las entradas de caché que no están siendo utilizadas actualmente por ninguna imagen. Además, demostramos cómo usar filtros con el comando prune para eliminar selectivamente la caché de construcción basándonos en criterios específicos. Finalmente, exploramos la opción de eliminar la caché de construcción mientras se mantiene el almacenamiento asociado a ciertas entradas de caché, lo que puede ser útil en escenarios específicos.