← Retour à l'accueil
📖 1. Théorie et Fonctionnement
Une image Docker est un **package** qui inclut tout ce qui est nécessaire à l'exécution d'une application. C'est un **modèle en lecture seule**.
Elle contient :
- Le code de l'application.
- L'environnement d'exécution (ex: Node.js, Python).
- Les bibliothèques et dépendances.
- Les variables d'environnement.
- Les fichiers de configuration.
Une image est créée à partir d'un fichier de commandes appelé Dockerfile.
Il est crucial de bien les différencier :
Image (Le "Modèle")
- État : Passif, immuable (lecture seule).
- Analogie : Une recette, un plan, un snapshot.
- Création : Construite depuis un
Dockerfile.
Conteneur (L'"Instance")
- État : Actif, vivant (processus en cours).
- Analogie : Le gâteau préparé, la maison construite.
- Création : Lancé depuis une image (ex:
docker run).
Une image est composée de plusieurs **couches** superposées. Chaque couche représente une instruction du Dockerfile (ex: une couche pour l'OS, une pour Apache, une pour PHP, etc.).
Schéma illustrant la superposition de la couche inscriptible du conteneur sur les couches en lecture seule de l'image.
- Efficacité : Les couches sont partagées. Si 10 conteneurs utilisent la même image de base, ils partagent ces couches en lecture seule.
- Copy-on-Write (CoW) : Lorsqu'un conteneur est lancé, Docker ajoute une fine **couche inscriptible** sur le dessus. Les modifications faites dans le conteneur sont écrites dans cette couche, sans altérer l'image de base.
Exemple Concret : Image Simple vs Image Complexe
Une image simple comme nginx:alpine a très peu de couches. En revanche, une image de développement comme cirrusci/flutter (utilisée pour le développement Flutter) peut contenir des dizaines de couches : une pour l'OS, une pour le SDK, une pour les dépendances... C'est là que l'efficacité du partage de couches prend tout son sens !
💻 2. Commandes de Manipulation
Afficher la liste de toutes les commandes Docker :
Afficher la version de Docker :
Afficher des informations détaillées sur l'installation Docker (nombre d'images, de conteneurs, etc.) :
Rechercher une image sur le Docker Hub (le registre officiel) :
Filtrer la recherche pour n'afficher que les images officielles :
Télécharger une image (par défaut, le tag latest) :
Télécharger une image avec un tag (version) spécifique :
Lister toutes les images téléchargées sur votre machine :
(Alias : docker image ls)
L'output de cette commande contient :
- REPOSITORY : Le nom de l'image.
- TAG : La version de l'image (
latestpar défaut). - IMAGE ID : L'identifiant unique de l'image.
- CREATED : La date de création de l'image.
- SIZE : La taille de l'image.
Supprimer une image par son nom ou son ID :
(Alias : docker image rm hello-world)
Erreur fréquente : Si un conteneur (même arrêté) utilise cette image, vous aurez une erreur.
Pour forcer la suppression (supprime aussi les conteneurs liés), utilisez -f ou --force :
Commande bonus : Supprimer toutes les images sur votre machine :
(docker images -q ne liste que les ID d'images, qui sont passés à docker rmi -f).
Pour voir les différentes couches qui composent une image (et les commandes qui les ont créées), utilisez docker history :
C'est très utile pour comprendre comment une image est construite et pour voir l'intérêt du système de couches (ex: docker history cirrusci/flutter:latest).
📌 3. Aide-Mémoire des Commandes
Afficher de l'aide :
Afficher des informations système :
Rechercher une image :
Télécharger une image :
Lister les images locales :
Voir les couches d'une image :
Supprimer une image :
Forcer la suppression d'une image :
🧑💻 4. TP (Exercices Pratiques)
Exercice 1 : Exploration du Docker Hub
- Recherchez une image pour le serveur web
nginxsur le Docker Hub. - Filtrez les résultats pour ne voir que l'image officielle.
- Téléchargez (
pull) la versionstable-alpinede l'image officiellenginx. (alpinesignifie qu'il s'agit d'une version très légère). - Listez vos images locales pour vérifier que
nginxavec le tagstable-alpineest bien présente.
Exercice 2 : Téléchargement et Nettoyage
- Téléchargez l'image
httpd(le serveur Apache) avec son taglatest. - Téléchargez l'image
redisavec le taglatest. - Listez toutes vos images. Notez leurs tailles.
- Supprimez (
rmi) l'imagehttpd. - Essayez de supprimer l'image
redis.
Exercice 3 : Analyse d'une image complexe (Flutter)
- Recherchez des images pour
flutter. L'imagecirrusci/flutterest une image populaire pour la CI/CD. - Téléchargez l'image
cirrusci/flutter:latest. (Attention : elle est assez volumineuse !) - Utilisez la commande
docker history cirrusci/flutter:latestpour voir la liste des couches. Combien y en a-t-il ? - Comparez le nombre de couches et la taille de
cirrusci/flutteravec l'imagenginx:stable-alpinede l'exercice 1. Cela illustre bien la différence entre une image applicative légère et une image de développement complète.
Exercice 4 (Bonus) : Nettoyage Complet
En utilisant la commande "bonus" vue plus haut, supprimez toutes les images de votre machine en une seule commande. (Attention : à n'utiliser que si vous êtes sûr de ne plus avoir besoin des images !)