Aller au contenu

imglife sync

imglife sync [nom] [flags]

Copie les images upstream listées dans sync.entries vers votre registry OCI privé. Pour les sources Docker Hub, la résolution des tags utilise l’API Docker Hub (dates + liste de tags en un seul appel).

Quand l’argument optionnel [nom] est fourni, seules les entrées dont le nom de miroir correspond sont synchronisées. Le nom de miroir est le dernier segment du target de l’entrée (ex. alpine pour registry.example.com/mirrors/alpine). Plusieurs entrées peuvent partager le même nom de miroir — toutes sont alors synchronisées. Sans argument, toutes les entrées configurées sont synchronisées.

Flag Défaut Description
--dry-run false Simuler la synchronisation sans pousser d’images
--list false Afficher la liste des tags qui seraient synchronisés et quitter
--force false Écraser les images existantes dans le registry
Terminal window
# Synchroniser toutes les entrées configurées
imglife sync
# Synchroniser uniquement les entrées ciblant le miroir "alpine"
imglife sync alpine
# Aperçu — afficher ce qui serait synchronisé
imglife sync --list
# Dry-run — simuler sans pousser
imglife sync --dry-run
# Force — écraser les images déjà présentes dans le registry
imglife sync --force
# Avec logs verbeux
imglife --log-format text --log-level debug sync

Le comportement de sync est contrôlé par sync.entries dans imglife.yaml. Voir la référence de configuration sync.

Exemple minimal :

sync:
entries:
- source: docker.io/library/alpine
tag_regex: '^3\.\d+\.\d+$'
keep_last: 3
target: registry.example.com/mirrors/alpine

Pour les sources Docker Hub, imglife récupère les tags avec leurs dates de création en un seul appel API, puis :

  1. Filtre les tags correspondant à tag ou tag_regex.
  2. Trie par version sémantique (fallback par date pour les tags non-semver).
  3. Conserve les keep_last plus récents.

Par défaut, imglife ignore un tag s’il existe déjà dans la cible. Utilisez --force pour écraser systématiquement tout tag existant, ou définissez check_digest: true sur une entrée pour re-synchroniser quand le digest upstream a changé :

- source: docker.io/library/alpine
tag: latest
target: registry.example.com/mirrors/alpine
check_digest: true
Terminal window
export IMGLIFE_SYNC_PARALLELISM=4 # synchronisations concurrentes (défaut : 4)

Les syncs échoués sont retentés avec backoff exponentiel :

Terminal window
export IMGLIFE_RETRY_ATTEMPTS=3 # défaut : 3
export IMGLIFE_RETRY_INITIAL_DELAY=2s # défaut : 2s
export IMGLIFE_RETRY_BACKOFF=2 # défaut : 2 (multiplicateur)
export IMGLIFE_RETRY_TIMEOUT=60s # timeout par opération

Après chaque exécution (pas en mode --list), imglife affiche un résumé sur stdout :

Sync Summary · 4.2s
───────────────────────────────────
Mirror images managed 12
├─ Synced 8
├─ Up-to-date 4
└─ Errors 0

En mode --dry-run, l’en-tête est préfixé par [dry-run]. Définir NO_COLOR=1 ou TERM=dumb pour désactiver les couleurs ANSI.

Code Signification
0 Toutes les entrées synchronisées avec succès
1 Une ou plusieurs entrées ont échoué