unregistry est un outil Go développé par Pavel Sviderski qui permet de pousser une image Docker directement sur un serveur distant via SSH, sans avoir besoin d'un registry centralisé. Il démarre un registry Docker temporaire sur le serveur cible à travers un tunnel SSH, effectue le push, puis nettoie le registry temporaire.
C'est essentiellement un docker push sans infrastructure de registry. Utile pour les déploiements simples sur un ou quelques serveurs, ou les environnements isolés où monter un registry permanent n'est pas justifié.
Prérequis : Docker doit être installé et fonctionnel sur le serveur distant. unregistry utilise Docker pour démarrer le registry temporaire côté serveur.
Idéal pour : déploiements sur un serveur unique sans registry, environnements air-gapped avec accès SSH, équipes utilisant Docker standalone sans Kubernetes ni registry centralisé.
Informations essentielles
Origine : Pavel Sviderski (psviderski) · Licence : Apache 2.0 · Plateformes : Linux, macOS
Support : Projet communautaire indépendant. Vérifier l'activité du dépôt avant d'adopter en production.
Fonctionnement
| Etape | Description |
|---|---|
| 1 | Connexion SSH au serveur distant |
| 2 | Démarrage d'un registry Docker temporaire sur le serveur (via docker run) |
| 3 | Tunnel SSH vers le port du registry temporaire |
| 4 | docker push de l'image locale vers le registry via le tunnel |
| 5 | L'image est disponible dans le Docker local du serveur distant |
| 6 | Arrêt et suppression du registry temporaire |
Installation
# Via go install
go install github.com/psviderski/unregistry@latest
# Ou télécharger le binaire depuis les releases GitHub
# https://github.com/psviderski/unregistry/releases
Utilisation
# Pousser une image vers un serveur distant
unregistry push <image-locale> user@serveur-distant
# Exemple concret
docker build -t mon-app:latest .
unregistry push mon-app:latest deploy@192.168.1.100
# L'image est maintenant disponible sur le serveur distant
# et peut être utilisée dans docker run / docker compose
ssh deploy@192.168.1.100 docker run -d mon-app:latest
Avec une clé SSH spécifique
# Utiliser une clé SSH particulière
unregistry push mon-app:latest -i ~/.ssh/id_deploy deploy@serveur.example.com
Avec docker compose sur le serveur
# Pousser l'image puis démarrer le service
unregistry push mon-app:latest deploy@serveur.example.com
ssh deploy@serveur.example.com "cd /opt/mon-app && docker compose up -d"
Comparaison avec les alternatives
| Approche | Prérequis | Complexité | Usage adapté |
|---|---|---|---|
| unregistry | Docker sur le serveur, SSH | Minimal | 1-3 serveurs, déploiements simples |
| Registry Distribution | Docker ou K8s | Faible | Equipe, plusieurs serveurs |
| Harbor | Kubernetes | Elevée | Production enterprise |
docker save | ssh ... | docker load | Docker, SSH | Minimal | Ponctuel, sans outil dédié |
| Skopeo + registry | Docker ou K8s | Faible | CI/CD, air-gapped |
Pour les déploiements impliquant plus de 3-4 serveurs ou une CI/CD régulière, un registry dédié (Distribution, Harbor) sera plus adapté. unregistry est un outil de simplicité, pas de scalabilité.
Limitation principale
unregistry nécessite Docker sur le serveur cible. Il n'est pas compatible avec :
- des serveurs utilisant uniquement containerd ou Podman
- des nœuds Kubernetes sans Docker Engine
- des environnements sans accès SSH direct
Dans ces cas, Skopeo avec un registry dédié est une meilleure option.
Commandes utiles
# Push basique
unregistry push <image> user@host
# Push avec clé SSH
unregistry push <image> -i ~/.ssh/id_rsa user@host
# Vérifier que l'image est présente côté serveur
ssh user@host docker images | grep <image>