Comment supprimer les images Docker pendantes et inutilisées
Docker est un système de virtualisation gratuit et open source au niveau du système d’exploitation qui nous permet d’emballer et de livrer des applications avec leurs dépendances dans des environnements isolés et reproductibles appelés conteneurs. Les conteneurs Docker sont construits sur la base d’images, qui peuvent devenir « pendantes » dans certaines situations.
Dans ce tutoriel, nous apprenons ce qu’est une image pendante et comment reconnaître et supprimer les images Docker pendantes et inutilisées de notre système.
Dans ce tutoriel, vous allez apprendre :
- Qu’est-ce qu’une image pendante ou inutilisée ?
- Comment reconnaître les images pendantes
- Comment supprimer les images pendantes et inutilisées
Qu’est-ce qu’une image pendante ?
Avant de voir comment supprimer les images pendantes, clarifions quand une image peut être identifiée comme telle ; Pour ce faire, créons une nouvelle image. Pour les besoins de ce tutoriel, nous allons créer et construire une image basée sur Debian stable. Dans la définition Dockerfile, nous ajoutons simplement quelques packages supplémentaires à l’image de base et nous lançons le shell bash comme commande par défaut :
FROM debian:stable
RUN apt-get update && apt-get install -y vim curl
CMD ["/bin/bash"]En supposant que le Dockerfile se trouve dans notre répertoire de travail actuel, pour construire l’image et la marquer comme linuxconfig/debian, nous utilisons la commande suivante :
sudo docker build . -t linuxconfig/debianLe bâtiment devrait être terminé en quelques secondes. Une fois que l’image est prête, nous devrions la trouver incluse, avec l’image sur laquelle elle est basée, dans la liste des images existantes que nous pouvons obtenir en utilisant la commande docker image ls :
sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
linuxconfig/debian latest 2703963b9db2 18 seconds ago 186MB
debian stable 9b4953ae981c 2 weeks ago 124MBComme vous pouvez le voir, l’ID associé à notre image est 2703963b9db2. Maintenant, supposons que nous voulions modifier notre Dockerfile, par exemple pour inclure un paquet supplémentaire dans l’image (le paquet python3, dans ce cas). Nous modifions notre Dockerfile pour qu’il ressemble à l’exemple ci-dessous :
FROM debian:stable
RUN apt-get update && apt-get install -y vim curl python3
CMD ["/bin/bash"]À ce stade, nous devons reconstruire l’image, avec la même commande que nous avons utilisée auparavant. Une fois que la nouvelle version de l’image est prête, si nous vérifions la liste des images, nous pouvons voir qu’une nouvelle entrée pour l’image a été créée, tandis que l’entrée précédente a été modifiée :
REPOSITORY TAG IMAGE ID CREATED SIZE
linuxconfig/debian latest c829257789ed 4 seconds ago 215MB
<none> <none> 2703963b9db2 About a minute ago 186MB
debian stable 9b4953ae981c 2 weeks ago 124MBNous pouvons facilement reconnaître l’entrée précédente par son ID, et nous pouvons voir que <none> est maintenant signalé sous les colonnes REPOSITORY et TAG. Qu’est-ce que cela signifie ? Comme nous avons reconstruit l’image avec le même nom, la version originale a été débalisée et son nom a été supprimé : elle est devenue une image pendante.
Celles signalées dans la liste ci-dessus, à la suite de la commande docker image ls, ne sont que les images « principales ». Étant donné que les images Docker sont construites en couches, des images intermédiaires sont créées dans le cadre du processus de construction. Ces images intermédiaires deviennent elles-mêmes pendantes. Pour que les images intermédiaires soient incluses dans la liste, nous devons ajouter l’option --all (-a) à la commande :
sudo docker image ls --all Voici le résultat renvoyé par la commande, dans ce cas :
[egdoc@fingolfin optim]$ sudo docker image ls --all
REPOSITORY TAG IMAGE ID CREATED SIZE
linuxconfig/debian latest c829257789ed 2 hours ago 215MB
<none> <none> 3423cc3de95c 2 hours ago 215MB
<none> <none> f9aa77dffe35 2 hours ago 186MB
<none> <none> 2703963b9db2 2 hours ago 186MB
debian stable 9b4953ae981c 2 weeks ago 124MBLes images pendantes sont faciles à reconnaître dans la liste, comme nous l’avons vu ci-dessus. Dans certains cas, cependant, nous pouvons appliquer un filtre afin que seules les images pendantes soient affichées. Un filtre peut être appliqué en le passant en argument à l’option -f ou --filter. Afin de filtrer les images pendantes, nous pouvons utiliser exécuter la commande suivante :
sudo docker image ls -f dangling=trueSuppression des images pendantes
Au fil du temps, le nombre d’images pendantes existantes peut augmenter, nous pouvons donc vouloir les supprimer afin de libérer de l’espace sur le système de fichiers. Pour accomplir cette tâche, nous pouvons utiliser la commande docker image prune :
sudo docker image pruneAvant de procéder à la suppression proprement dite, nous sommes invités à confirmer l’action :
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N]Une fois que nous aurons confirmé, toutes les images pendantes seront supprimées. Dans certains cas, nous pouvons vouloir éviter l’invite de confirmation et rendre le processus complètement sans surveillance (par exemple, nous lançons la commande à partir d’un appel de script planifié) ; Dans de tels cas, tout ce que nous avons à faire est d’utiliser l’option --force (-f) :
sudo docker image prune --forceUtilisation d’images inutilisées
Nous venons de voir ce que sont les images pendantes, et comment les supprimer toutes avec une seule commande ; Parlons maintenant des images inutilisées.
Une image est considérée comme inutilisée lorsqu’elle n’a aucun conteneur associé. Nous pouvons considérer les conteneurs comme une instance d’images, de manière analogue comme nous considérons les objets comme une instance de classes dans le paradigme de la programmation orientée objet.
Suppression des images inutilisées
Supprimer toutes les images inutilisées est très simple : nous utilisons la même commande que celle utilisée pour supprimer les images pendantes, mais nous ajoutons simplement une autre option : --all (-a). Cela entraînera la suppression de toutes les images inutilisées (en plus des images pendantes) du système :
sudo docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] Comme dans ce tutoriel nous n’avons pas exécuté de conteneur basé sur nos images, tous sont supprimés à la suite de la commande :
Deleted Images:
untagged: linuxconfig/debian:latest
deleted: sha256:c829257789ed649e0443244c540ccb4dec05a0ebacf06601235ffcba686aa50b
deleted: sha256:3423cc3de95c4a025e8b7ed80e2f36ac6a1d12845ef7f06512e73b86564dd5a1
deleted: sha256:67f7591475b9165ba2f8cd745941f7f1f536c10d4dff4707c5262f81b10af43e
deleted: sha256:2703963b9db2fd81f23eef2ef2e4f29d81391d827dd6e0c3c18c7cb704e9f407
deleted: sha256:f9aa77dffe35e3e55dce1d0289e44ef77c2f80ad90126559f887090bb1575e27
deleted: sha256:05ef722493a57a8835429f9ccfe33d80b6b63b4d59dfc6147c1918db898fdfb6Conclusions
Dans ce tutoriel, nous avons appris ce qu’est une image « pendante » et quand une image Docker assume cet état. Nous avons vu comment reconnaître les images pendantes et comment filtrer la liste d’images pour que seules les images pendantes soient affichées. Nous avons également vu comment supprimer toutes les images pendantes et inutilisées avec une seule commande.
