Aller au contenu

Gérez vos images de conteneurs avec Skopeo

Mise à jour :

logo skopeo

Gérer des images conteneurs peut vite devenir un casse-tête, surtout lorsqu’on doit les manipuler entre plusieurs registres sans forcément les télécharger. C’est là que Skopeo entre en jeu ! Contrairement à Docker ou Podman, cet outil ne dépend d’aucun démon et permet de copier, inspecter, supprimer et synchroniser des images directement depuis des registres distants.

Pourquoi utiliser Skopeo ?

Que vous travailliez avec Docker Hub, Quay.io, Harbor ou un registre privé, Skopeo simplifie la gestion des images en évitant les contraintes classiques.

Fonctionnalités de Skopeo

Skopeo est un outil puissant pour gérer les images conteneurs sans nécessiter de démon. Voici ses principales fonctionnalités :

  1. *Inspection et analyse d’images :
    • Afficher les métadonnées d’une image avec skopeo inspect.
    • Vérifier les signatures et la provenance d’une image.
    • Lister les tags disponibles d’un dépôt distant.
  2. Copie d’images entre registres :
    • Copier une image entre Docker Hub, Quay.io, Harbor, etc.
    • Transférer une image d’un registre privé sans passer par un moteur de conteneur.
    • Convertir une image entre les formats OCI et Docker.
  3. Gestion et suppression d’images à distance :
    • Supprimer une image directement sur un registre avec skopeo delete.
    • Authentification et gestion des accès avec --creds et --authfile.
  4. Comparaison et synchronisation d’images
    • Comparer plusieurs versions d’une image avec skopeo inspect.
    • Synchroniser des images entre plusieurs registres (skopeo sync).

Avec ces fonctionnalités, Skopeo devient un outil incontournable pour toute infrastructure DevOps nécessitant une gestion flexible des images conteneurs.

Installation de Skopeo

L’installation de Skopeo varie selon le système d’exploitation. Voici comment l’installer sur Linux, MacOS et Windows.

Installation sur Linux

  • Debian / Ubuntu

    Terminal window
    sudo apt update && sudo apt install -y skopeo
  • RHEL / CentOS / Fedora

    Terminal window
    sudo dnf install -y skopeo

Installation sur MacOS

Via Homebrew :

Terminal window
brew install skopeo

Installation sur Windows

Sur Windows, Skopeo peut être utilisé via WSL (Windows Subsystem for Linux) ou en téléchargeant les binaires.

  • Sur WSL : Si vous utilisez Ubuntu sous WSL :

    Terminal window
    sudo apt update && sudo apt install -y skopeo
  • Via les binaires (exécutable standalone)

    1. Télécharger le dernier binaire depuis la page des releases.
    2. Extraire et ajouter le binaire à votre PATH.

Après l’installation, vérifiez que Skopeo fonctionne avec :

Terminal window
skopeo --version
skopeo version 1.13.3

Vous êtes prêt à manipuler vos images conteneurs sans daemon !

Utilisation de Skopeo

Avec Skopeo, vous pouvez effectuer de nombreuses opérations sur les images de conteneurs sans avoir besoin de Docker ou Podman. sur votre poste

Voici quelques exemples d’utilisation courante de Skopeo :

Explorer et analyser des images conteneurs**

Avec Skopeo, il est possible d’inspecter les métadonnées d’une image conteneur sans la télécharger. C’est particulièrement utile pour vérifier une image avant de l’utiliser.

Inspecter une image

La commande skopeo inspect permet d’afficher les métadonnées d’une image hébergée sur un registre distant.

Terminal window
skopeo inspect docker://docker.io/library/nginx:latest

Ce qui affiche :

  • Tous les tags de l’image
  • Le digest de l’image
  • L’architecture et le système d’exploitation
  • La date de création
  • Les couches de l’image
  • Les variables d’environnement, le PATH, etc.

Si l’image est sur un registre nécessitant une authentification :

Terminal window
skopeo inspect --creds user:password docker://my-registry.com/my-image:latest

Lister les tags d’une image

Pour connaître les versions disponibles d’une image :

Terminal window
skopeo list-tags docker://docker.io/library/nginx

Cela retourne une liste des tags disponibles (ex. 1.21, latest, stable…).

Copier des images entre différents registres

L’une des fonctionnalités les plus puissantes de Skopeo est la possibilité de copier des images conteneurs entre différents registres sans les télécharger localement. Cela permet de déplacer des images entre Docker Hub, Quay.io, Harbor, un registre privé, ou encore un environnement air-gap.

Copier une image d’un registre à un autre

La commande de base pour copier une image est :

Terminal window
skopeo copy docker://quay.io/skopeo/stable:latest docker://registry.example.com/skopeo:latest

Cela télécharge directement l’image de Quay IO et la pousse vers registry.example.com.

Copier une image entre registres en incluant les credentials

Si votre registre nécessite une authentification :

Terminal window
skopeo copy --src-creds user:password --dest-creds user:password \
docker://docker.io/library/nginx:latest docker://my-registry.com/nginx:latest

Convertir une image entre formats OCI et Docker

Par défaut, Docker utilise le format Docker Image Manifest, mais certains outils comme Podman et Kubernetes préfèrent le format OCI.

Terminal window
skopeo copy docker://docker.io/library/nginx:latest oci:nginx-oci:latest

Convertir une image OCI en Docker

Terminal window
skopeo copy oci:nginx-oci:latest docker-archive:nginx.tar

L’image sera stockée localement sous forme de fichier TAR.

Copier une image vers un stockage local

Si vous voulez récupérer une image sans passer par un moteur de conteneur :

Terminal window
skopeo copy docker://docker.io/library/nginx:latest dir:/tmp/nginx

Cela extrait les couches et le manifest dans /tmp/nginx/.

Copier une image dans un environnement air-gap

Dans des environnements restreints, il peut être nécessaire d’exporter une image depuis un registre public pour l’importer dans un registre déconnecté.

  1. Exporter l’image en archive :

    Terminal window
    skopeo copy docker://docker.io/library/nginx:latest docker-archive:/tmp/nginx.tar
  2. Transférer l’archive vers l’environnement air-gap

  3. Importer l’image sur un registre privé :

    Terminal window
    skopeo copy docker-archive:/tmp/nginx.tar docker://private-registry.local/nginx:latest

Avec Skopeo, plus besoin de télécharger des images en local avant de les envoyer sur un autre registre ! Un gain de temps énorme pour les infrastructures DevOps et les environnements CI/CD.

Comparer et synchroniser des images**

Avec Skopeo, il est possible de comparer plusieurs versions d’une image et de synchroniser des images entre registres. Cela est utile pour s’assurer qu’une image est bien identique sur plusieurs environnements ou pour maintenir à jour un miroir privé.

Comparer des images avec skopeo inspect

Si vous souhaitez vérifier si deux images sont identiques, vous pouvez comparer leurs hashs (digest).

Terminal window
skopeo inspect docker://docker.io/library/nginx:latest | grep Digest
skopeo inspect docker://my-registry.com/nginx:latest | grep Digest

Si les digests sont identiques, cela signifie que les images sont exactement les mêmes.

Synchroniser des images entre registres (skopeo sync)

Si vous devez répliquer des images entre plusieurs registres, skopeo sync est l’outil idéal.

Terminal window
skopeo sync --src docker --dest docker docker.io/library/nginx my-registry.com

Cela télécharge toutes les versions de nginx et les pousse sur my-registry.com.

Synchroniser plusieurs images définies dans un fichier

Vous pouvez définir une liste d’images à synchroniser dans un fichier YAML :

Le fichier sync.yml :

registry.example.com:
images:
busybox: []
redis:
- "1.0"
- "2.0"
- "sha256:0000000000000000000000000000000011111111111111111111111111111111"
images-by-tag-regex:
nginx: ^1\.13\.[12]-alpine-perl$
images-by-semver:
alpine: ">= 3.12.0"
credentials:
username: john
password: this is a secret
tls-verify: true
cert-dir: /home/john/certs
quay.io:
tls-verify: false
images:
coreos/etcd:
- latest

Puis exécuter la commande :

Terminal window
skopeo sync --src yaml --dest docker sync.yml my-registry.local.lan/repo/

Créer un miroir local d’un registre public

Si vous travaillez dans un environnement air-gap, vous pouvez répliquer un ensemble d’images en local.

  1. Synchroniser toutes les images d’un projet Quay.io
Terminal window
skopeo sync --src docker --dest dir quay.io/example/repo /local/path/

Toutes les images seront stockées en local.

  1. Pousser ces images sur un registre privé
Terminal window
skopeo sync --src dir --dest docker /local/path/ my-registry.com

Suppression et gestion des images à distance

Pour rappel, avec Skopeo, il est possible de gérer les images sur un registre distant sans avoir besoin d’un moteur de conteneur. Cela inclut la suppression d’images.

Si vous avez les permissions nécessaires, vous pouvez supprimer une image directement d’un registre avec :

Terminal window
skopeo delete docker://my-registry.com/nginx:latest

Attention : Cette action est irréversible et supprime définitivement l’image du registre.

Conclusion

Vous l’aurez compris, Skopeo s’impose comme un outil indispensable pour la gestion des images conteneurs, en offrant une alternative légère et flexible aux outils traditionnels comme Docker et Podman.

Grâce à ses fonctionnalités avancées, il permet d’inspecter, copier, synchroniser et même supprimer des images directement sur un registre, sans avoir besoin de les télécharger ou d’avoir un moteur de container installé sur la machine. C’est donc un super outil à ajouter dans des pipelines CI/CD.

Plus d’infos