Comment utiliser la commande docker buildx prune pour gérer le cache de construction

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce lab, nous allons explorer comment gérer efficacement le cache de construction (build cache) Docker en utilisant la commande docker buildx prune. Le cache de construction est un mécanisme essentiel pour accélérer la création d'images Docker en réutilisant des couches précédemment construites. Cependant, avec le temps, ce cache peut s'accumuler et consommer un espace disque significatif.

Nous commencerons par construire une simple image Docker pour générer du cache de construction. Ensuite, nous démontrerons différentes méthodes pour nettoyer ce cache en utilisant docker buildx prune. Cela inclut le nettoyage complet du cache sans filtres, le nettoyage sélectif en conservant les données récentes avec l'option --filter, la limitation de la taille du cache avec --keep-storage, et enfin, le nettoyage de tout le cache de construction, y compris les images internes, avec le flag --all. À la fin de ce lab, vous aurez une compréhension solide de la gestion efficace de votre cache de construction Docker.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) 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{{"Comment utiliser la commande docker buildx prune pour gérer le cache de construction"}} docker/prune -.-> lab-555061{{"Comment utiliser la commande docker buildx prune pour gérer le cache de construction"}} docker/build -.-> lab-555061{{"Comment utiliser la commande docker buildx prune pour gérer le cache de construction"}} end

Construire une image pour créer un cache de construction

Dans cette étape, nous allons construire une simple image Docker pour générer du cache de construction (build cache). Le cache de construction Docker est un mécanisme qui accélère le processus de build en réutilisant les couches des builds précédents. Lorsque vous construisez une image Docker, chaque instruction dans le Dockerfile crée une couche. Si une instruction n'a pas changé depuis le dernier build, Docker peut réutiliser la couche existante au lieu de la reconstruire.

D'abord, créons un répertoire pour notre projet et naviguons dedans.

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

Maintenant, nous allons créer un simple Dockerfile. Ce Dockerfile copiera un fichier dans l'image puis exécutera une commande.

nano Dockerfile

Ajoutez le contenu suivant au Dockerfile :

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

Enregistrez et fermez le fichier.

Ensuite, créons un simple fichier que nous copierons dans l'image.

nano message.txt

Ajoutez du contenu à message.txt :

This is a test message.

Enregistrez et fermez le fichier.

Maintenant, nous allons construire l'image Docker. Nous allons taguer l'image comme cache-demo.

docker build -t cache-demo .

Vous verrez une sortie indiquant que Docker construit l'image étape par étape. Chaque étape correspond à une instruction dans le Dockerfile. Docker téléchargera l'image ubuntu:latest si elle n'est pas déjà présente, copiera le fichier message.txt, puis exécutera la commande echo.

Une fois le build terminé, vous pouvez vérifier que l'image a été créée en listant les images disponibles.

docker images

Vous devriez voir cache-demo dans la liste des images.

Maintenant, construisons à nouveau l'image sans modifier le Dockerfile ou message.txt.

docker build -t cache-demo .

Cette fois, vous remarquerez que le processus de build est beaucoup plus rapide. Docker réutilise les couches existantes du build précédent car les instructions dans le Dockerfile et le contenu de message.txt n'ont pas changé. La sortie affichera "Using cache" pour la plupart des étapes. Cela démontre comment le cache de construction Docker fonctionne pour accélérer les builds ultérieurs.

Nettoyer le cache de construction sans filtres

Dans cette étape, nous allons apprendre à nettoyer le cache de construction (build cache) Docker sans utiliser de filtres. Le nettoyage du cache permet de libérer de l'espace disque en supprimant les entrées de cache inutilisées.

La commande pour nettoyer le cache de construction est docker builder prune. Par défaut, cette commande supprime toutes les entrées du cache qui ne sont pas utilisées par une image existante.

Exécutons la commande pour nettoyer le cache :

docker builder prune

Vous serez invité à confirmer l'action. Tapez y et appuyez sur Entrée pour continuer.

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

La sortie affichera les entrées de cache supprimées et l'espace total récupéré.

Pour observer l'effet du nettoyage, reconstruisons l'image :

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

Cette fois, le processus de construction pourrait prendre plus de temps que lors du deuxième build précédent, car tout ou partie du cache a pu être supprimé. Docker reconstruira les couches qui ont été nettoyées.

Le nettoyage sans filtres est utile lorsque vous souhaitez libérer un maximum d'espace disque. Cependant, cela peut affecter la vitesse des builds ultérieurs si vous reconstruisez fréquemment des images. Dans les étapes suivantes, nous verrons comment utiliser des filtres pour mieux contrôler quelles entrées du cache sont nettoyées.

Nettoyer le cache de construction en conservant les données récentes avec --filter

Dans cette étape, nous allons apprendre à nettoyer le cache de construction Docker tout en conservant les données récentes à l'aide du flag --filter. Cette méthode est utile lorsque vous souhaitez libérer de l'espace disque tout en bénéficiant du cache pour les builds récents.

La commande docker builder prune prend en charge différents filtres. Un filtre particulièrement utile est until, qui permet de supprimer les entrées de cache plus anciennes qu'une date spécifique. Le timestamp peut être une date et heure précise, ou une durée relative au moment présent.

Commençons par reconstruire notre image pour nous assurer d'avoir un cache récent :

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

Maintenant, nettoyons le cache en conservant les entrées des 5 dernières minutes. Nous pouvons utiliser le filtre until avec une durée comme 5m :

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

Vous serez invité à confirmer l'action. Tapez y et appuyez sur Entrée pour continuer.

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

La sortie affichera les entrées de cache supprimées. Seules les entrées datant de plus de 5 minutes seront effacées.

Il est également possible de spécifier un timestamp précis. Par exemple, pour supprimer les entrées antérieures à une date et heure spécifiques, vous pouvez utiliser le format "AAAA-MM-JJTHH:MM:SS".

L'utilisation du filtre until avec une durée est un moyen pratique de conserver le cache le plus récent tout en nettoyant les anciennes entrées, offrant ainsi un bon équilibre entre utilisation du disque et vitesse de construction.

Nettoyer le cache de construction en conservant une taille spécifique avec --keep-storage

Dans cette étape, nous allons apprendre à nettoyer le cache de construction Docker tout en conservant une quantité spécifique de stockage à l'aide du flag --keep-storage. Cette méthode est utile lorsque vous souhaitez limiter l'espace disque utilisé par le cache de construction.

La commande docker builder prune avec le flag --keep-storage permet de spécifier la quantité maximale de stockage à conserver pour le cache. Docker supprimera les entrées de cache les plus anciennes jusqu'à ce que la taille totale du cache restant soit inférieure à la limite spécifiée.

Commençons par construire notre image plusieurs fois pour créer davantage d'entrées dans le cache :

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

Maintenant, nettoyons le cache en ne conservant que 1 Go de stockage. Vous pouvez spécifier la taille en octets, kilo-octets (k), méga-octets (m) ou giga-octets (g) :

docker builder prune --keep-storage 1g

Vous serez invité à confirmer l'action. Tapez y et appuyez sur Entrée pour continuer.

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

La sortie affichera les entrées de cache supprimées et l'espace total récupéré. Docker supprimera les entrées les plus anciennes jusqu'à ce que la taille du cache restant soit d'environ 1 Go ou moins.

L'utilisation du flag --keep-storage est une bonne méthode pour gérer l'espace disque consommé par le cache de construction, particulièrement dans les environnements avec un stockage limité.

Nettoyer tout le cache de construction y compris les images internes avec --all

Dans cette étape, nous allons apprendre à nettoyer l'intégralité du cache de construction Docker, y compris les images internes, en utilisant le flag --all. Il s'agit de la méthode la plus radicale pour nettoyer le cache et supprimera toutes les entrées de cache, qu'elles soient utilisées ou non par des images existantes.

La commande docker builder prune avec le flag --all (ou son raccourci -a) supprimera toutes les entrées du cache de construction. Cela inclut les entrées associées aux images intermédiaires de construction non taguées.

Exécutons la commande pour nettoyer tout le cache de construction :

docker builder prune --all

Vous serez invité à confirmer l'action. Tapez y et appuyez sur Entrée pour continuer.

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

La sortie affichera toutes les entrées de cache supprimées et l'espace total récupéré. Cette commande libère généralement le plus d'espace disque comparé aux méthodes sans le flag --all ou utilisant des filtres.

Après avoir exécuté cette commande, si vous reconstruisez l'image cache-demo, cela prendra probablement plus de temps car tout le cache a été supprimé et Docker devra reconstruire toutes les couches :

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

L'utilisation de docker builder prune --all est utile lorsque vous avez besoin de libérer un maximum d'espace disque ou lorsque vous souhaitez garantir une construction propre sans dépendre d'aucun cache existant. Cependant, sachez que cela ralentira considérablement les constructions ultérieures jusqu'à ce qu'un nouveau cache soit généré.

Résumé

Dans ce lab, nous avons appris à gérer le cache de construction Docker à l'aide de la commande docker buildx prune. Nous avons commencé par construire une image Docker simple pour générer du cache de construction, en observant comment Docker réutilise les couches pour accélérer les constructions ultérieures.

Nous avons ensuite exploré différentes méthodes pour nettoyer le cache de construction. Nous avons appris :

  • Comment supprimer tout le cache sans filtres
  • Comment conserver les données de cache récentes avec l'option --filter
  • Comment limiter la taille du cache avec --keep-storage
  • Enfin, comment supprimer tout le cache de construction, y compris les images internes, avec le flag --all

Ces techniques sont essentielles pour gérer l'espace disque et optimiser les environnements de construction.