
OCI2Git
[//]: # (gelecekteki test.yaml için mock) [//]: # ([](https://github.com/Virviil/oci2git/actions))
Konteyner imajlarını (Docker, vb.) Git deposuna dönüştüren bir Rust uygulamasıdır. Her konteyner katmanı bir Git commit'i olarak temsil edilir, orijinal imajın geçmişi ve yapısı korunur.

Özellikler
- Docker imajlarını analiz eder ve katman bilgilerini çıkarır
- Her imaj katmanının bir commit olarak temsil edildiği bir Git deposu oluşturur
- Boş katmanlar (ENV, WORKDIR, vb.) için boş commit desteği
- Tüm meta verileri Markdown formatında çıkarma
- Farklı konteyner motorlarını desteklemek için genişletilebilir mimari
Kullanım Alanları
Katman Karşılaştırma
Konteyner sorunlarını giderirken, Git'in güçlü karşılaştırma (diff) yeteneklerini kullanarak herhangi iki katman arasında tam olarak neyin değiştiğini belirleyebilirsiniz. Commitler arasındagit diff çalıştırarak, mühendisler hangi dosyaların eklendiğini, değiştirildiğini veya silindiğini net bir şekilde görebilir, böylece her Dockerfile talimatının etkisini anlamak ve sorunlu değişiklikleri bulmak çok daha kolay hale gelir.

Kaynak Takibi
git blame kullanarak geliştiriciler, belirli bir dosya veya kod satırının hangi katmanda eklendiğini hızlıca belirleyebilir. Bu, özellikle yapılandırma dosyaları veya bağımlılıklarla ilgili sorunları teşhis ederken çok değerlidir. Her katmanı manuel olarak incelemek yerine, herhangi bir dosyanın kaynağını anında bulabilir ve ilgili Dockerfile talimatına kadar izleyebilirsiniz.Dosya Yaşam Döngüsü Takibi
OCI2Git sayesinde, bir dosyanın konteyner imajı boyunca izlediği yolu takip edebilirsiniz. Bir dosyanın ilk ne zaman oluşturulduğunu, katmanlar boyunca nasıl değiştirildiğini ve en sonunda ne zaman silindiğini gözlemleyebilirsiniz. Bu kapsamlı görünüm, dosyanın evrimini anlamanızı sağlar ve potansiyel olarak onlarca katman arasında değişiklikleri manuel olarak takip etme ihtiyacını ortadan kaldırır.Konteyner imajınızdaki bir dosyanın geçmişini — ilk ne zaman göründüğünü, değiştirildiğini veya silindiğini — dönüştürmeden sonra aşağıdaki Git komutları ile takip edebilirsiniz:
# 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/pathBu komutlar, katman arşivlerini manuel olarak çıkartıp karşılaştırmanın karmaşıklığı olmadan, herhangi bir dosyanın konteyner katmanları arasındaki tam geçmişini izlemeyi kolaylaştırır.
Çok Katmanlı Analiz
Bazen en anlamlı karşılaştırmalar, ardışık olmayan birden fazla katmandaki değişiklikleri inceleyerek elde edilir. OCI2Git ile, bileşenlerin birden fazla derleme aşamasında nasıl evrildiğini analiz etmek için Git’in karşılaştırma araçlarını kullanabilir, yalnızca bitişik katmanlara bakıldığında fark edilmeyen desenleri tespit edebilirsiniz.Katman Keşfi
Herhangi bir belirli commite geçmek içingit checkout komutunu kullanarak, konteyner dosya sistemini o katmanda olduğu gibi inceleyebilirsiniz. Bu, geliştiricilere, imajın oluşturulma sürecinin herhangi bir noktasında dosyaların ve dizinlerin kesin durumunu inceleme olanağı sağlar, hata ayıklarken veya konteyner davranışını incelerken paha biçilmez bir bağlam sunar.

Çoklu İmaj Analizi
Ortak bir soya sahip birden fazla konteyner imajı ile çalışırken, OCI2Git yalnızca imajlar gerçekten ayrıştığında akıllıca dallar oluşturur. Böylece, ortak geçmişlerini korurken, tek bir depoda birden fazla ilgili imajı analiz edebilirsiniz.
# 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, görüntüler arasında paylaşılan katmanları otomatik olarak algılar ve ortak tabanlarını yansıtan dallanma yapısı oluşturur. Git geçmişi şunları gösterecektir:
- Tüm paylaşılan katmanları içeren ortak bir gövde
- Görüntüler gerçekten farklılaştığında ayrılan ayrı dallar
- Görüntülerin nerede ortak soya sahip olduğunu ve nerede benzersiz hale geldiğini net görselleştirme
- Akıllı çoğaltma yönetimi: Aynı görüntü iki kez işlenirse, algoritma son meta veri işlemi öncesinde bunu algılar ve kopya dal oluşturmadan atlar
- Görüntü Ailesi Analizi: Bir görüntünün farklı varyantlarının (farklı sürümler, mimariler veya yapılandırmalar) birbirleriyle ilişkisini anlamak
- Taban Görüntü Etkisi: Taban bir görüntüde yapılan değişikliklerin birden fazla türetilmiş görüntüyü nasıl etkilediğini görmek
- Optimizasyon Fırsatları: Görüntü varyantları arasında daha iyi kullanılabilecek ortak bileşenleri belirlemek

Ek Kullanım Senaryoları
- Güvenlik Denetimi: Savunmasız paket veya yapılandırmaların tam olarak ne zaman eklendiğini belirleyin ve bunları belirli yapı talimatlarına kadar izleyin.
- Görüntü Optimizasyonu: Katman yapılarını analiz ederek gereksiz işlemleri veya büyük dosyaları belirleyin, böylece görüntü boyutunu küçültün.
- Bağımlılık Yönetimi: Görüntü geçmişi boyunca bağımlılıkların ne zaman eklendiğini, yükseltildiğini veya kaldırıldığını takip edin.
- Yapı Süreci İyileştirme: Katman bileşimini inceleyerek Dockerfile talimatlarını daha iyi önbellekleme ve daha küçük görüntü boyutu için optimize edin.
- Görüntüler Arası Karşılaştırma: Birden fazla ilişkili görüntüyü Git depolarına dönüştürün ve Git’in karşılaştırma araçlarını kullanarak farklılıklarını ve benzerliklerini analiz edin.
Kurulum
Kaynaktan
# Clone the repository
git clone https://github.com/virviil/oci2git.git
cd oci2gitInstall locally
cargo install --path .Crates.io'dan
cargo install oci2gitKullanım
oci2git [OPTIONS] Argümanlar:
Dönüştürülecek imaj adı (örn., 'ubuntu:latest') veya tar motoru kullanılırken tarball yolu
Seçenekler:
-o, --output Git deposu için çıktı dizini [varsayılan: ./container_repo]
-e, --engine Kullanılacak konteyner motoru (docker, nerdctl, tar) [varsayılan: docker]
-h, --help Yardım bilgisini yazdır
-V, --version Sürüm bilgisini yazdır
Ortam Değişkenleri:
TMPDIR Varsayılan olarak ara veri işlemede kullanılan konumu değiştirmek için bu ortam değişkenini ayarlayın. Bu, platforma bağlıdır (örn., Unix/macOS'ta TMPDIR, Windows'ta TEMP veya TMP).
Örnekler
Docker motorunu kullanmak (varsayılan):
oci2git -o ./ubuntu-repo ubuntu:latestZaten indirilmiş bir imaj tarball'ını kullanmak:
oci2git -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tarTar motoru, genellikle docker save ile oluşturulan geçerli bir OCI formatında tarball bekler:
# 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.tarBu, ./ubuntu-repo dizininde bir Git deposu oluşturacak ve şunları içerecek:
Image.md- Görüntüyle ilgili tüm meta veriler Markdown formatındarootfs/- Kaptan alınan dosya sistemi içeriği
- İlk commit yalnızca tam meta veriye sahip
Image.mddosyasını içerir - Sonraki her commit, orijinal görüntüden bir katmanı temsil eder
- Commit mesajı olarak Dockerfile komutunu içerir
Depo Yapısı
repository/
├── .git/
├── Image.md # Complete image metadata
└── rootfs/ # Filesystem content from the container
Gereksinimler
- Rust 2021 sürümü
- Docker CLI (Docker motoru desteği için)
- Git
Lisans
MIT
[dokümantasyon]: https://docs.rs/oci2git/
--- Tranlated By Open Ai Tx | Last indexed: 2025-12-12 ---