Gérer les images Docker
Les images Docker sont le point de départ de tout conteneur. Savoir les chercher, les télécharger, les inspecter et les gérer est la compétence de base.
Chercher et télécharger
# Chercher une image sur Docker Hub
docker search nginx
docker search --filter is-official=true python
# Télécharger une image (sans la lancer)
docker pull nginx
docker pull nginx:1.25 # version spécifique
docker pull ubuntu:22.04
docker pull python:3.11-slim # variante allégée
Les tags permettent de spécifier la version. Sans tag, Docker utilise :latest : à éviter en production (version changeante).
Lister et inspecter
# Lister les images locales
docker images
docker images --format "table {{.Repository}} {{.Tag}} {{.Size}}"
# Inspecter le contenu d'une image (layers, variables d'env, commande de démarrage)
docker inspect nginx
# Voir les layers d'une image
docker history nginx
Supprimer des images
# Supprimer une image par nom:tag
docker rmi nginx:latest
# Supprimer une image par ID
docker rmi abc123
# Forcer la suppression (même si un conteneur arrêté utilise l'image)
docker rmi -f nginx
# Nettoyer TOUTES les images non utilisées
docker image prune -a
Nommage et tags
# Format complet d'un nom d'image
# [registry]/[namespace]/[repository]:[tag]
# docker.io/library/nginx:1.25
# Tagger une image locale
docker tag mon-app:latest monregistry.example.com/mon-app:v1.2
# Pousser vers un registry privé
docker login monregistry.example.com
docker push monregistry.example.com/mon-app:v1.2
Cas concret : choisir la bonne image
Pour une application Python, plusieurs variantes existent :
| Tag | Taille | Usage |
|---|---|---|
python:3.11 | ~900 Mo | Développement (outils inclus) |
python:3.11-slim | ~130 Mo | Production (Debian minimal) |
python:3.11-alpine | ~50 Mo | Très léger (musl libc, attention aux incompatibilités) |
En production, préférer -slim : bon compromis taille/compatibilité.
Erreurs fréquentes
- Utiliser
:latesten production :latestchange à chaque nouveau build. En prod, épingler la version (nginx:1.25.3). - Accumuler les images : chaque
docker buildcrée de nouvelles images.docker image prunenettoie régulièrement. - Alpine et les binaires compilés : Alpine utilise
musl libcau lieu deglibc. Certaines bibliothèques Python (NumPy, etc.) nécessitent des adaptations.
À retenir
docker pull image:tag→ télécharger sans lancer.- Tag = version. Toujours épingler en production, jamais
:latest. docker history→ voir les layers d'une image.docker image prune -a→ nettoyer les images inutilisées.