Article original : Docker Image Guide: How to Delete Docker Images, Stop Containers, and Remove all Volumes

Par Sebastian Sigl

Docker a été largement adopté et est un excellent moyen de déployer une application dans le cloud (ou une autre infrastructure prête pour Docker). Il est également utile pour le développement local. Vous pouvez démarrer des applications complexes rapidement, développer en isolation et avoir tout de même de très bonnes performances.

Voici les commandes les plus importantes pour utiliser Docker efficacement dans votre travail quotidien.

Lister toutes les images Docker

docker images

Image

Dans mon cas, j'ai 3 images installées :

  • MySQL, version 8.0.19, une étiquetée comme dernière version
  • et Cassandra avec la dernière version.

Pour obtenir plus d'informations sur une image, vous pouvez l'inspecter :

docker inspect mysql:latest

Image

Cela retournera une liste d'informations. Alternativement, vous pouvez également utiliser l'ID de l'image pour obtenir les informations :

docker inspect 3a5e53f63281

La sortie peut être écrasante. Par conséquent, il existe une option pratique pour filtrer certaines informations :

docker inspect --format='{{.RepoTags}}  {{.Config.Image}}' 3a5e53f63281

Image

Supprimer des images Docker

Une seule image peut être supprimée par :

docker rm mysql:latest

Image

Dans mon cas, l'image est toujours étiquetée avec mysql:8.0.19. Par conséquent, pour la supprimer complètement, je dois également supprimer une autre étiquette de version :

docker rm mysql:8.0.19

Image

Pour supprimer l'image directement, il est plus facile de supprimer l'image par son ID :

docker image rm 3a5e53f63281 -f

Image

L'option -f force l'exécution, car sinon vous obtiendriez une erreur si l'image est référencée par plus d'une étiquette.

Démarrer une image Docker

Une image peut être démarrée au premier plan par :

docker run cassandra

Si l'image n'existe pas, elle sera téléchargée. Vous pouvez arrêter l'exécution en appuyant sur CTRL+C. Vous pouvez également l'exécuter en arrière-plan en ajoutant l'option -d :

docker run -d mysql

Image

Si le conteneur est démarré en arrière-plan, vous recevez l'ID du conteneur.

Par défaut, le conteneur s'exécute en isolation. Par conséquent, vous ne pourrez pas communiquer avec lui, et aucun fichier n'est stocké dans votre répertoire actuel.

Transférer les ports d'un conteneur

Vous pouvez transférer les ports en utilisant l'option -p vers, par exemple, une page exposée par votre conteneur :

docker run -p 8080:80 nginx

Ce conteneur NGINX expose un serveur web sur le port 80. En utilisant -p 8080:80, le port local 8080 est transféré vers le port 80 du conteneur.

Se connecter à un conteneur

Parfois, il est utile de se connecter à un conteneur. Cela n'est possible que si le conteneur a un shell installé. Vous obtiendrez une erreur si ce n'est pas le cas.

Tout d'abord, démarrez le conteneur détaché et donnez-lui un nom :

docker run -d --name my_container nginx

Cela retournera un ID de conteneur. Maintenant, vous pouvez exécuter un shell dans le conteneur et attacher votre entrée et sortie à celui-ci en utilisant les options -i et -t :

docker exec -it my_container bash

Au lieu du nom du conteneur, vous pouvez également utiliser l'ID du conteneur retourné pour toutes les opérations suivantes. Parfois, bash n'est pas disponible. Par conséquent, vous pouvez également essayer de lancer un shell de base :

docker exec -it my_container sh

Lister les conteneurs en cours d'exécution

Après avoir démarré un conteneur, vous pouvez voir tous les conteneurs en cours d'exécution en exécutant :

docker ps

Image

En ajoutant -a, les conteneurs arrêtés seront également listés :

docker ps -a

Image

Partager un dossier local avec un conteneur

Parfois, il est utile de synchroniser des fichiers entre le conteneur et le système de fichiers local. Vous pouvez le faire en exécutant un conteneur et en utilisant l'option -v. Sur Linux et macOS, vous pouvez partager un dossier temporaire local avec un conteneur par :

docker run --name=my_container -d -v $(pwd)/tmp:/var/log/nginx -p 8080:80 nginx

Sur Windows, vous pouvez exécuter :

docker run --name=my_container -d -v %cd%/tmp:/var/log/nginx -p 8080:80 nginx

Arrêter les conteneurs en cours d'exécution

Il est possible d'arrêter un conteneur en cours d'exécution par :

docker stop my_container

L'arrêt d'un conteneur arrête tous les processus mais conserve les modifications dans le système de fichiers.

Démarrer un conteneur arrêté

Un conteneur arrêté peut être démarré par :

docker start my_container

Supprimer un conteneur

Pour supprimer un conteneur arrêté, vous pouvez exécuter :

docker rm my_container

Pour arrêter et supprimer le conteneur en une seule commande, vous pouvez ajouter l'option de force -f.

docker rm -f my_container

Créer un volume et le partager avec plusieurs conteneurs

Un volume indépendant nommé SharedData peut être créé par :

docker volume create --name SharedData

docker run --name=my_container -d -v SharedData:/var/log/nginx -p 8080:80 nginx

docker run --name=my_container_2 -d -v SharedData:/var/log/nginx -p 8080:80 nginx

Les deux conteneurs auront un dossier partagé, et les fichiers seront synchronisés entre les deux conteneurs.

Supprimer un volume

Pour supprimer un volume, tous les conteneurs qui utilisent le volume doivent être supprimés.

docker rm -f my_container
docker rm -f my_container_2
docker volume rm SharedData

Supprimer les conteneurs arrêtés et les images inutilisées

Une commande de nettoyage sûre est :

docker system prune -a

Supprimer tous les volumes inutilisés

Tous les volumes non montés peuvent être supprimés par :

docker volume prune

Conclusion

Créer des conteneurs, se connecter à des conteneurs, transférer des ports et partager des volumes sont les commandes les plus importantes de votre interface de ligne de commande Docker. Elles constituent la base de systèmes comme Kubernetes et nous permettent de créer et d'exécuter des applications en isolation.

J'espère que vous avez apprécié l'article. Si vous l'aimez et ressentez le besoin d'une salve d'applaudissements, suivez-moi sur Twitter.

Je suis cofondateur de notre plateforme de voyage révolutionnaire appelée Explore The World. Nous sommes une jeune startup située à Dresde, en Allemagne, et ciblerons d'abord le marché allemand. Contactez-moi si vous avez des commentaires et des questions sur un sujet quelconque.

Bonne exploration de Docker :)

Références