
OCI2Git
[//]: # (شبیهسازی برای تست آینده test.yaml) [//]: # ([](https://github.com/Virviil/oci2git/actions))
یک برنامه Rust که تصاویر کانتینر (Docker و غیره) را به مخزنهای Git تبدیل میکند و صورتحساب فایلهای سیستم (fsbom) را به صورت YAML تولید میکند. هر لایه کانتینر به عنوان یک کامیت Git نمایش داده میشود، و تاریخچه و ساختار تصویر اصلی حفظ میشود.

امکانات
- تحلیل تصاویر Docker و استخراج اطلاعات لایهها
- ایجاد مخزن Git که هر لایه تصویر به عنوان یک کامیت نمایش داده میشود
- تولید صورتحساب فایل سیستم (fsbom) به صورت YAML با لیست فایلهای هر لایه
- پشتیبانی از لایههای خالی (ENV، WORKDIR و غیره) به عنوان کامیتهای خالی
- استخراج کامل متادیتا به فرمت Markdown
- معماری قابل توسعه برای پشتیبانی از موتورهای کانتینر مختلف
موارد استفاده
مقایسه لایهها
هنگام رفع اشکال کانتینر، میتوانید از قابلیت مقایسه قدرتمند Git برای شناسایی دقیق تغییرات بین هر دو لایه استفاده کنید. با اجرایgit diff بین کامیتها، مهندسان میتوانند دقیقا مشاهده کنند چه فایلهایی اضافه، اصلاح یا حذف شدهاند، که درک تاثیر هر دستور Dockerfile و یافتن تغییرات مشکلساز را بسیار آسانتر میکند.

ردیابی منبع
با استفاده ازgit blame، توسعهدهندگان میتوانند به سرعت تشخیص دهند کدام لایه یک فایل یا خط کد خاص را وارد کرده است. این قابلیت به ویژه هنگام رفع اشکال فایلهای پیکربندی یا وابستگیها ارزشمند است. به جای بررسی دستی هر لایه، میتوانید منبع هر فایل را فوراً تا لایه مبدأ و دستور مربوطه Dockerfile ردیابی کنید.ردیابی چرخه عمر فایل
OCI2Git این امکان را فراهم میکند تا مسیر یک فایل خاص را در طول تاریخچه تصویر کانتینر دنبال کنید. میتوانید مشاهده کنید چه زمانی یک فایل برای اولین بار ایجاد شد، چگونه در لایههای مختلف تغییر کرد و آیا در نهایت حذف شد یا خیر. این دید جامع به فهم تکامل فایلها کمک میکند بدون نیاز به پیگیری دستی تغییرات در دهها لایه احتمالی.برای ردیابی تاریخچه یک فایل در تصویر کانتینر خود — از جمله زمان ایجاد، تغییر یا حذف آن — پس از تبدیل میتوانید از این فرمانهای Git استفاده کنید:
# 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
این دستورات ردیابی کامل تاریخچه هر فایل را در سراسر لایههای کانتینر ساده میکنند، بدون پیچیدگی استخراج و مقایسه دستی آرشیوهای لایهای.تحلیل چندلایهای
گاهی اوقات مفیدترین مقایسهها از بررسی تغییرات در چندین لایه غیر متوالی حاصل میشود. با OCI2Git میتوانید از ابزارهای مقایسه Git برای تحلیل نحوه تحول اجزا در مراحل مختلف ساخت بهره ببرید و الگوهایی را شناسایی کنید که ممکن است هنگام بررسی فقط لایههای مجاور قابل مشاهده نباشند.کاوش در لایهها
با استفاده ازgit checkout برای رفتن به هر کامیت خاص، میتوانید سیستم فایل کانتینر را دقیقاً همانطور که در آن لایه وجود داشته بررسی کنید. این امکان به توسعهدهندگان اجازه میدهد وضعیت دقیق فایلها و دایرکتوریها را در هر نقطه از فرآیند ساخت تصویر بررسی کنند و هنگام اشکالزدایی یا بررسی رفتار کانتینر، زمینهای ارزشمند فراهم میآورد.

تحلیل چندتصویری
هنگام کار با چند تصویر کانتینر که نیاکان مشترک دارند، OCI2Git بهطور هوشمندانه فقط زمانی شاخه جدید ایجاد میکند که تصاویر واقعاً از هم جدا شوند. این قابلیت به شما امکان میدهد چند تصویر مرتبط را در یک مخزن تحلیل کنید و در عین حال تاریخچه مشترک آنها را حفظ نمایید.
# 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 به طور خودکار لایههای مشترک بین تصاویر را شناسایی میکند و ساختار شاخهای را ایجاد مینماید که پایه مشترک آنها را نشان میدهد. تاریخچه گیت موارد زیر را نمایش خواهد داد:
- یک تنه مشترک که شامل تمام لایههای مشترک است
- شاخههای جداگانه که فقط زمانی که تصاویر واقعاً متفاوت میشوند از هم جدا میشوند
- نمایش واضحی از جایی که تصاویر اجداد مشترک دارند در مقابل جایی که منحصر به فرد میشوند
- مدیریت هوشمند تکراریها: اگر دقیقاً همان تصویر دوبار پردازش شود، الگوریتم این موضوع را قبل از ثبت نهایی متادیتا شناسایی کرده و از ایجاد شاخه تکراری صرف نظر میکند
- تحلیل خانواده تصویر: درک چگونگی ارتباط انواع مختلف یک تصویر (نسخهها، معماریها یا پیکربندیهای مختلف) با یکدیگر
- تأثیر تصویر پایه: مشاهده دقیق اینکه تغییرات در یک تصویر پایه چگونه بر چندین تصویر مشتق شده تأثیر میگذارد
- فرصتهای بهینهسازی: شناسایی مؤلفههای مشترک که میتوان از آنها در انواع تصویر بهتر استفاده کرد

موارد استفاده اضافی
- ممیزی امنیتی: مشخص کردن دقیق زمان ورود بستهها یا پیکربندیهای آسیبپذیر و ردیابی آنها تا دستورالعملهای ساخت خاص.
- بهینهسازی تصویر: تحلیل ساختار لایهها برای یافتن عملیات تکراری یا فایلهای بزرگی که میتوان آنها را ادغام کرد تا اندازه تصویر کاهش یابد.
- مدیریت وابستگیها: پایش زمان افزودن، بهروزرسانی یا حذف وابستگیها در طول تاریخچه تصویر.
- بهبود فرآیند ساخت: بررسی ترکیب لایهها برای بهینهسازی دستورالعملهای داکرفایل به منظور کش بهتر و اندازه تصویر کوچکتر.
- مقایسه بین تصاویر: تبدیل چند تصویر مرتبط به مخزن گیت و استفاده از ابزارهای مقایسه گیت برای تحلیل تفاوتها و اشتراکات آنها.
نصب
مدیریت بستهها
#### macOS / Linux (Homebrew)
brew tap virviil/oci2git
brew install oci2git#### دبیان / اوبونتو
بسته .deb را از آخرین نسخه منتشر شده دانلود و نصب کنید:
# 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#### آرچ لینوکس (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 -siفایلهای اجرایی آماده
فایل اجرایی مناسب برای پلتفرم خود را از آخرین نسخه منتشر شده دانلود کنید:
# 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/oci2gitاز Crates.io
cargo install oci2gitاز منبع
# Clone the repository
git clone https://github.com/virviil/oci2git.git
cd oci2gitInstall locally
cargo install --path .استفاده
oci2git [OPTIONS]
oci2git convert [OPTIONS]
oci2git fsbom [OPTIONS] convert — تصویر OCI → مخزن گیت
oci2git convert [OPTIONS]
or simply:
oci2git گزینهها:
-o, --output پوشه خروجی برای مخزن گیت [پیشفرض: ./container_repo]
-e, --engine موتور کانتینر مورد استفاده (docker، nerdctl، tar) [پیشفرض: docker]
-v, --verbose حالت پرجزئیات (-v برای اطلاعات، -vv برای اشکالزدایی، -vvv برای ردیابی)
fsbom — فهرست اجزای فایلسیستم
oci2git fsbom [OPTIONS]
گزینهها:
-o, --output مسیر خروجی برای فایل BOM در قالب YAML [پیشفرض: ./fsbom.yml]
-e, --engine موتور کانتینر مورد استفاده (docker، nerdctl، tar) [پیشفرض: docker]
-v, --verbose حالت پرجزئیات (-v برای اطلاعات، -vv برای اشکالزدایی، -vvv برای ردیابی)متغیرهای محیطی:
TMPDIR این متغیر محیطی را برای تغییر مکان پیشفرض مورد استفاده در پردازش دادههای واسطه تنظیم کنید. این متغیر وابسته به پلتفرم است (مثلاً TMPDIR در یونیکس/macOS، TEMP یا TMP در ویندوز).
مثالها
تبدیل
استفاده از موتور Docker (پیشفرض):
oci2git ubuntu:latest
or explicitly:
oci2git convert ubuntu:latest -o ./ubuntu-repo
استفاده از یک بسته فشرده تصویر که قبلاً دانلود شده است:oci2git convert -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tar
موتور tar انتظار یک فایل tar با فرمت معتبر OCI را دارد که معمولاً با دستور 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 convert -e tar -o ./ubuntu-repo ubuntu-latest.tar
این کار یک مخزن گیت در ./ubuntu-repo ایجاد میکند که شامل موارد زیر است:
Image.md- فراداده کامل درباره تصویر به صورت مارکداونrootfs/- محتوای سیستم فایل از کانتینر
- اولین کامیت فقط شامل فایل
Image.mdبا فراداده کامل است - هر کامیت بعدی نمایانگر یک لایه از تصویر اصلی است
- کامیتها شامل فرمان Dockerfile به عنوان پیام کامیت هستند
صورت مواد سیستم فایل (fsbom)
تولید یک فایل YAML که هر فایل معرفیشده یا تغییر یافته در هر لایه را لیست میکند:
oci2git fsbom ubuntu:latest -o ubuntu.yml
استفاده از یک بسته فشرده (tarball):oci2git fsbom -e tar image.tar -o image-bom.yml
خروجی YAML هر لایه را با ورودیهایش که بر اساس نوع (file، hardlink، symlink، directory) و وضعیت (n:uid:gid برای جدید، m:uid:gid برای اصلاحشده) برچسبگذاری شدهاند، فهرست میکند. فایلهای حذفشده (سفیدپوشهای OCI) مستثنی شدهاند.
layers:
- index: 0
command: "ADD rootfs.tar.gz / # buildkit"
digest: "sha256:45f3ea58..."
entries:
- type: file
path: "bin/busybox"
size: 919304
mode: 493
stat: "n:0:0"
- type: hardlink
path: "bin/sh"
target: "bin/busybox"
stat: "n:0:0"
- type: symlink
path: "lib64"
target: "lib"
stat: "n:0:0"
- index: 1
command: "RUN apk add --no-cache curl"
digest: "sha256:..."
entries:
- type: file
path: "usr/bin/curl"
size: 204800
mode: 493
stat: "n:0:0"
- type: file
path: "etc/apk/world"
size: 32
mode: 420
stat: "m:0:0"ساختار مخزن
repository/
├── .git/
├── Image.md # Complete image metadata
└── rootfs/ # Filesystem content from the containerالزامات
- نسخه ۲۰۲۱ زبان Rust
- رابط خط فرمان Docker (برای پشتیبانی از موتور Docker)
- گیت
مجوز
MIT
[مستندات]: https://docs.rs/oci2git/
--- Tranlated By Open Ai Tx | Last indexed: 2026-04-02 ---