
OCI2Git
[//]: # (mock na potrzeby przyszłego test.yaml) [//]: # ([](https://github.com/Virviil/oci2git/actions))
Aplikacja Rust, która konwertuje obrazy kontenerów (Docker itd.) do repozytoriów Git. Każda warstwa kontenera jest reprezentowana jako commit Git, zachowując historię i strukturę oryginalnego obrazu.

Funkcje
- Analizuj obrazy Docker i wyodrębniaj informacje o warstwach
- Twórz repozytorium Git, gdzie każda warstwa obrazu jest reprezentowana jako commit
- Obsługa pustych warstw (ENV, WORKDIR itd.) jako pustych commitów
- Pełna ekstrakcja metadanych do formatu Markdown
- Rozszerzalna architektura do obsługi różnych silników kontenerów
Przypadki użycia
Porównywanie warstw
Podczas rozwiązywania problemów z kontenerami możesz użyć potężnych możliwości porównywania Git, aby dokładnie zidentyfikować, co zmieniło się pomiędzy dowolnymi dwoma warstwami. Uruchamiającgit diff między commitami, inżynierowie mogą zobaczyć, które pliki zostały dodane, zmodyfikowane lub usunięte, co znacznie ułatwia zrozumienie wpływu każdej instrukcji Dockerfile i lokalizowanie problematycznych zmian.

Śledzenie pochodzenia
Używającgit blame, programiści mogą szybko określić, która warstwa wprowadziła dany plik lub linię kodu. Jest to szczególnie wartościowe podczas diagnozowania problemów z plikami konfiguracyjnymi lub zależnościami. Zamiast ręcznie przeszukiwać każdą warstwę, możesz natychmiast prześledzić pochodzenie dowolnego pliku do jego źródłowej warstwy i odpowiadającej instrukcji Dockerfile.Śledzenie cyklu życia pliku
OCI2Git pozwala śledzić historię konkretnego pliku w całym obrazie kontenera. Możesz obserwować, kiedy plik został utworzony, jak był modyfikowany w kolejnych warstwach i czy/został usunięty. Ten kompleksowy widok pozwala zrozumieć ewolucję pliku bez konieczności ręcznego śledzenia zmian przez dziesiątki warstw.Aby śledzić historię pliku w obrazie kontenera — w tym, kiedy pojawił się po raz pierwszy, został zmieniony lub usunięty — możesz użyć tych poleceń Git po konwersji:
# 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/pathTe polecenia umożliwiają łatwe śledzenie pełnej historii dowolnego pliku w warstwach kontenera bez konieczności ręcznego wyodrębniania i porównywania archiwów warstw.
Analiza wielowarstwowa
Czasami najbardziej wartościowe porównania wynikają z badania zmian pomiędzy wieloma, niekolejnymi warstwami. Dzięki OCI2Git możesz używać narzędzi porównawczych Git do analizy ewolucji komponentów na różnych etapach budowy, identyfikując wzorce, które mogą być niewidoczne przy oglądaniu tylko sąsiednich warstw.Eksploracja warstw
Korzystając zgit checkout do przechodzenia do dowolnego konkretnego commita, możesz zbadać system plików kontenera dokładnie tak, jak wyglądał w danej warstwie. Pozwala to deweloperom analizować dokładny stan plików i katalogów w każdym punkcie procesu tworzenia obrazu, zapewniając nieoceniony kontekst podczas debugowania lub badania zachowania kontenera.

Analiza wielu obrazów
Pracując z wieloma obrazami kontenerów, które mają wspólne pochodzenie, OCI2Git inteligentnie tworzy gałęzie tylko wtedy, gdy obrazy rzeczywiście się rozchodzą. Pozwala to analizować wiele powiązanych obrazów w jednym repozytorium, zachowując ich wspólną historię.
# 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 automatycznie wykrywa współdzielone warstwy między obrazami i tworzy strukturę rozgałęzień odzwierciedlającą ich wspólną bazę. Historia Git pokazuje:
- Wspólny pień zawierający wszystkie współdzielone warstwy
- Oddzielne gałęzie, które rozchodzą się dopiero wtedy, gdy obrazy faktycznie się różnią
- Wyraźną wizualizację, gdzie obrazy mają wspólnego przodka, a gdzie stają się unikalne
- Inteligentne zarządzanie duplikatami: jeśli dokładnie ten sam obraz zostanie przetworzony dwukrotnie, algorytm wykrywa to przed ostatecznym zatwierdzeniem metadanych i pomija tworzenie zduplikowanej gałęzi
- Analizy rodzin obrazów: Zrozumienia, jak różne warianty obrazu (różne wersje, architektury lub konfiguracje) są ze sobą powiązane
- Wpływu obrazu bazowego: Zobaczenia, jak zmiany w obrazie bazowym wpływają na wiele obrazów pochodnych
- Możliwości optymalizacji: Identyfikowania współdzielonych komponentów, które można lepiej wykorzystać w różnych wariantach obrazu

Dodatkowe przypadki użycia
- Audyt bezpieczeństwa: Identyfikacja dokładnego momentu wprowadzenia podatnych pakietów lub konfiguracji oraz możliwość prześledzenia ich do konkretnych instrukcji budowania.
- Optymalizacja obrazu: Analiza struktury warstw w celu znalezienia zbędnych operacji lub dużych plików, które można skonsolidować, pomagając zmniejszyć rozmiar obrazu.
- Zarządzanie zależnościami: Monitorowanie, kiedy zależności zostały dodane, zaktualizowane lub usunięte w historii obrazu.
- Usprawnienie procesu budowania: Analiza składu warstw w celu optymalizacji instrukcji Dockerfile dla lepszego buforowania i mniejszego rozmiaru obrazu.
- Porównanie obrazów: Konwersja wielu powiązanych obrazów do repozytoriów Git i wykorzystanie narzędzi porównawczych Git do analizy ich różnic i wspólnych cech.
Instalacja
Menedżery pakietów
#### macOS / Linux (Homebrew)
brew tap virviil/oci2git
brew install oci2git#### Debian / Ubuntu
Pobierz i zainstaluj pakiet .deb z najnowszego wydania:
# For amd64 (x86_64)
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git_VERSION_amd64.deb
sudo dpkg -i oci2git_VERSION_amd64.debFor arm64
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git_VERSION_arm64.deb
sudo dpkg -i oci2git_VERSION_arm64.deb#### Arch Linux (AUR)
# Using yay
yay -S oci2git-binUsing paru
paru -S oci2git-binManual installation
git clone https://aur.archlinux.org/oci2git-bin.git
cd oci2git-bin
makepkg -siGotowe pliki binarne
Pobierz odpowiedni plik binarny dla swojej platformy z najnowszego wydania:
# Linux x86_64
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git-linux-x86_64.tar.gz
tar xzf oci2git-linux-x86_64.tar.gz
sudo mv oci2git-linux-x86_64 /usr/local/bin/oci2git
chmod +x /usr/local/bin/oci2gitmacOS (Apple Silicon)
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git-darwin-aarch64.tar.gz
tar xzf oci2git-darwin-aarch64.tar.gz
sudo mv oci2git-darwin-aarch64 /usr/local/bin/oci2git
chmod +x /usr/local/bin/oci2gitZ Crates.io
cargo install oci2gitZe źródła
# Clone the repository
git clone https://github.com/virviil/oci2git.git
cd oci2gitInstall locally
cargo install --path .Użytkowanie
oci2git [OPTIONS]
Argumenty:
Nazwa obrazu do konwersji (np. 'ubuntu:latest') lub ścieżka do archiwum tar przy użyciu silnika tarOpcje:
-o, --output Katalog wyjściowy dla repozytorium Git [domyślnie: ./container_repo]
-e, --engine Silnik kontenerowy do użycia (docker, nerdctl, tar) [domyślnie: docker]
-h, --help Wyświetl informacje pomocy
-V, --version Wyświetl informacje o wersji
Zmienne środowiskowe:
TMPDIR Ustaw tę zmienną środowiskową, aby zmienić domyślną lokalizację używaną do przetwarzania danych pośrednich. Jest to zależne od platformy (np. TMPDIR w Unix/macOS, TEMP lub TMP w Windows).
Przykłady
Użycie silnika Docker (domyślnie):
oci2git -o ./ubuntu-repo ubuntu:latestUżywanie już pobranego archiwum tarball obrazu:
oci2git -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tarSilnik tar oczekuje prawidłowego pliku tar w formacie OCI, który zwykle jest tworzony za pomocą polecenia 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.tarTo utworzy repozytorium Git w ./ubuntu-repo, zawierające:
Image.md- Pełne metadane obrazu w formacie Markdownrootfs/- Zawartość systemu plików z kontenera
- Pierwszy commit zawiera tylko plik
Image.mdz pełnymi metadanymi - Każdy kolejny commit reprezentuje warstwę z oryginalnego obrazu
- Commity zawierają polecenie z Dockerfile jako wiadomość commita
Struktura repozytorium
repository/
├── .git/
├── Image.md # Complete image metadata
└── rootfs/ # Filesystem content from the container
Wymagania
- Rust w edycji 2021
- Docker CLI (dla wsparcia silnika Docker)
- Git
Licencja
MIT
[dokumentacja]: https://docs.rs/oci2git/
--- Tranlated By Open Ai Tx | Last indexed: 2026-01-30 ---