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

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

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

Supprimer des images Docker
Une seule image peut être supprimée par :
docker rm mysql:latest

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

Pour supprimer l'image directement, il est plus facile de supprimer l'image par son ID :
docker image rm 3a5e53f63281 -f

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

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

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

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
- Documentation de la ligne de commande Docker https://docs.docker.com/engine/reference/commandline/docker/