kubenow
Se connecterCommencer gratuitement

C.5 · Construire et distribuer des images

Skopeo : inspecter et copier des images entre registres

Leçon théorique · questionnaire de validation · gratuit, dans le navigateur

Avant de déployer une image, on veut parfois savoir ce qu'elle contient : ses étiquettes disponibles, son empreinte, ses architectures, son utilisateur. Ou la copier d'un registre public vers le registre interne de l'entreprise. Télécharger l'image entière avec docker pull juste pour ça est lent et inutile. Skopeo travaille directement sur les registres, sans démon et sans stockage local. Cette leçon est théorique : votre machine de lab n'a pas Skopeo.

Ce que vous saurez à la fin : inspecter une image à distance, lister ses étiquettes, copier une image entre registres (ou vers un dossier), garder l'empreinte et les signatures lors d'une copie, et synchroniser un registre interne.

1. Inspecter sans télécharger

skopeo inspect docker://docker.io/library/nginx:1.27-alpine
{
  "Name": "docker.io/library/nginx",
  "Digest": "sha256:4c0fd…",
  "Created": "2026-…",
  "Architecture": "amd64",
  "Os": "linux",
  "Labels": { … },
  "Layers": [ … ]
}
skopeo inspect --raw docker://docker.io/library/nginx:1.27-alpine | jq '.manifests[].platform'   # les architectures (index multi-plateforme)
skopeo inspect --config docker://docker.io/library/nginx:1.27-alpine | jq '.config.User'          # l'utilisateur, les variables, l'ENTRYPOINT
skopeo list-tags docker://docker.io/library/nginx | jq -r '.Tags[]' | tail                       # les étiquettes disponibles

Le préfixe désigne le transport : docker:// (un registre), oci: (un dossier au format OCI), docker-archive: (un fichier docker save), containers-storage: (le stockage local de Podman et Buildah).

2. Copier

skopeo copy docker://docker.io/library/nginx:1.27-alpine \
            docker://registre.exemple.fr/miroir/nginx:1.27-alpine        # registre à registre, sans passer par le disque local

skopeo copy --all docker://… docker://…                                    # toutes les architectures de l'index, pas seulement la vôtre
skopeo copy docker://docker.io/library/nginx:1.27-alpine oci:./nginx-oci:1.27   # vers un dossier : pour un transfert hors ligne

Authentification : skopeo login registre.exemple.fr, ou --src-creds / --dest-creds. Les identifiants sont rangés dans le même fichier que Podman (auth.json).

3. Pourquoi un registre interne ?

  • Disponibilité : un registre public peut limiter vos téléchargements (Docker Hub le fait pour les comptes anonymes) ou tomber au mauvais moment.
  • Contrôle : seules les images analysées et approuvées entrent dans le registre interne, et une politique d'admission peut n'autoriser que lui (leçon 6.7).
  • Réseaux isolés : les clusters sans accès à Internet tirent tout depuis le miroir.

Skopeo synchronise un lot d'images décrit dans un fichier :

# synchro.yaml
docker.io:
  images:
    library/nginx: ["1.27-alpine"]
    library/postgres: ["17"]
skopeo sync --src yaml --dest docker synchro.yaml registre.exemple.fr/miroir

4. Empreintes et signatures

Une copie à l'identique conserve l'empreinte du manifeste : nginx@sha256:4c0fd… désigne la même image dans les deux registres, et un déploiement épinglé par empreinte (leçon 6.7) fonctionne avec le miroir. Une copie qui convertit le format (option --format) change en revanche l'empreinte, et invalide les signatures qui portaient dessus. Skopeo sait aussi vérifier et apposer des signatures selon une politique (/etc/containers/policy.json).

5. Récapitulatif

Besoin Commande
Que contient cette image ? skopeo inspect docker://…
Quelles versions existent ? skopeo list-tags docker://…
Quelle est son empreinte ? skopeo inspect … | jq -r .Digest
La copier dans le registre interne skopeo copy docker://… docker://…
Préparer un transfert hors ligne skopeo copy … oci:dossier

Validez la leçon avec le questionnaire.

Contenu aligné sur les programmes publiés par la CNCF (KCNA, CKAD, CKA, CKS), par le Linux Professional Institute (LPIC-1) et par Cisco (CCNA 200-301). KubeNow n'est ni affilié ni approuvé par la CNCF, la Linux Foundation, le LPI ou Cisco ; CKA, CKAD, CKS et KCNA sont des marques de la Linux Foundation, LPIC-1 est une marque du Linux Professional Institute, Cisco et CCNA sont des marques de Cisco Systems.