Passer au contenu principal

Images (Docker)

Registres et distribution

Le registre est le système de distribution des images Docker. Docker Hub est le registre public de référence, mais en production on utilise des registres privés pour le contrôle d'accès, la rétention et la proximité réseau.

Docker Hub

# Authentification
docker login

# Conventions de nommage
# docker.io/library/nginx:1.27       (image officielle)
# docker.io/monuser/monapp:1.0.0     (image personnelle)
# docker.io/monorg/monapp:latest     (image d'organisation)

# Tagger une image pour push
docker tag monapp:latest monuser/monapp:1.0.0
docker tag monapp:latest monuser/monapp:latest

# Pusher
docker push monuser/monapp:1.0.0
docker push monuser/monapp:latest

GitHub Container Registry (GHCR)

# Authentification avec un Personal Access Token (scope: read:packages, write:packages)
echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin

# Nommage : ghcr.io/org/image:tag
docker tag monapp:latest ghcr.io/monorg/monapp:1.0.0
docker push ghcr.io/monorg/monapp:1.0.0

GHCR lie les images aux repositories GitHub, ce qui facilite la gestion des accès (les membres de l'org ont accès aux packages de l'org).

Conventions de tags

  • SemVer : 1.0.0, 1.0, 1, latest — le plus courant pour les applications stables
  • Git SHA : sha-a1b2c3d — traçabilité exacte en CI/CD
  • Branch + SHA : main-a1b2c3d — utile pour les branches de feature
  • Ne jamais muter un tag existant en production (latest est acceptable en dev, pas en prod)

Pull par digest (immuable)

# Récupérer le digest d'une image
docker inspect --format='{{index .RepoDigests 0}}' nginx:1.27-alpine
# docker.io/library/nginx@sha256:abc123...

# Pull par digest (100% reproductible)
docker pull nginx@sha256:abc123...

# Dans un Dockerfile
FROM nginx@sha256:abc123...

Images multi-architecture

# Créer un builder multi-arch
docker buildx create --use --name multiarch

# Build et push multi-arch en une commande
docker buildx build   --platform linux/amd64,linux/arm64,linux/arm/v7   --tag monuser/monapp:1.0.0   --push .

Le registre stocke un manifest multi-arch qui pointe vers l'image correcte selon l'architecture. docker pull monuser/monapp:1.0.0 télécharge automatiquement la bonne variante.