1.1 · Images : tags, couches et Docker Hub

Niveau 1 · Conteneurs : images, volumes, réseaux

1.1Images : tags, couches et Docker Hub

Objectif : choisir la bonne image au bon tag et comprendre ses couches.
Temps estimé : 12 min · lecture autonome · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

L'essentiel en 30 secondes

  • Le tag, c'est la version : postgres:16 fige la majeure, postgres:16.4 la mineure, postgres:latest suit la dernière (donc change sans prévenir) — en production, on fige toujours un tag précis et on le note.
  • Des couches empilées et partagées : une image = un empilement de couches en lecture seule, mises en cache et partagées entre images — dix images sur la même base ne téléchargent la base qu'une fois.
  • Choisir sans se tromper : images officielles (mainteneur vérifié), tags supportés lus dans la doc, date de mise à jour et architecture (amd64/arm64) vérifiées — une image abandonnée depuis deux ans est un risque sécurité.

Mini-cas filé — Idir, devops junior à Alger

Idir, devops junior à Alger, doit conteneuriser la base de données d'une petite application interne. Au lieu de taper « postgres » et de prendre la première proposition, il ouvre la page officielle sur Docker Hub, compare les tags et retient postgres:16.4 : version figée, à jour, disponible en amd64 et arm64. Il note ce choix dans un fichier versions.txt partagé avec son équipe. Six mois plus tard, quand un collègue relance l'environnement sur une autre machine, il obtient exactement le même comportement — parce que le tag n'a pas bougé.

Ce même cas revient dans le cours, le schéma, le script et le défi 48h — et continue en 1.2, 1.3, 1.4 et 1.5.

1. Le tag, c'est la version

Après le « : », le tag désigne la variante de l'image : postgres:16 fige la version majeure, postgres:16.4 la mineure, postgres:latest suit la dernière disponible — donc change sans prévenir. En développement, suivre latest est acceptable ; en production, on fige toujours un tag précis et on le note (Idir l'écrit dans versions.txt).

La règle tient en une phrase : figer en production, suivre en veille. Un déploiement reproductible commence par un tag qui ne bouge pas.

2. Des couches empilées et partagées

Une image est un empilement de couches en lecture seule : chaque instruction du build ajoute une couche, chaque couche est mise en cache et partagée entre images. Télécharger dix images basées sur le même Debian ne télécharge la base qu'une fois : c'est ce qui rend Docker si économe en téléchargements et en disque.

Conséquence pratique : docker images affiche la taille décompressée, mais le téléchargement ne prend que les couches manquantes. D'où l'intérêt de bases partagées — et des variantes slim quand elles existent.

3. Choisir sur Docker Hub sans se tromper

Préférez les images officielles (badge, mainteneur vérifié), lisez les tags supportés et la documentation, vérifiez la date de mise à jour et l'architecture (amd64 pour PC/serveurs, arm64 pour Mac M et Raspberry). Une image obscure non mise à jour depuis deux ans est un risque sécurité, même si elle fait gagner 50 Mo.

Idir applique la grille à chaque nouvelle image : officielle, à jour, documentée — les seules retenues. Le reste ne monte jamais en production.

Erreur d'interprétation fréquente : « latest = la meilleure, et toutes les images se valent tant que le nom correspond ». Non. latest est un tag mouvant qui peut changer de version majeure au pire moment (dérive silencieuse), et une image au nom approchant, abandonnée depuis deux ans, embarque des failles connues. On fige un tag précis d'une image officielle, vérifiée et à jour.
Choisir une image de confiance Nom, tag figé, source officielle : l'image de confiance Nom officiel MainteneurvérifiéTag figé 16.4, paslatest en prodSource à jour Date +architecture vérifiées
Nom, tag figé, source officielle : l'image de confiance
Version texte du schéma (SEO / lecteurs d'écran / traduction) : 1) Nommer : Idir part du besoin (base Postgres) et retient l'image officielle, pas une copie au nom approchant. 2) Figer : il choisit le tag 16.4 au lieu de latest et le note dans versions.txt. 3) Vérifier : date de mise à jour et architecture (amd64/arm64) contrôlées sur Docker Hub avant le premier pull. Leçon : un nom officiel, un tag figé, une source à jour — et le même tag redonne le même comportement six mois plus tard.

🔎 Exemple concret — 🔎 Exemple concret — Bien choisir Postgres

Le choix d'Idir pour la base de son application, sans latest en production.

docker pull postgres:16.4
docker images
# à éviter en production :
# docker run postgres:latest

Lecture : on fige la 16.4, on vérifie sa présence locale, on bannit latest de la prod.

Leçon : six mois plus tard, le même tag redonne le même comportement.

Vocabulaire de la section

Tag
Étiquette de version après le « : » (16, 16.4, latest) ; il désigne quelle variante de l'image on récupère.

Exemple simple : Idir fige postgres:16.4 pour sa base de production.

Ce que ce n'est pas : un simple commentaire décoratif.

Réflexe : prod = tag figé et noté, jamais latest.

Couche (layer)
Strate en lecture seule de l'image, mise en cache et partagée entre images.

Exemple simple : La base Debian téléchargée une seule fois pour dix images.

Ce que ce n'est pas : une copie complète dupliquée par image.

Réflexe : bases partagées = téléchargements économisés.

Image officielle
Image maintenue et vérifiée sur Docker Hub (badge, mainteneur identifié).

Exemple simple : Le postgres officiel choisi par Idir plutôt qu'une copie obscure.

Ce que ce n'est pas : la première image venue avec « postgres » dans le nom.

Réflexe : officielle, à jour, documentée — sinon on s'abstient.

latest
Tag mouvant qui suit la dernière version publiée : pratique en dev, instable en prod.

Exemple simple : Idir l'utilise pour tester, jamais pour déployer.

Ce que ce n'est pas : une version figée et reproductible.

Réflexe : latest en dev, tag précis en production.

En pratique — En pratique — Auditer vos images

  1. Listez vos images locales (docker images) et repérez les latest.
  2. Pour chacune, trouvez le tag figé équivalent sur Docker Hub.
  3. Vérifiez l'architecture et la fraîcheur de mise à jour.
  4. Notez votre choix (image:tag) dans un fichier versions.txt.
Chaque image que vous utilisez a un tag figé, justifié et noté.

Script prêt à dire — justifier son image (30 s)

« Pour la base, je prends l'image officielle postgres, tag 16.4 figé — pas latest, pour rester reproductible. J'ai vérifié la date de mise à jour et l'architecture sur Docker Hub, et je note le choix dans versions.txt pour l'équipe. »

À dire en montrant la page Docker Hub et le fichier versions.txt.

Modèle copier-coller — versions.txt

# versions.txt — Idir, Alger
# Une ligne par image : nom:tag figé + date du choix
postgres:16.4   # base appli interne (choix 2026-10)
nginx:1.27       # frontal web (choix 2026-10)
# Règle : latest interdit en prod. Tout changement = nouvelle ligne datée.

Base de données d'Idir

Comme ci-dessus : postgres:16.4 officiel, figé et noté — la base de l'application interne tourne à l'identique sur chaque machine.

Frontal web léger

nginx:1.27 officiel, variante slim si elle couvre le besoin : même grille (officielle, à jour, architecture vérifiée) avant le premier pull.

PC portable arm64

Collègue d'Idir sur Mac M : vérifier que le tag retenu existe bien en arm64 sur Docker Hub avant de promettre la reproductibilité.

Image d'outil ponctuel

ubuntu:24.04 en -it --rm pour bricoler (niveau 1.2) : même en jetable, on fige le tag au lieu de latest pour retrouver le même outil demain.

✓ Bonnes pratiques

  • Figer en production, suivre en veille.
  • Préférer les variantes slim quand elles existent.
  • Lire la page Docker Hub avant le premier pull.

✗ Pièges fréquents

  • Déployer latest en production (dérive silencieuse).
  • Prendre une image abandonnée pour gagner 50 Mo.
  • Ignorer l'architecture (image amd64 lente sur Mac M).

Points clés à retenir

  • Le tag fige la version ; latest bouge.
  • Les couches sont partagées et cachées.
  • Officielles, à jour, documentées : les seules retenues.
  • On note ses versions comme du code.

Défi 48h — appliquez demain

Listez vos images avec docker images, traquez les latest, trouvez leur tag figé sur Docker Hub (officiel, à jour, bonne architecture) et écrivez votre versions.txt.

Checklist sortie de section
  • Je choisis des images officielles, à jour et documentées.
  • Je fige un tag précis en production (jamais latest).
  • Je note chaque choix image:tag dans versions.txt.
Auto-évaluation 1-5 : est-ce que chaque image que j'utilise a un tag figé et justifié ?est-ce que j'ai vérifié source, fraîcheur et architecture avant le pull ?

Questions fréquentes

Alpine ou slim, que choisir ?

Les deux allègent : slim enlève l'inutile de l'image officielle, alpine change de libc (musl). Alpine est minuscule mais peut surprendre (DNS, perfs) : testez avant la prod. Dans les deux cas, on fige le tag et on vérifie la fraîcheur.

Combien pèse vraiment une image ?

docker images donne la taille décompressée ; le téléchargement ne prend que les couches manquantes. D'où l'intérêt des bases partagées : empiler dix images sur le même Debian ne coûte la base qu'une fois.

Vérifiez votre compréhension

Quelle pratique pour une base de données en production ?

Ressources supplémentaires (optionnel, pour aller plus loin)

Examen du niveau 1Questions inédites et durcies pour valider vos acquis