
OCI2Git
[//]: # (Mock für zukünftige test.yaml) [//]: # ([](https://github.com/Virviil/oci2git/actions))
Eine Rust-Anwendung, die Container-Images (Docker, etc.) in Git-Repositories umwandelt. Jede Container-Schicht wird als Git-Commit dargestellt, wobei die Historie und Struktur des Original-Images erhalten bleiben.

Funktionen
- Analysieren von Docker-Images und Extrahieren von Schichtinformationen
- Erstellen eines Git-Repositories, in dem jede Image-Schicht als Commit dargestellt wird
- Unterstützung für leere Schichten (ENV, WORKDIR, etc.) als leere Commits
- Vollständige Metadatenextraktion im Markdown-Format
- Erweiterbare Architektur zur Unterstützung verschiedener Container-Engines
Anwendungsfälle
Layer-Diffing
Beim Troubleshooting von Container-Problemen können Sie mit den leistungsfähigen Diff-Funktionen von Git genau feststellen, was sich zwischen zwei Schichten geändert hat. Durch Ausführen vongit diff zwischen Commits sehen Entwickler exakt, welche Dateien hinzugefügt, geändert oder gelöscht wurden, was das Verständnis der Auswirkungen jeder Dockerfile-Anweisung erleichtert und problematische Änderungen schnell auffindbar macht.

Herkunftsnachverfolgung
Mitgit blame können Entwickler schnell ermitteln, welche Schicht eine bestimmte Datei oder Codezeile eingeführt hat. Dies ist besonders wertvoll bei der Fehlersuche in Konfigurationsdateien oder Abhängigkeiten. Anstatt jede Schicht manuell zu prüfen, können Sie die Herkunft jeder Datei sofort bis zur Ursprungs-Schicht und der zugehörigen Dockerfile-Anweisung zurückverfolgen.Lebenszyklus-Verfolgung von Dateien
OCI2Git ermöglicht es, die Entwicklung einer bestimmten Datei über die gesamte Historie eines Container-Images hinweg nachzuverfolgen. Sie sehen, wann eine Datei erstmals erstellt, wie sie über die Schichten hinweg verändert und ob/wann sie schließlich entfernt wurde. Diese umfassende Ansicht hilft, die Entwicklung von Dateien nachzuvollziehen, ohne Änderungen über dutzende Schichten manuell verfolgen zu müssen.Um die Historie einer Datei in Ihrem Container-Image nachzuverfolgen – einschließlich wann sie erstmals auftrat, geändert oder gelöscht wurde – können Sie nach der Konvertierung diese Git-Befehle verwenden:
# 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/pathDiese Befehle machen es einfach, die vollständige Historie einer Datei über Container-Ebenen hinweg nachzuverfolgen, ohne die Komplexität des manuellen Extrahierens und Vergleichens von Layer-Tarballs.
Analyse über mehrere Ebenen
Manchmal sind die aufschlussreichsten Vergleiche diejenigen, die Veränderungen über mehrere nicht aufeinanderfolgende Ebenen hinweg betrachten. Mit OCI2Git können Sie die Vergleichswerkzeuge von Git nutzen, um zu analysieren, wie sich Komponenten über mehrere Build-Stufen entwickelt haben und Muster zu erkennen, die beim Betrachten nur benachbarter Ebenen unsichtbar bleiben könnten.Ebenen-Erkundung
Durch die Verwendung vongit checkout, um zu einem bestimmten Commit zu wechseln, können Sie das Container-Dateisystem genau so untersuchen, wie es in dieser Ebene existierte. Dies ermöglicht Entwicklern, den exakten Zustand von Dateien und Verzeichnissen zu jedem Zeitpunkt im Erstellungsprozess des Images zu inspizieren und liefert wertvolle Kontextinformationen beim Debuggen oder Untersuchen des Containerverhaltens.

Analyse mehrerer Images
Wenn mit mehreren Container-Images gearbeitet wird, die eine gemeinsame Abstammung haben, erstellt OCI2Git intelligent nur dann Branches, wenn die Images tatsächlich auseinanderlaufen. So können Sie mehrere verwandte Images in einem einzigen Repository analysieren und dabei deren gemeinsame Historie bewahren.
# 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 alpOCI2Git erkennt automatisch gemeinsam genutzte Layer zwischen Images und erstellt eine Verzweigungsstruktur, die deren gemeinsamen Ursprung widerspiegelt. Die Git-Historie zeigt:
- Einen gemeinsamen Stamm, der alle geteilten Layer enthält
- Separate Zweige, die sich nur dann unterscheiden, wenn die Images tatsächlich abweichen
- Eine klare Visualisierung, wo Images gemeinsame Vorfahren haben und wo sie einzigartig werden
- Intelligente Duplikaterkennung: Wird dasselbe Image zweimal verarbeitet, erkennt der Algorithmus dies vor dem finalen Metadaten-Commit und überspringt das Erstellen eines doppelten Zweigs
- Analyse von Bildfamilien: Verstehen, wie verschiedene Varianten eines Images (unterschiedliche Versionen, Architekturen oder Konfigurationen) miteinander verwandt sind
- Auswirkungen von Basis-Images: Genau sehen, wie Änderungen am Basis-Image mehrere abgeleitete Images beeinflussen
- Optimierungsmöglichkeiten: Gemeinsame Komponenten identifizieren, die besser über Varianten hinweg genutzt werden könnten

Weitere Anwendungsfälle
- Sicherheitsaudits: Exakt nachvollziehen, wann verwundbare Pakete oder Konfigurationen eingeführt wurden und diese auf bestimmte Build-Anweisungen zurückführen.
- Image-Optimierung: Layer-Strukturen analysieren, um redundante Operationen oder große Dateien zu finden, die konsolidiert werden könnten, um die Image-Größe zu reduzieren.
- Abhängigkeitsmanagement: Überwachen, wann Abhängigkeiten hinzugefügt, aktualisiert oder entfernt wurden, und zwar über die gesamte Image-Historie hinweg.
- Verbesserung des Build-Prozesses: Layer-Zusammensetzung untersuchen, um Dockerfile-Anweisungen für besseres Caching und kleinere Images zu optimieren.
- Vergleich zwischen Images: Mehrere verwandte Images in Git-Repositories umwandeln und die Vergleichswerkzeuge von Git nutzen, um Unterschiede und Gemeinsamkeiten zu analysieren.
Installation
Aus dem Quellcode
# Clone the repository
git clone https://github.com/virviil/oci2git.git
cd oci2gitInstall locally
cargo install --path .Von Crates.io
cargo install oci2gitVerwendung
oci2git [OPTIONS] Argumente:
Name des zu konvertierenden Images (z. B. 'ubuntu:latest') oder Pfad zur Tarball-Datei bei Verwendung der Tar-Engine
Optionen:
-o, --output Ausgabeverzeichnis für das Git-Repository [Standard: ./container_repo]
-e, --engine Zu verwendende Container-Engine (docker, nerdctl, tar) [Standard: docker]
-h, --help Hilfeinformationen anzeigen
-V, --version Versionsinformationen anzeigen
Umgebungsvariablen:
TMPDIR Setzen Sie diese Umgebungsvariable, um den Standardort für die Verarbeitung von Zwischendaten zu ändern. Dies ist plattformabhängig (z. B. TMPDIR unter Unix/macOS, TEMP oder TMP unter Windows).
Beispiele
Verwendung der Docker-Engine (Standard):
oci2git -o ./ubuntu-repo ubuntu:latest
Verwendung eines bereits heruntergeladenen Image-Tarballs:oci2git -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tarDie Tar-Engine erwartet ein gültiges OCI-Format-Tarball, das typischerweise mit docker save erstellt wird:
# 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.tarDadurch wird ein Git-Repository in ./ubuntu-repo erstellt, das Folgendes enthält:
Image.md- Vollständige Metadaten über das Image im Markdown-Formatrootfs/- Den Dateisysteminhalt aus dem Container
- Der erste Commit enthält nur die Datei
Image.mdmit vollständigen Metadaten - Jeder nachfolgende Commit repräsentiert einen Layer aus dem Original-Image
- Commits enthalten den Dockerfile-Befehl als Commit-Nachricht
Repository-Struktur
repository/
├── .git/
├── Image.md # Complete image metadata
└── rootfs/ # Filesystem content from the containerAnforderungen
- Rust 2021 Edition
- Docker CLI (für Docker-Engine-Unterstützung)
- Git
Lizenz
MIT
[dokumentation]: https://docs.rs/oci2git/
--- Tranlated By Open Ai Tx | Last indexed: 2025-12-12 ---