Polarys
Docker & conteneurs/Images et Dockerfile

Images et Dockerfile

Gérer les images Docker

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 :

TagTailleUsage
python:3.11~900 MoDéveloppement (outils inclus)
python:3.11-slim~130 MoProduction (Debian minimal)
python:3.11-alpine~50 MoTrès léger (musl libc, attention aux incompatibilités)

En production, préférer -slim : bon compromis taille/compatibilité.

Erreurs fréquentes

  • Utiliser :latest en production : latest change à chaque nouveau build. En prod, épingler la version (nginx:1.25.3).
  • Accumuler les images : chaque docker build crée de nouvelles images. docker image prune nettoie régulièrement.
  • Alpine et les binaires compilés : Alpine utilise musl libc au lieu de glibc. 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.

Quiz de validation

Quiz - 2 questions

1. Pourquoi éviter le tag :latest en production ?

2. Quelle variante d'image Python est recommandée en production pour sa taille raisonnable et sa compatibilité ?

Suis ta progression

Crée un compte gratuit pour suivre ta progression et accéder à toutes les leçons.