Introduction
Dans ce lab, vous apprendrez à gérer efficacement votre environnement Docker en supprimant les conteneurs arrêtés à l'aide de la commande docker container prune. Nous commencerons par créer et arrêter plusieurs conteneurs pour simuler un scénario réel. Ensuite, vous explorerez différentes méthodes pour nettoyer ces conteneurs arrêtés, notamment en supprimant tous les conteneurs, en supprimant ceux créés avant une heure spécifique, et en supprimant sélectivement les conteneurs en fonction de leurs labels (étiquettes). Cette expérience pratique vous permettra d'acquérir les compétences nécessaires pour maintenir votre système Docker propre et optimisé.
Créer et arrêter des conteneurs
Dans cette étape, nous allons apprendre à créer et arrêter des conteneurs Docker. Les conteneurs Docker sont des unités légères, portables et autonomes contenant tout le nécessaire pour exécuter une application.
Commencez par télécharger une image Docker que nous utiliserons pour créer des conteneurs. Nous utiliserons l'image ubuntu, qui est un système d'exploitation Ubuntu minimal.
docker pull ubuntu
Vous devriez voir une sortie indiquant que l'image est en cours de téléchargement.
Using default tag: latest
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
Maintenant que nous avons l'image, créons et exécutons un conteneur à partir de celle-ci. Nous utiliserons la commande docker run. Le flag -d exécute le conteneur en mode détaché (en arrière-plan), et le flag --name attribue un nom au conteneur.
docker run -d --name my-ubuntu-container ubuntu sleep infinity
Cette commande crée un conteneur nommé my-ubuntu-container à partir de l'image ubuntu et exécute la commande sleep infinity à l'intérieur. La commande sleep infinity maintient le conteneur en fonctionnement indéfiniment.
Vous devriez voir une longue chaîne de caractères en sortie, qui correspond à l'ID du conteneur.
<container_id>
Pour vérifier que le conteneur est en cours d'exécution, nous pouvons utiliser la commande docker ps.
docker ps
Cette commande liste tous les conteneurs en cours d'exécution. Vous devriez voir votre my-ubuntu-container dans la liste.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "sleep infinity" X seconds ago Up X seconds my-ubuntu-container
Maintenant, créons un autre conteneur, mais cette fois sans lui donner de nom spécifique. Docker générera automatiquement un nom.
docker run -d ubuntu sleep infinity
À nouveau, vous verrez l'ID du conteneur en sortie.
<container_id>
Exécutez docker ps à nouveau pour voir les deux conteneurs en cours d'exécution.
docker ps
Vous devriez maintenant voir deux conteneurs listés.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "sleep infinity" X seconds ago Up X seconds my-ubuntu-container
<container_id> ubuntu "sleep infinity" X seconds ago Up X seconds <random_name>
Maintenant, arrêtons le conteneur nommé my-ubuntu-container. Nous pouvons utiliser la commande docker stop suivie du nom ou de l'ID du conteneur.
docker stop my-ubuntu-container
Vous devriez voir le nom du conteneur en sortie, indiquant qu'il a été arrêté.
my-ubuntu-container
Exécutez docker ps à nouveau. Vous verrez que my-ubuntu-container n'apparaît plus, car docker ps n'affiche que les conteneurs en cours d'exécution.
docker ps
Pour voir tous les conteneurs, y compris ceux arrêtés, utilisez la commande docker ps -a.
docker ps -a
Vous devriez maintenant voir les deux conteneurs, avec my-ubuntu-container ayant un statut Exited.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "sleep infinity" X minutes ago Exited (0) X seconds ago my-ubuntu-container
<container_id> ubuntu "sleep infinity" X minutes ago Up X minutes <random_name>
Enfin, arrêtons le deuxième conteneur en utilisant son ID. Vous pouvez obtenir l'ID à partir de la sortie de docker ps -a. Remplacez <container_id> par l'ID réel du deuxième conteneur.
docker stop <container_id>
Vous devriez voir l'ID du conteneur en sortie.
<container_id>
Exécutez docker ps -a une dernière fois pour confirmer que les deux conteneurs sont arrêtés.
docker ps -a
Les deux conteneurs devraient maintenant avoir un statut Exited.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "sleep infinity" X minutes ago Exited (0) X seconds ago my-ubuntu-container
<container_id> ubuntu "sleep infinity" X minutes ago Exited (0) X seconds ago <random_name>
Supprimer tous les conteneurs arrêtés
Dans l'étape précédente, nous avons créé et arrêté deux conteneurs. Les conteneurs arrêtés continuent de consommer de l'espace disque et des ressources. Dans cette étape, nous allons apprendre à supprimer tous les conteneurs arrêtés en utilisant la commande docker container prune.
Commencez par lister tous les conteneurs, y compris ceux arrêtés, pour visualiser les conteneurs que nous allons supprimer.
docker ps -a
Vous devriez voir les deux conteneurs que nous avons arrêtés précédemment.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "sleep infinity" X minutes ago Exited (0) X minutes ago my-ubuntu-container
<container_id> ubuntu "sleep infinity" X minutes ago Exited (0) X minutes ago <random_name>
Maintenant, supprimons tous les conteneurs arrêtés. La commande docker container prune permet de supprimer tous les conteneurs arrêtés.
docker container prune
Docker demandera une confirmation avant de supprimer les conteneurs. Tapez y et appuyez sur Entrée pour continuer.
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Vous devriez voir une sortie indiquant les conteneurs supprimés et l'espace total récupéré.
Deleted Containers:
<container_id>
<container_id>
Total reclaimed space: XMB
Pour vérifier que les conteneurs arrêtés ont bien été supprimés, listez à nouveau tous les conteneurs.
docker ps -a
Cette fois, vous ne devriez voir aucune sortie, ce qui indique qu'il ne reste plus aucun conteneur (en cours d'exécution ou arrêté).
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Nettoyer les conteneurs arrêtés créés avant une date spécifique
Dans l'étape précédente, nous avons appris à supprimer tous les conteneurs arrêtés. Parfois, vous pourriez vouloir ne supprimer que les conteneurs arrêtés créés avant un certain moment. Cela peut être utile pour nettoyer les anciens conteneurs tout en conservant les plus récents. Dans cette étape, nous allons apprendre à supprimer les conteneurs arrêtés créés avant une heure spécifique en utilisant le flag --filter avec le filtre until.
Commencez par créer quelques conteneurs et arrêtez-les pour avoir des éléments à nettoyer.
docker run -d --name container-old-1 ubuntu sleep infinity
docker run -d --name container-old-2 ubuntu sleep infinity
Attendez quelques secondes, puis créez un autre conteneur. Ce sera notre conteneur "récent".
sleep 5
docker run -d --name container-new-1 ubuntu sleep infinity
Maintenant, arrêtez tous les conteneurs.
docker stop container-old-1 container-old-2 container-new-1
Listez tous les conteneurs pour voir leur statut et leur heure de création.
docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.CreatedAt}}"
Vous devriez voir une sortie similaire à celle-ci, avec des heures de création différentes :
container-old-1 Exited (0) X seconds ago YYYY-MM-DD HH:MM:SS +0000 UTC
container-old-2 Exited (0) X seconds ago YYYY-MM-DD HH:MM:SS +0000 UTC
container-new-1 Exited (0) X seconds ago YYYY-MM-DD HH:MM:SS +0000 UTC
Maintenant, supprimons les conteneurs arrêtés créés avant une heure spécifique. Nous utiliserons le filtre until avec la commande docker container prune. Le filtre until accepte un timestamp ou une durée. Pour cet exemple, nous utiliserons une durée, en spécifiant que nous voulons supprimer les conteneurs créés il y a plus de 10 secondes.
docker container prune --filter "until=10s"
Docker demandera une confirmation. Tapez y et appuyez sur Entrée.
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Vous devriez voir une sortie indiquant que les anciens conteneurs ont été supprimés. Le conteneur récent ne devrait pas figurer dans la liste des éléments supprimés.
Deleted Containers:
<container_id_old_1>
<container_id_old_2>
Total reclaimed space: XMB
Pour vérifier que seuls les anciens conteneurs ont été supprimés, listez à nouveau tous les conteneurs.
docker ps -a --format "{{.Names}}\t{{.Status}}"
Vous ne devriez voir que le conteneur container-new-1 listé avec un statut Exited.
container-new-1 Exited (0) X seconds ago
Nettoyer les conteneurs arrêtés avec un label spécifique
Dans les étapes précédentes, nous avons appris à supprimer tous les conteneurs arrêtés et les conteneurs arrêtés en fonction de leur date de création. Dans cette étape, nous allons explorer une autre méthode utile pour filtrer les conteneurs à supprimer : l'utilisation des labels. Les labels sont des paires clé-valeur que vous pouvez associer aux objets Docker, y compris les conteneurs, pour les organiser et les gérer.
Commencez par créer quelques conteneurs avec différents labels.
docker run -d --name container-label-app --label app=frontend ubuntu sleep infinity
docker run -d --name container-label-env --label env=development ubuntu sleep infinity
docker run -d --name container-no-label ubuntu sleep infinity
Maintenant, arrêtez tous les conteneurs.
docker stop container-label-app container-label-env container-no-label
Listez tous les conteneurs et leurs labels pour voir les labels que nous avons appliqués.
docker ps -a --format "{{.Names}}\t{{.Labels}}"
Vous devriez voir une sortie similaire à celle-ci :
container-label-app app=frontend
container-label-env env=development
container-no-label
Maintenant, supprimons uniquement les conteneurs arrêtés ayant le label app=frontend. Nous utiliserons le flag --filter avec le filtre label.
docker container prune --filter "label=app=frontend"
Docker demandera une confirmation. Tapez y et appuyez sur Entrée.
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Vous devriez voir une sortie indiquant que le conteneur avec le label app=frontend a été supprimé.
Deleted Containers:
<container_id_app_frontend>
Total reclaimed space: XMB
Pour vérifier que seul le conteneur avec le label app=frontend a été supprimé, listez à nouveau tous les conteneurs.
docker ps -a --format "{{.Names}}\t{{.Labels}}"
Vous devriez maintenant voir uniquement les conteneurs avec le label env=development et sans label.
container-label-env env=development
container-no-label
Vous pouvez également supprimer les conteneurs qui n'ont pas un label spécifique en utilisant le préfixe ! avec le filtre de label. Supprimons le conteneur qui n'a pas le label env=development.
docker container prune --filter "label!=env=development"
Confirmez la suppression en tapant y et en appuyant sur Entrée.
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Vous devriez voir une sortie indiquant que le conteneur sans le label env=development a été supprimé.
Deleted Containers:
<container_id_no_label>
Total reclaimed space: XMB
Listez tous les conteneurs une dernière fois pour confirmer que seul le conteneur avec le label env=development reste.
docker ps -a --format "{{.Names}}\t{{.Labels}}"
Vous ne devriez voir que le conteneur container-label-env listé.
container-label-env env=development
Résumé
Dans ce labo, nous avons appris à créer et arrêter des conteneurs Docker en utilisant les commandes docker run et docker stop, ainsi qu'à lister les conteneurs en cours d'exécution avec docker ps. Nous avons ensuite exploré la commande docker container prune pour supprimer efficacement les conteneurs arrêtés. Plus précisément, nous avons pratiqué :
- La suppression de tous les conteneurs arrêtés
- L'élimination des conteneurs arrêtés créés avant une heure spécifique en utilisant l'option
--filter until - La suppression sélective des conteneurs arrêtés en fonction de leurs labels avec l'option
--filter label
Ces étapes ont démontré des méthodes pratiques pour gérer et nettoyer les conteneurs arrêtés dans un environnement Docker.



