Comment utiliser la commande docker system prune pour récupérer de l'espace disque

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 laboratoire (lab), vous apprendrez à utiliser efficacement la commande docker system prune pour récupérer de l'espace disque en supprimant les données Docker inutilisées. Nous commencerons par comprendre ce que docker system prune supprime par défaut, ce qui inclut les conteneurs arrêtés, les images orphelines (dangling images) et les réseaux orphelins (dangling networks), mais pas les volumes.

Ensuite, vous explorerez comment purger les données Docker inutilisées tout en excluant spécifiquement les volumes, puis vous apprendrez à supprimer toutes les données inutilisées, y compris les volumes anonymes. Enfin, vous découvrirez comment utiliser des filtres avec docker system prune pour avoir un contrôle plus précis sur les données à supprimer.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/SystemManagementGroup -.-> docker/system("Manage Docker") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") subgraph Lab Skills docker/ps -.-> lab-555250{{"Comment utiliser la commande docker system prune pour récupérer de l'espace disque"}} docker/images -.-> lab-555250{{"Comment utiliser la commande docker system prune pour récupérer de l'espace disque"}} docker/volume -.-> lab-555250{{"Comment utiliser la commande docker system prune pour récupérer de l'espace disque"}} docker/system -.-> lab-555250{{"Comment utiliser la commande docker system prune pour récupérer de l'espace disque"}} docker/prune -.-> lab-555250{{"Comment utiliser la commande docker system prune pour récupérer de l'espace disque"}} end

Comprendre ce que docker system prune supprime par défaut

Dans cette étape, nous allons explorer la commande docker system prune et comprendre quels types de données Docker inutilisées elle supprime par défaut. Cette commande est utile pour libérer de l'espace disque en supprimant les objets orphelins (dangling) ou inutilisés.

Tout d'abord, créons quelques objets Docker inutilisés. Nous allons exécuter un simple conteneur, puis l'arrêter. Cela laissera derrière lui un conteneur arrêté et éventuellement une image orpheline (dangling image) si l'image n'est utilisée par aucun autre conteneur.

Ouvrez le terminal dans l'environnement LabEx. Le répertoire par défaut est ~/project.

Exécutez un simple conteneur hello-world :

docker run hello-world

Vous devriez voir un message indiquant que le démon Docker a téléchargé l'image hello-world et exécuté le conteneur. Le conteneur se terminera immédiatement après avoir affiché son message.

Maintenant, liste tous les conteneurs, y compris ceux qui sont arrêtés :

docker ps -a

Vous verrez le conteneur hello-world répertorié avec un statut "Exited".

Ensuite, listons les images :

docker images

Vous devriez voir l'image hello-world.

Maintenant, exécutons la commande docker system prune sans aucune option. Cela supprimera les images orphelines (dangling images), les conteneurs orphelins (dangling containers) et les réseaux orphelins (dangling networks). Elle ne supprimera pas les volumes par défaut.

docker system prune -f

Nous utilisons le drapeau -f pour forcer la suppression sans invite de confirmation.

Après avoir exécuté la commande, vous verrez un message indiquant ce qui a été supprimé.

Maintenant, vérifions à nouveau les conteneurs :

docker ps -a

Le conteneur hello-world arrêté devrait avoir disparu.

Vérifions à nouveau les images :

docker images

L'image hello-world peut toujours être présente si elle n'est pas considérée comme "orpheline" (par exemple, si elle a été téléchargée récemment). Cependant, si vous aviez d'autres images orphelines, elles auraient été supprimées.

Le point clé à retenir ici est que docker system prune nettoie par défaut les conteneurs arrêtés, les images orphelines et les réseaux orphelins. Elle ne supprime pas les volumes à moins que vous ne le lui demandiez explicitement.

Purger les données Docker inutilisées sans supprimer les volumes

Dans l'étape précédente, nous avons vu que docker system prune ne supprime pas les volumes par défaut. Les volumes sont utilisés pour conserver les données générées et utilisées par les conteneurs Docker. Supprimer les volumes involontairement peut entraîner une perte de données.

Dans cette étape, nous allons démontrer comment docker system prune fonctionne sans supprimer les volumes. Nous allons créer un volume, exécuter un conteneur qui l'utilise, arrêter le conteneur, puis purger le système. Nous observerons que le volume reste après la purge.

Tout d'abord, créons un volume nommé. Les volumes nommés sont explicitement créés et gérés par Docker.

docker volume create myvolume

Vous devriez voir le nom du volume créé en sortie.

Maintenant, exécutons un simple conteneur qui utilise ce volume. Nous utiliserons l'image ubuntu. Si vous ne l'avez pas localement, Docker la téléchargera.

docker run -d --name mycontainer -v myvolume:/app ubuntu sleep 60

Cette commande exécute un conteneur ubuntu en mode détaché (-d), le nomme mycontainer, monte le volume myvolume dans le répertoire /app à l'intérieur du conteneur et maintient le conteneur en cours d'exécution pendant 60 secondes en utilisant la commande sleep 60.

Vérifions que le conteneur est en cours d'exécution :

docker ps

Vous devriez voir mycontainer répertorié.

Maintenant, arrêtons le conteneur :

docker stop mycontainer

Le conteneur s'arrêtera, mais il existera toujours dans un état arrêté.

Vérifions que le conteneur est arrêté :

docker ps -a

Vous devriez voir mycontainer avec un statut "Exited".

Maintenant, listons les volumes :

docker volume ls

Vous devriez voir myvolume répertorié.

Maintenant, exécutons à nouveau docker system prune. Rappelez-vous, par défaut, il ne supprime pas les volumes.

docker system prune -f

Observez la sortie. Elle devrait indiquer que le conteneur arrêté a été supprimé, mais elle ne devrait pas mentionner la suppression du volume.

Vérifions que le conteneur a disparu :

docker ps -a

mycontainer ne devrait plus être répertorié.

Enfin, vérifions que le volume existe toujours :

docker volume ls

Vous devriez toujours voir myvolume répertorié. Cela confirme que docker system prune conserve les volumes par défaut.

Purger toutes les données Docker inutilisées, y compris les volumes anonymes

Dans les étapes précédentes, nous avons appris que docker system prune ne supprime pas les volumes par défaut. Cependant, il peut y avoir des situations où vous souhaiteriez supprimer toutes les données Docker inutilisées, y compris les volumes qui ne sont plus associés à aucun conteneur. Cela est particulièrement utile pour nettoyer les volumes anonymes, qui sont créés lorsque vous montez un répertoire à l'intérieur d'un conteneur sans nommer explicitement un volume.

Pour supprimer toutes les données Docker inutilisées, y compris les volumes, vous pouvez utiliser le drapeau -a avec docker system prune. Le drapeau -a signifie "tout" et inclut les volumes dans le processus de purge.

Créons un volume anonyme en exécutant un conteneur et en montant un répertoire sans spécifier de nom de volume.

docker run -d --name anothercontainer -v /data ubuntu sleep 60

Cette commande exécute un conteneur ubuntu nommé anothercontainer et monte un volume anonyme sur le répertoire /data à l'intérieur du conteneur.

Vérifions que le conteneur est en cours d'exécution :

docker ps

Vous devriez voir anothercontainer répertorié.

Maintenant, arrêtons le conteneur :

docker stop anothercontainer

Le conteneur s'arrêtera et deviendra un conteneur arrêté.

Vérifions que le conteneur est arrêté :

docker ps -a

Vous devriez voir anothercontainer avec un statut "Exited".

Maintenant, listons les volumes :

docker volume ls

Vous verrez le volume myvolume de l'étape précédente et un nouveau volume avec un nom long et généré aléatoirement. Il s'agit du volume anonyme.

Maintenant, exécutons docker system prune avec le drapeau -a pour supprimer toutes les données inutilisées, y compris les volumes.

docker system prune -a -f

Nous utilisons -a pour inclure les volumes et -f pour forcer la suppression sans invite de confirmation.

Observez attentivement la sortie. Elle devrait indiquer que le conteneur arrêté a été supprimé, et elle devrait également lister le volume anonyme qui a été supprimé. Le volume nommé myvolume de l'étape précédente devrait également être supprimé car il n'est plus utilisé par aucun conteneur.

Vérifions que tous les conteneurs ont disparu :

docker ps -a

Aucun conteneur ne devrait être répertorié.

Enfin, vérifions que tous les volumes ont disparu :

docker volume ls

Aucun volume ne devrait être répertorié. Cela confirme que docker system prune -a supprime toutes les données Docker inutilisées, y compris les volumes nommés et anonymes.

Purger les données Docker en utilisant des filtres

En plus de supprimer toutes les données inutilisées, docker system prune vous permet d'utiliser des filtres pour supprimer sélectivement des objets Docker. Cela vous donne un contrôle plus précis sur ce qui est purgé.

Les filtres peuvent être appliqués à différents types d'objets. Pour docker system prune, vous pouvez filtrer en fonction de critères tels que l'âge des objets.

Créons quelques autres objets Docker pour démontrer le filtrage. Nous allons exécuter quelques conteneurs, puis les arrêter.

Exécutons le premier conteneur :

docker run -d --name oldcontainer ubuntu sleep 10

Ce conteneur s'exécutera pendant 10 secondes, puis se terminera.

Exécutons le deuxième conteneur :

docker run -d --name newcontainer ubuntu sleep 20

Ce conteneur s'exécutera pendant 20 secondes, puis se terminera.

Attendez que les deux conteneurs se terminent. Vous pouvez vérifier leur statut avec docker ps -a.

docker ps -a

Vous devriez voir à la fois oldcontainer et newcontainer avec le statut "Exited".

Maintenant, utilisons un filtre pour supprimer uniquement les objets qui ont plus d'un certain temps. Nous pouvons utiliser le filtre until avec une durée. Par exemple, pour supprimer les objets âgés de plus de 5 secondes, vous pouvez utiliser until=5s.

Essayons de purger les objets âgés de plus de 15 secondes. Cela devrait supprimer oldcontainer mais conserver newcontainer (en supposant que vous avez attendu suffisamment longtemps pour que oldcontainer se termine, mais pas newcontainer).

docker system prune -f --filter "until=15s"

Observez la sortie. Elle devrait indiquer que oldcontainer a été supprimé, mais newcontainer devrait rester.

Vérifions les conteneurs :

docker ps -a

Vous devriez voir newcontainer répertorié, mais oldcontainer devrait avoir disparu.

Maintenant, purgeons à nouveau, cette fois en supprimant les objets âgés de plus de 30 secondes. Cela devrait également supprimer newcontainer.

docker system prune -f --filter "until=30s"

Observez la sortie. Elle devrait indiquer que newcontainer a été supprimé.

Vérifions à nouveau les conteneurs :

docker ps -a

Aucun conteneur ne devrait être répertorié.

Les filtres offrent un moyen puissant de personnaliser le processus de purge. Vous pouvez utiliser différentes clés de filtre en fonction du type d'objet que vous purgez (conteneurs, images, volumes, réseaux). Le filtre until est couramment utilisé pour nettoyer les objets qui n'ont pas été utilisés pendant une durée spécifique.

Résumé

Dans ce laboratoire, nous avons appris à utiliser la commande docker system prune pour récupérer de l'espace disque en supprimant les données Docker inutilisées. Nous avons commencé par comprendre le comportement par défaut de docker system prune, qui supprime les conteneurs arrêtés, les images orphelines (dangling images) et les réseaux orphelins (dangling networks). Nous avons démontré cela en créant puis en supprimant un conteneur arrêté.

Ensuite, nous avons exploré comment utiliser docker system prune avec des options pour contrôler quelles données sont supprimées. Nous avons appris à purger les données inutilisées sans supprimer les volumes et à inclure les volumes anonymes dans le processus de purge. Enfin, nous avons abordé l'utilisation de filtres pour purger sélectivement les données Docker en fonction de critères spécifiques. Ce laboratoire a fourni une expérience pratique dans l'utilisation de docker system prune pour gérer efficacement l'espace disque dans un environnement Docker.