Docker history
La commande docker history mon-image:latest affiche les couches (layers) qui composent une image Docker, ainsi que leur taille et les commandes qui les ont générées. C’est très utile pour :
- Comprendre la construction de l’image
Chaque ligne correspond à une instruction dans le Dockerfile (ex: RUN, COPY, ENV).
- Identifier les couches les plus volumineuses
Pour optimiser la taille de l’image (ex: repérer une installation inutilement lourde).
- Déboguer des problèmes
Retracer les modifications apportées à l’image.
Exemple de sortie
IMAGE CREATED CREATED BY SIZE COMMENT
a1b2c3d4e5f6 2 minutes ago /bin/sh -c apt-get install -y python3 150MB
f6e5d4c3b2a1 5 minutes ago /bin/sh -c apt-get update && apt-get upgrade 50MB
123456789abc 1 hour ago /bin/sh -c #(nop) ENV PYTHONUNBUFFERED=1 0B
789abc123def 1 week ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
def123abc456 1 week ago /bin/sh -c #(nop) ADD file:123...in / 120MB
Clés à retenir
SIZE: Taille ajoutée par chaque couche.
Les lignes avec 0B sont des métadonnées (ex: ENV, CMD).
CREATED BY: Commande exécutée pour créer la couche.
Les commandes tronquées peuvent être affichées en entier avec --no-trunc.
IMAGE: ID de la couche intermédiaire (souvent inutile sauf pour du debug avancé).
Options utiles
| Option | Description |
|---|---|
--no-trunc
|
Affiche les commandes complètes (non tronquées). Ex: docker history --no-trunc mon-image:latest
|
--format "Modèle:.ID\tModèle:.CreatedBy\tModèle:.Size"
|
Formatage personnalisé (ex: pour extraire des données). |
--human=true
|
Affiche les tailles en format lisible (Mo, Go) (activé par défaut). |
Exemple d’optimisation
Si vous voyez une couche RUN apt-get install très volumineuse, vous pouvez :
- Fusionner les commandes dans un seul RUN pour réduire les couches.
- Nettoyer les caches dans la même instruction (ex: apt-get clean).
Dockerfile optimisé :
RUN apt-get update \
&& apt-get install -y python3 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
Différence avec docker inspect
docker history→ Couches de construction (empilement des instructions).
docker inspect→ Métadonnées globales (taille totale, variables, ports, etc.).
Pour voir la taille totale de l’image :
docker inspect mon-image:latest --format='{{.Size}}' | numfmt --to=iec