Comment mettre à niveau vers Docker Compose v2
Agence web » Actualités du digital » Que sont les images Docker pendantes ?

Que sont les images Docker pendantes ?

Les images Docker pendantes sont des couches non balisées et inutilisées qui existent sur le système de fichiers de votre hôte. Vous n’êtes peut-être pas au courant de leur présence et ce sont généralement des déchets indésirables.

Dans cet article, vous apprendrez comment les images pendantes apparaissent et ce que vous pouvez faire pour les nettoyer. C’est une bonne idée d’inspecter périodiquement le nombre d’images pendantes que vous avez afin d’éviter de gaspiller la capacité de votre disque.

Qu’est-ce qu’une image pendante ?

Une image pendante est simplement une image inutilisée qui n’a ni nom ni tag. Vous pouvez facilement repérer les images pendantes lorsque vous exécutez le docker images commande parce qu’ils apparaissent comme <none>:<none>.

Dans cet exemple, la première image de la liste est une image pendante :

$ docker images
<none>                              <none>    509bc96b727d   2 months ago    55.3MB
mysql                               5.7       f26e21ddd20d   4 months ago    450MB
gcr.io/k8s-minikube/kicbase         v0.0.30   1312ccd2422d   6 months ago    1.14GB
hello-world                         latest    feb5d9fea6a5   11 months ago   13.3kB

L’image n’est pas taguée mais persiste toujours sur votre système. Dans ce cas, 55,3 Mo d’espace disque sont consommés.

Vous pouvez vérifier que l’image est suspendue et pas simplement inutilisée en vérifiant si un conteneur y fait référence :

$ docker ps -a
CONTAINER ID   IMAGE                                      COMMAND                  CREATED          STATUS                   
2aa683500ee0   gcr.io/k8s-minikube/kicbase:v0.0.30        "/usr/local/bin/entr..."   18 hours ago     Exited (130) 18 hours ago

Aucun conteneur ne fait référence au <none>:<none> image avec identifiant 509bc96b727d donc c’est définitivement suspendu. Notez que les images MySQL et Hello World ne le faites pas classe comme suspendus – bien qu’ils ne soient pas utilisés par les conteneurs, ils sont correctement étiquetés, il est donc supposé que vous voudrez les conserver.

Comment les images pendantes sont-elles créées ?

Les images pendantes sont généralement créées lorsqu’une image existante est remplacée par une nouvelle version. Voici un simple Dockerfile pour montrer ce qui se passe :

FROM alpine:latest
COPY demo.txt /demo.txt

Créer un fichier nommé demo.txt dans votre répertoire de travail et ajoutez-y du contenu :

$ echo 1 > demo.txt

Construisez maintenant votre image avec docker build:

$ docker build -t demo:latest .

Exécutez le docker images commande pour voir votre nouvelle image :

REPOSITORY                          TAG       IMAGE ID       CREATED          SIZE
demo                                latest    40395b6c1362   24 seconds ago   5.54MB

Modifiez maintenant le contenu de demo.txt et reconstruisez votre image :

$ echo 2 > demo.txt
$ docker build -t demo:latest .

La même balise d’image est utilisée – demo:latest – donc cette version remplace la première. Courir docker images pour voir l’effet :

REPOSITORY                          TAG       IMAGE ID       CREATED         SIZE
demo                                latest    3d5052e52b4c   3 seconds ago   5.54MB
<none>                              <none>    40395b6c1362   59 seconds ago   5.54MB

La nouvelle image a été créée avec ID 3d5052e52b4c et le demo:latest étiquette. La première image, ID 40395b6c1362, existe toujours mais n’a pas été balisé. Il apparaît maintenant comme <none>:<none>. Cette image est devenue une image pendante car aucun conteneur ne l’utilise.

Pouvez-vous utiliser une image pendante ?

Les images pendantes fonctionnent comme n’importe quelle autre image. La seule différence est la balise manquante. Vous pouvez démarrer un conteneur à partir d’une image pendante en faisant directement référence à l’ID de l’image :

$ docker run -it 40395b6c1362 sh
/ #

Techniquement, l’image n’est plus en suspens, car elle est désormais activement utilisée par un conteneur. Il est courant que les conteneurs se retrouvent avec un none image si vous supprimez ou reconstruisez la balise qu’ils ont utilisée. Les conteneurs avec une image non taguée afficheront l’ID de l’image dans le IMAGE colonne lorsque vous exécutez docker psau lieu de la balise habituelle.

$ docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED         STATUS        PORTS                NAMES
26d5609ba75c   40395b6c1362                               "sh"                     2 seconds ago   Up 1 second                        inspiring_lederberg
91ab866b59a2   portainer/portainer-ce                     "/portainer"             2 weeks ago     Up 2 days     8000/tcp, 9443/tcp   portainer_portainer_1

Nettoyer les images pendantes

Vous pouvez supprimer une seule image pendante à l’aide de la docker rmi commande, comme n’importe quelle autre image. Étant donné que l’image ne sera pas taguée, vous devrez l’identifier par son ID.

$ docker rmi 40395b6c1362

Une meilleure façon de nettoyer de nombreuses images pendantes est la docker image prune commande. Cela supprimera automatiquement toutes les images pendantes sur votre hôte Docker.

$ docker image prune
Total reclaimed space: 5.54 MB

La sortie de la commande indique la quantité d’espace disque qui a été libérée. Vérifiez si vos images sont réellement suspendues si rien n’est supprimé. Il n’est pas possible de supprimer les images activement utilisées par les conteneurs. Vous devrez supprimer les conteneurs avec docker rm d’abord, avant d’essayer d’élaguer vos images.

Vous pourriez découvrir que vous avez une image pendante que vous souhaitez réellement réutiliser à l’avenir. Dans cette situation, vous pouvez le ré-étiqueter avec le docker tag commande. Cela facilitera l’identification de l’image et évitera qu’elle ne soit ciblée par de futures opérations d’élagage.

$ docker tag 40395b6c1362 demo:latest

Images qui s’affichent comme <none>:<none> peut-être pas des images pendantes. De manière confuse, cette situation se produit également pour les images créées en tant que couches intermédiaires lors d’une génération.

Chaque étape d’un Dockerfile entraîne la création d’une nouvelle couche intermédiaire. L’image produite à la fin de la construction se voit attribuer la balise que vous spécifiez. Les autres couches intermédiaires restent non étiquetées et peuvent être visualisées en exécutant docker images -a.

Ces calques ne sont pas des images pendantes car les images ultérieures de la chaîne de construction en dépendent. Ils sont référencés par chaque couche successive et ne causent pas de problème d’espace disque. Vous pouvez arrêter la persistance des couches intermédiaires sur le disque en incluant le --rm drapeau au moment de la construction :

$ docker build --rm -t demo:latest .

Sommaire

Les images pendantes sont des images Docker non balisées qui ne sont pas utilisées par un conteneur ou dont un descendant ne dépend pas. Ils ne servent généralement à rien mais consomment toujours de l’espace disque. Vous accumulerez des images pendantes lorsque vous remplacerez une balise existante en démarrant une nouvelle génération.

Toutes les images pendantes s’affichent comme <none>:<none> dans l’interface de ligne de commande Docker. En avoir trop peut être écrasant lorsque vous avez des dizaines d’images sans aucune information sur leur véritable identité. Courir régulièrement docker images prune évitera le gaspillage d’espace disque et réduira la liste des images.

★★★★★