Cache Docker: utiliser un cache par image/tag + metadata/digest (eviter image.tar global) #28

Open
opened 2026-01-20 17:36:41 +00:00 by glenux · 0 comments
Owner

Constat

Aujourd'hui, docmachine build utilise un fichier de cache unique:

  • src/build/run.cr: cache_file_path -> ~/.cache/docmachine/image.tar (ou $XDG_CACHE_HOME/docmachine/image.tar).

Problemes:

  • collision si on change --image (ou si plusieurs versions/tags sont utilisees): le cache unique peut ne pas correspondre a l'image attendue.
  • validation faible: cache_file_valid? verifie uniquement size > 0, pas que l'archive contient bien l'image demandee.

Attendu

  • Cache keye par image reference (et idealement par digest):
    • ex: ~/.cache/docmachine/images/<normalized-image>.tar ou <sha256(image_ref)>.tar
    • stocker un fichier metadata (json/yaml) avec image_ref, digest, date, version.
  • Au chargement: verifier que l'image chargee correspond a config.image_tag (au minimum comparer RepoTags, mieux: comparer digest).
  • Ecriture atomique: ecrire dans *.tmp puis rename pour eviter caches partiels.

Pistes techniques

  • Ajouter une methode de normalisation du tag (remplacer / : etc) ou hasher.
  • Utiliser docker image inspect pour recuperer digest/RepoTags.
  • Integrer a DocMachine::Build::Run#cache_file_path.

Lien

  • Complementaire a #2 (strategie cache globale) et #21 (exposition des flags cache).
## Constat Aujourd'hui, `docmachine build` utilise un fichier de cache unique: - `src/build/run.cr`: `cache_file_path` -> `~/.cache/docmachine/image.tar` (ou `$XDG_CACHE_HOME/docmachine/image.tar`). Problemes: - collision si on change `--image` (ou si plusieurs versions/tags sont utilisees): le cache unique peut ne pas correspondre a l'image attendue. - validation faible: `cache_file_valid?` verifie uniquement `size > 0`, pas que l'archive contient bien l'image demandee. ## Attendu - Cache *keye* par image reference (et idealement par digest): - ex: `~/.cache/docmachine/images/<normalized-image>.tar` ou `<sha256(image_ref)>.tar` - stocker un fichier metadata (json/yaml) avec `image_ref`, digest, date, version. - Au chargement: verifier que l'image chargee correspond a `config.image_tag` (au minimum comparer `RepoTags`, mieux: comparer digest). - Ecriture atomique: ecrire dans `*.tmp` puis rename pour eviter caches partiels. ## Pistes techniques - Ajouter une methode de normalisation du tag (remplacer `/` `:` etc) ou hasher. - Utiliser `docker image inspect` pour recuperer digest/RepoTags. - Integrer a `DocMachine::Build::Run#cache_file_path`. ## Lien - Complementaire a #2 (strategie cache globale) et #21 (exposition des flags cache).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
glenux/docmachine-cli#28
No description provided.