Docker history

Version datée du 1 juin 2025 à 01:52 par Geo (discussion | contributions)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

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 :

  1. Comprendre la construction de l’image

Chaque ligne correspond à une instruction dans le Dockerfile (ex: RUN, COPY, ENV).

  1. Identifier les couches les plus volumineuses

Pour optimiser la taille de l’image (ex: repérer une installation inutilement lourde).

  1. 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 historyCouches de construction (empilement des instructions).
  • docker inspectMé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