À propos du projet

Unregistry est un registre d'images conteneur léger qui stocke et sert les images directement depuis le stockage du démon Docker (magasin d'images containerd). Il est conçu pour éliminer le besoin d'un registre externe lors du déplacement d'images entre machines. Le projet fournit une commande plugin CLI Docker, `docker pussh` (le 's' supplémentaire signifie SSH), qui pousse les images directement vers un serveur Docker distant via SSH. Seules les couches manquantes côté distant sont transférées, ce que le README décrit comme rendant l'opération rapide et efficace. Comment cela fonctionne, selon le README : la commande établit un tunnel SSH vers le serveur distant, démarre un conteneur unregistry temporaire là-bas, transfère un port localhost aléatoire vers le port unregistry via le tunnel, exécute `docker push` vers unregistry via ce port transféré (en transférant uniquement les couches non déjà présentes à distance), puis arrête le conteneur unregistry et ferme le tunnel. L'image transférée devient disponible sur le démon Docker distant. Le README compare cette approche à rsync pour les images Docker. Motivation : le README liste les alternatives courantes et leurs inconvénients — registres publics (exposition du code ou dépôts privés payants), registres auto-hébergés (service supplémentaire à maintenir et sécuriser), `docker save | ssh ... docker load` (transfère l'image entière même lorsque la plupart des couches existent déjà à distance), et reconstructions à distance (temps et ressources gaspillés). Unregistry a été initialement créé pour Uncloud, un outil de déploiement de conteneurs sur plusieurs hôtes Docker. Exigences : localement, un CLI Docker avec support des plugins (Docker 19.03+) et un client OpenSSH. Sur le serveur distant, Docker doit être installé et en cours d'exécution, l'utilisateur SSH doit pouvoir exécuter des commandes docker (root ou un utilisateur dans le groupe docker), et un `sudo docker` sans mot de passe est nécessaire si sudo est requis. Le serveur doit avoir accès à Internet pour ghcr.io afin de tirer l'image unregistry lors de la première utilisation, sauf si l'image est préchargée manuellement pour les environnements isolés ou restreints. Le conteneur unregistry doit avoir accès au socket containerd à /run/containerd/containerd.sock et s'exécute en tant que root. Options d'installation documentées : Homebrew (`brew install psviderski/tap/docker-pussh`, plus un lien symbolique dans ~/.docker/cli-plugins), téléchargement direct du script docker-pussh dans le répertoire des plugins, et paquets Debian non officiels maintenus dans un dépôt séparé. Windows n'est actuellement pas pris en charge, bien que WSL 2 avec les instructions Linux soit suggéré. L'installation peut être vérifiée avec `docker pussh --help`. Un sujet de configuration notable est le magasin d'images containerd. Unregistry stocke les images dans le magasin d'images de containerd, mais par défaut Docker conserve sa propre couche de stockage séparée. Avec le magasin d'images containerd activé dans Docker, les images poussées sont immédiatement disponibles pour Docker sans duplication et avec des opérations pussh plus rapides. Sans cela, pussh exécute un `docker pull` supplémentaire sur l'hôte distant, les images sont stockées deux fois, et des images containerd non gérées peuvent s'accumuler ; le README montre `ctr -n moby images ls` et `ctr -n moby images rm` pour un nettoyage manuel. L'activation du magasin d'images containerd est documentée comme provoquant une perte temporaire des images et conteneurs créés avec le pilote de stockage classique. Les exemples d'utilisation incluent la poussée vers un hôte distant, l'authentification par clé SSH avec `-i`, un port SSH personnalisé, un fichier de configuration SSH personnalisé avec `-F`, la sélection d'une plateforme pour les images multi-plateformes (nécessitant le magasin d'images containerd localement), et le remplacement de la version de l'image unregistry via la variable d'environnement UNREGISTRY_IMAGE. Les cas d'utilisation documentés sont le déploiement vers des serveurs de production, les pipelines CI/CD, et les environnements homelab ou isolés. Unregistry peut également être exécuté de manière autonome comme registre local sur le port 5000 en montant le socket containerd. Le README référence des projets tiers : une action GitHub pour pousser des images avec docker-pussh, une action GitHub pour installer le plugin, et un outil Python pour nettoyer les images dans les registres auto-hébergés. Il crédite Spegel comme inspiration pour l'utilisation du magasin d'images containerd comme backend de registre et Docker Distribution comme implémentation de registre sur laquelle unregistry est basé.