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 :
1. **Comprendre la construction de l'image**
Chaque ligne correspond à une instruction dans le `Dockerfile` (ex: `RUN`, `COPY`, `ENV`).
2. **Identifier les couches les plus volumineuses**
Pour optimiser la taille de l'image (ex: repérer une installation inutilement lourde).
3. **Déboguer des problèmes**
Retracer les modifications apportées à l’image.
---
- **Exemple de sortie**
```bash 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é :**
```dockerfile 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 : ```bash docker inspect mon-image:latest --format='Modèle:.Size' | numfmt --to=iec ```