
OCI2Git
[//]: # (simulation pour un futur test.yaml) [//]: # ([](https://github.com/Virviil/oci2git/actions))
Une application Rust qui convertit des images de conteneur (Docker, etc.) en dépôts Git. Chaque couche du conteneur est représentée comme un commit Git, préservant l’historique et la structure de l’image d’origine.

Fonctionnalités
- Analyse des images Docker et extraction des informations de couche
- Création d’un dépôt Git où chaque couche d’image est représentée comme un commit
- Prise en charge des couches vides (ENV, WORKDIR, etc.) comme commits vides
- Extraction complète des métadonnées au format Markdown
- Architecture extensible pour la prise en charge de différents moteurs de conteneur
Cas d’utilisation
Différenciation des couches
Pour le dépannage des problèmes de conteneur, vous pouvez utiliser les puissantes fonctionnalités de comparaison de Git pour identifier exactement ce qui a changé entre deux couches. En exécutantgit diff entre des commits, les ingénieurs peuvent voir précisément quels fichiers ont été ajoutés, modifiés ou supprimés, ce qui facilite grandement la compréhension de l’impact de chaque instruction Dockerfile et la localisation des modifications problématiques.

Traçabilité de l’origine
Grâce àgit blame, les développeurs peuvent rapidement déterminer quelle couche a introduit un fichier ou une ligne de code spécifique. Ceci est particulièrement utile lors du diagnostic de problèmes avec des fichiers de configuration ou des dépendances. Au lieu d’inspecter manuellement chaque couche, vous pouvez immédiatement retracer l’origine de n’importe quel fichier jusqu’à sa couche source et l’instruction Dockerfile correspondante.Suivi du cycle de vie d’un fichier
OCI2Git vous permet de suivre le parcours d’un fichier spécifique à travers l’historique de l’image du conteneur. Vous pouvez observer quand un fichier a été créé, comment il a été modifié à travers les couches, et s’il a éventuellement été supprimé. Cette vue complète aide à comprendre l’évolution d’un fichier sans avoir à suivre manuellement les changements sur des dizaines de couches potentielles.Pour suivre l’historique d’un fichier dans votre image de conteneur — y compris sa première apparition, ses modifications ou sa suppression — vous pouvez utiliser ces commandes Git après conversion :
# Full history of a file (including renames)
git log --follow -- /rootfs/my/file/pathFirst appearance (i.e. creation) - see which layer introduced the file
git log --diff-filter=A -- /rootfs/my/file/pathAll changes made to the file (with diffs)
git log -p --follow -- /rootfs/my/file/pathWhen the file was deleted
git log --diff-filter=D -- /rootfs/my/file/pathShow short commit info (concise layer history)
git log --follow --oneline -- /rootfs/my/file/path
Ces commandes facilitent la traçabilité de l'historique complet de n'importe quel fichier à travers les couches du conteneur, sans la complexité d'extraire et de comparer manuellement les archives tar des couches.Analyse Multi-Couches
Parfois, les comparaisons les plus pertinentes proviennent de l'examen des changements à travers plusieurs couches non consécutives. Avec OCI2Git, vous pouvez utiliser les outils de comparaison de Git pour analyser l'évolution des composants sur plusieurs étapes de construction, identifiant des motifs invisibles en regardant uniquement les couches adjacentes.Exploration des Couches
En utilisantgit checkout pour passer à un commit spécifique, vous pouvez examiner le système de fichiers du conteneur tel qu'il existait à cette couche. Cela permet aux développeurs d'inspecter l'état précis des fichiers et répertoires à n'importe quel moment du processus de création de l'image, fournissant un contexte précieux lors du débogage ou de l'examen du comportement du conteneur.

Analyse Multi-Images
Lorsqu'on travaille avec plusieurs images de conteneurs partageant une ascendance commune, OCI2Git crée intelligemment des branches uniquement lorsque les images divergent réellement. Cela permet d'analyser plusieurs images liées dans un seul dépôt tout en conservant leur histoire commune.
# Convert first image to create the base repository
oci2git postgres:16.9-alpine3.21 -o alpConvert second image to the same output folder
oci2git nginx:1.28.0-alpine-slim -o alp
OCI2Git détecte automatiquement les couches partagées entre les images et crée une structure en branches qui reflète leur base commune. L’historique Git affichera :
- Un tronc commun contenant toutes les couches partagées
- Des branches séparées qui divergent uniquement lorsque les images diffèrent réellement
- Une visualisation claire de l’endroit où les images partagent une ascendance commune vs. où elles deviennent uniques
- Gestion intelligente des doublons : si la même image est traitée deux fois, l’algorithme le détecte avant le commit final des métadonnées et évite de créer une branche en double
- Analyse des familles d’images : Comprendre comment différentes variantes d’une image (différentes versions, architectures ou configurations) sont liées entre elles
- Impact de l’image de base : Voir précisément comment les modifications d’une image de base affectent plusieurs images dérivées
- Opportunités d’optimisation : Identifier les composants partagés qui pourraient être mieux exploités entre les variantes d’images

Cas d’utilisation supplémentaires
- Audit de sécurité : Identifier précisément quand des paquets ou configurations vulnérables ont été introduits et retracer leur origine dans des instructions de build spécifiques.
- Optimisation des images : Analyser la structure des couches pour repérer les opérations redondantes ou les fichiers volumineux à consolider, aidant à réduire la taille des images.
- Gestion des dépendances : Surveiller quand les dépendances ont été ajoutées, mises à jour ou supprimées dans l’historique des images.
- Amélioration du processus de build : Examiner la composition des couches pour optimiser les instructions Dockerfile afin d’améliorer la mise en cache et réduire la taille des images.
- Comparaison inter-images : Convertir plusieurs images liées en dépôts Git et utiliser les outils de comparaison Git pour analyser leurs différences et points communs.
Installation
Depuis les sources
# Clone the repository
git clone https://github.com/virviil/oci2git.git
cd oci2gitInstall locally
cargo install --path .Depuis Crates.io
cargo install oci2gitUtilisation
oci2git [OPTIONS]
Arguments :
Nom de l'image à convertir (par exemple, 'ubuntu:latest') ou chemin vers une archive tar lors de l'utilisation du moteur tarOptions :
-o, --output Répertoire de sortie pour le dépôt Git [par défaut : ./container_repo]
-e, --engine Moteur de conteneur à utiliser (docker, nerdctl, tar) [par défaut : docker]
-h, --help Afficher l'aide
-V, --version Afficher la version
Variables d'environnement :
TMPDIR Définissez cette variable d'environnement pour modifier l'emplacement par défaut utilisé pour le traitement intermédiaire des données. Cela dépend de la plateforme (par exemple, TMPDIR sous Unix/macOS, TEMP ou TMP sous Windows).
Exemples
Utilisation du moteur Docker (par défaut) :
oci2git -o ./ubuntu-repo ubuntu:latestUtilisation d’une archive d’image déjà téléchargée :
oci2git -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tar
Le moteur tar attend une archive tar au format OCI valide, généralement créée avec docker save :# Create a tarball from a local Docker image
docker save -o ubuntu-latest.tar ubuntu:latestConvert the tarball to a Git repository
oci2git -e tar -o ./ubuntu-repo ubuntu-latest.tarCela créera un dépôt Git dans ./ubuntu-repo contenant :
Image.md- Métadonnées complètes sur l'image au format Markdownrootfs/- Le contenu du système de fichiers du conteneur
- Le premier commit contient uniquement le fichier
Image.mdavec toutes les métadonnées - Chaque commit suivant représente une couche de l'image originale
- Les commits incluent la commande Dockerfile comme message de commit
Structure du dépôt
repository/
├── .git/
├── Image.md # Complete image metadata
└── rootfs/ # Filesystem content from the container
Prérequis
- Édition Rust 2021
- Docker CLI (pour la prise en charge du moteur Docker)
- Git
Licence
MIT
[documentation]: https://docs.rs/oci2git/
--- Tranlated By Open Ai Tx | Last indexed: 2025-12-12 ---