Comment utiliser la commande docker image rm pour supprimer des images

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 à gérer efficacement les images Docker en utilisant la commande docker image rm. Nous commencerons par lister les images existantes sur votre système pour comprendre ce que vous avez.

Ensuite, nous explorerons différents scénarios de suppression d'images, notamment la tentative de suppression d'une image avec plusieurs étiquettes (tags), la suppression d'une image par son étiquette (tag), la suppression d'une image par son identifiant (ID) en utilisant l'option force, et enfin, la suppression d'une image par son digest. Cette expérience pratique vous dotera des compétences nécessaires pour nettoyer les images Docker inutilisées ou indésirables.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ImageOperationsGroup -.-> docker/rmi("Remove Image") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/rmi -.-> lab-555161{{"Comment utiliser la commande docker image rm pour supprimer des images"}} docker/images -.-> lab-555161{{"Comment utiliser la commande docker image rm pour supprimer des images"}} end

Lister les images existantes

Dans cette étape, nous apprendrons à lister les images Docker actuellement disponibles sur votre système. Les images Docker sont les éléments de base des conteneurs. Ce sont des modèles en lecture seule utilisés pour créer des conteneurs.

Pour lister les images, vous pouvez utiliser la commande docker images. Cette commande affiche la liste de toutes les images que Docker a téléchargées ou créées sur votre machine.

Essayons-le. Ouvrez votre terminal et exécutez la commande suivante :

docker images

Vous devriez voir une sortie similaire à celle-ci (les images et les détails exacts peuvent varier en fonction de ce que vous avez déjà fait avec Docker) :

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   latest    d00000000000   2 months ago   13.3kB

La sortie fournit plusieurs informations sur chaque image :

  • REPOSITORY : Le nom de l'image.
  • TAG : Une version spécifique de l'image. latest est l'étiquette (tag) par défaut si aucune n'est spécifiée.
  • IMAGE ID : L'identifiant unique de l'image.
  • CREATED : Il y a combien de temps l'image a été créée.
  • SIZE : La taille de l'image.

Comprendre les images que vous avez est la première étape de leur gestion. Dans les étapes suivantes, nous explorerons comment supprimer des images.

Tenter de supprimer une image avec plusieurs étiquettes (tags)

Dans cette étape, nous explorerons ce qui se passe lorsque vous essayez de supprimer une image Docker qui a plusieurs étiquettes (tags) pointant vers le même identifiant d'image (IMAGE ID). C'est un scénario courant lorsque vous étiquetez une image avec différentes versions ou noms.

Tout d'abord, téléchargeons une image et étiquetons-la avec une étiquette supplémentaire. Nous utiliserons l'image hello-world pour cet exemple. Si vous l'avez déjà, le téléchargement sera très rapide.

docker pull hello-world

Maintenant, ajoutons une autre étiquette à cette image en utilisant la commande docker tag. La syntaxe est docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]. Nous allons étiqueter l'image hello-world:latest avec une nouvelle étiquette appelée hello-world:mytag.

docker tag hello-world:latest hello-world:mytag

Maintenant, listons les images à nouveau pour voir la nouvelle étiquette.

docker images

Vous devriez voir deux entrées pour hello-world, l'une avec l'étiquette latest et l'autre avec l'étiquette mytag, mais les deux auront le même IMAGE ID.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   latest    d00000000000   2 months ago   13.3kB
hello-world   mytag     d00000000000   2 months ago   13.3kB

Maintenant, essayons de supprimer l'image en utilisant l'une des étiquettes, par exemple, hello-world:latest, en utilisant la commande docker rmi.

docker rmi hello-world:latest

Vous remarquerez que Docker ne supprime pas réellement les données de l'image elle-même. Au lieu de cela, il supprime l'étiquette spécifique que vous avez indiquée. La sortie indiquera qu'il s'agit d'un "Désétiquetage" (Untagged).

Untagged: hello-world:latest

Si vous listez les images à nouveau, vous verrez que l'entrée hello-world:latest a disparu, mais que l'entrée hello-world:mytag (avec le même IMAGE ID) existe toujours.

docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   mytag     d00000000000   2 months ago   13.3kB

Cela démontre que lorsqu'une image a plusieurs étiquettes, supprimer une seule étiquette ne supprime que cette référence spécifique aux données de l'image. Les données de l'image elle-même ne sont supprimées que lorsque la dernière étiquette qui y pointe est supprimée, ou lorsque vous la supprimez explicitement par son identifiant (ce que nous verrons plus tard).

Supprimer une image par étiquette (tag)

Dans l'étape précédente, nous avons vu que supprimer une étiquette (tag) ne fait que désétiqueter l'image si d'autres étiquettes ou conteneurs la référencent toujours. Dans cette étape, nous allons supprimer la dernière étiquette restante de l'image hello-world, ce qui devrait entraîner la suppression des données de l'image.

Actuellement, nous avons l'image hello-world avec l'étiquette mytag. Vérifions cela en listant les images :

docker images

Vous devriez voir l'entrée hello-world:mytag.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   mytag     d00000000000   2 months ago   13.3kB

Maintenant, supprimons l'image hello-world en utilisant l'étiquette mytag avec la commande docker rmi :

docker rmi hello-world:mytag

Cette fois-ci, comme mytag était la seule étiquette référant cet identifiant d'image (IMAGE ID), Docker supprimera à la fois l'étiquette et les données de l'image sous-jacentes. La sortie indiquera qu'il s'agit d'un "Désétiquetage" (Untagged) puis d'une "Suppression" (Deleted).

Untagged: hello-world:mytag
Deleted: sha256:d000000000000000000000000000000000000000000000000000000000000000
Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
... (plus de lignes Deleted)

Listons les images à nouveau pour confirmer que l'image hello-world a disparu :

docker images

L'image hello-world ne devrait plus apparaître dans la liste.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB

Cela démontre la méthode standard pour supprimer une image lorsqu'elle n'est utilisée par aucun conteneur et n'a qu'une seule étiquette.

Supprimer une image par son identifiant en utilisant la force

Dans cette étape, nous allons apprendre à supprimer une image Docker en utilisant son identifiant d'image (Image ID), et plus précisément, à utiliser l'option de force (-f ou --force) lorsque cela est nécessaire. Supprimer une image par son identifiant est utile lorsque vous voulez être précis sur laquelle vous supprimez, notamment si plusieurs étiquettes (tags) pointent vers la même image.

Tout d'abord, téléchargeons une image que nous pourrons ensuite supprimer par son identifiant. Nous utiliserons l'image ubuntu. Si vous l'avez déjà, le téléchargement sera rapide.

docker pull ubuntu

Maintenant, listons les images pour obtenir l'identifiant d'image de l'image ubuntu.

docker images

Recherchez l'image ubuntu dans la sortie et notez son IMAGE ID. Ce sera une longue chaîne de caractères hexadécimaux. Vous n'avez besoin que des premiers caractères (généralement 3 ou plus) pour identifier de manière unique l'image.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB

Essayons de supprimer l'image en utilisant son identifiant sans l'option de force d'abord. Remplacez YOUR_IMAGE_ID par l'identifiant d'image réel que vous avez noté à partir de la sortie de docker images.

docker rmi YOUR_IMAGE_ID

Si l'image n'est pas utilisée par aucun conteneur en cours d'exécution ou arrêté, cette commande devrait réussir et supprimer l'image. Cependant, s'il existe un conteneur basé sur cette image, vous recevrez un message d'erreur indiquant que l'image est utilisée par un conteneur et ne peut pas être supprimée.

Pour démontrer l'utilisation de l'option de force, lançons d'abord un conteneur basé sur l'image ubuntu.

docker run -d ubuntu sleep 3600

Cette commande lance un conteneur Ubuntu en mode détaché (-d) et le maintient en exécution pendant une heure (sleep 3600).

Maintenant, essayons de supprimer l'image ubuntu par son identifiant à nouveau sans l'option de force.

docker rmi YOUR_IMAGE_ID

Vous devriez recevoir un message d'erreur similaire à celui-ci :

Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - image is referenced by one or more containers: 000000000000 (created ...)

Cette erreur se produit car un conteneur utilise l'image. Pour supprimer une image qui est utilisée par un conteneur, vous devez utiliser l'option de force (-f).

Maintenant, supprimons l'image en utilisant son identifiant avec l'option de force. Remplacez YOUR_IMAGE_ID par l'identifiant d'image réel.

docker rmi -f YOUR_IMAGE_ID

L'option de force indique à Docker de supprimer l'image même si elle est utilisée par un conteneur. Docker arrêtera et supprimera d'abord tous les conteneurs qui utilisent l'image, puis supprimera l'image elle-même. La sortie montrera que l'image et ses couches ont été supprimées.

Untagged: ubuntu:latest
Deleted: sha256:2700000000000000000000000000000000000000000000000000000000000000
Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
... (plus de lignes Deleted)

Listons les images à nouveau pour confirmer que l'image ubuntu a disparu.

docker images

L'image ubuntu ne devrait plus figurer dans la liste.

L'utilisation de l'option de force doit être faite avec prudence, car elle arrête et supprime les conteneurs sans confirmation supplémentaire.

Supprimer une image par son digest

Dans cette étape finale, nous allons apprendre à supprimer une image Docker en utilisant son digest. Un digest d'image est un identifiant cryptographiquement sûr pour le contenu de l'image. Il identifie de manière unique les couches exactes et la configuration d'une image, indépendamment de ses étiquettes (tags).

Tout d'abord, téléchargeons une image que nous pourrons supprimer par son digest. Nous utiliserons l'image alpine pour cet exemple.

docker pull alpine

Maintenant, pour voir le digest de l'image, vous pouvez utiliser la commande docker images --digests.

docker images --digests

Recherchez l'image alpine dans la sortie. Vous verrez une colonne DIGEST avec une valeur commençant par sha256:. C'est le digest de l'image.

REPOSITORY    TAG       DIGEST                                                                    IMAGE ID       CREATED        SIZE
ubuntu        latest    <none>                                                                    270000000000   2 weeks ago    77.8MB
alpine        latest    sha256:0000000000000000000000000000000000000000000000000000000000000000   000000000000   3 weeks ago    5.59MB

Pour supprimer l'image par son digest, vous utilisez la commande docker rmi suivie du nom de l'image et du digest au format REPOSITORY@DIGEST. Remplacez YOUR_ALPINE_DIGEST par le digest réel que vous avez trouvé dans la sortie précédente.

docker rmi alpine@YOUR_ALPINE_DIGEST

La sortie montrera que l'image est supprimée.

Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
... (more Deleted lines)

Listez les images à nouveau pour confirmer que l'image alpine a disparu.

docker images

L'image alpine ne devrait plus figurer dans la liste.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    <none>                                                                    270000000000   2 weeks ago    77.8MB

Supprimer une image par son digest est la méthode la plus précise pour supprimer une image, car elle garantit que vous supprimez la version exacte de l'image identifiée par ce digest.

Résumé

Dans ce laboratoire (lab), nous avons appris à gérer les images Docker en utilisant les commandes docker images et docker rmi. Nous avons commencé par lister les images existantes pour comprendre leur référentiel (repository), étiquette (tag), identifiant (ID), date de création et taille.

Nous avons ensuite exploré le processus de suppression d'images. Nous avons tenté de supprimer une image avec plusieurs étiquettes, en observant que docker rmi ne supprime que l'étiquette spécifiée, et non l'identifiant d'image sous - jacent, si d'autres étiquettes font toujours référence à elle. Nous avons réussi à supprimer une image en spécifiant son étiquette et avons également démontré comment supprimer une image par son identifiant, y compris l'utilisation du drapeau de force (-f) si nécessaire. Enfin, nous avons appris à supprimer une image en utilisant son digest, qui fournit un identifiant unique et immuable pour le contenu de l'image.