عن المشروع
dive هي أداة سطر أوامر لاستكشاف صورة Docker/OCI، وفحص محتويات كل طبقة، واكتشاف طرق لتقليل حجم الصورة. مكتوبة بلغة Go ومصدرها متاح تحت رخصة MIT.
## الاستخدام الأساسي
حلّل صورة موجودة عبر الوسم أو المعرّف أو الـ digest:
```bash
dive <your-image-tag>
```
يمكن أيضًا تشغيلها مباشرة عبر Docker من خلال تركيب مقبس Docker:
```bash
alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive"
dive nginx:latest
```
يمكن بناء الصور ثم تحليلها فورًا في خطوة واحدة:
```bash
dive build -t <some-tag> .
```
## الميزات الأساسية
- **محتويات الصورة طبقة بطبقة**: اختر طبقة على اليسار لعرض المحتويات المدمجة لتلك الطبقة وجميع الطبقات السابقة على اليمين. يمكن التنقل في شجرة الملفات باستخدام مفاتيح الأسهم.
- **مؤشرات تغييرات الطبقات**: يتم إبراز الملفات التي أُضيفت أو عُدّلت أو حُذفت في شجرة الملفات. يمكن التبديل بين عرض التغييرات لطبقة محددة أو التغييرات المجمّعة حتى الطبقة المحددة.
- **تقدير كفاءة الصورة**: يعرض الجزء السفلي الأيسر معلومات أساسية عن الطبقات ومقياسًا تجريبيًا يقدّر المساحة المهدرة، مثل الملفات المكررة عبر الطبقات، أو الملفات المنقولة، أو الملفات غير المحذوفة بالكامل. يتم توفير درجة مئوية وإجمالي مساحة الملفات المهدرة.
- **دورات بناء/تحليل سريعة**: استبدل `docker build` بـ `dive build` لتحليل الصورة فور بنائها.
- **تكامل CI**: عند ضبط `CI=true` في البيئة، يتم تخطي الواجهة وتحليل الصورة بنتيجة نجاح/فشل بناءً على القواعد.
- **مصادر صور متعددة**: يحدد خيار `--source` مكان جلب الصورة. تشمل المصادر المدعومة `docker` (الافتراضي)، و`docker-archive` (أرشيف Docker tar من القرص)، و`podman` (Linux فقط).
## تكامل CI
عند تشغيل dive مع `CI=true` يتم تجاوز الواجهة التفاعلية وإرجاع مؤشر نجاح/فشل عبر رمز الخروج. يمكن لملف `.dive-ci` في جذر المستودع تعريف القواعد:
```yaml
rules:
# Fail if efficiency is below X%, expressed as a ratio between 0-1.
lowestEfficiency: 0.95
# Fail if wasted space is at least X or larger, expressed in B, KB, MB, GB.
highestWastedBytes: 20MB
# Fail if wasted space makes up X% or more of the image, expressed as a ratio between 0-1.
# The base image layer is not included in the total image size.
highestUserWastedPercent: 0.20
```
يمكن تجاوز مسار إعدادات CI باستخدام `--ci-config`.
## التثبيت
تم توثيق عدة طرق للتثبيت:
- **Ubuntu/Debian**: نزّل إصدار `.deb` وثبّته باستخدام `apt`.
- **Snap**: `snap install dive`، مع الاتصال بملفات Docker التنفيذية والـ daemon. يحذر README من أن طريقة Snap غير موصى بها عندما يكون Docker مثبتًا عبر `apt-get`.
- **RHEL/CentOS**: نزّل إصدار `.rpm` وثبّته باستخدام `rpm -i`.
- **Arch Linux**: متاح في مستودع extra، ثبّته عبر `pacman -S dive`.
- **macOS**: متاح عبر Homebrew (`brew install dive`) أو MacPorts (`sudo port install dive`)، أو عبر إصدار Darwin.
- **Windows**: متاح عبر Chocolatey (`choco install dive`)، أو Scoop (`scoop install main/dive`)، أو winget (`winget install --id wagoodman.dive`)، أو إصدار Windows.
- **أدوات Go**: `go install github.com/wagoodman/dive@latest` (يتطلب Go 1.10 أو أحدث؛ قد لا يكون إخراج الإصدار دقيقًا عند التثبيت بهذه الطريقة).
- **Nix/NixOS**: `nix-env -iA nixos.dive` أو `nix-env -iA nixpkgs.dive`.
- **صورة Docker**: اسحب `docker.io/wagoodman/dive` أو `ghcr.io/wagoodman/dive` واربط مقبس Docker عند التشغيل.
بالنسبة لبيئات التشغيل البديلة مثل Colima، قد يلزم ضبط مضيف Docker، على سبيل المثال:
```bash
export DOCKER_HOST=$(docker context inspect -f '{{ .Endpoints.docker.Host }}')
```
## اختصارات المفاتيح
تتضمن الواجهة التفاعلية اختصارات للخروج، والتبديل بين عرض الطبقات وشجرة الملفات، وتصفية الملفات، والتمرير، وطي المجلدات، وتبديل ظهور الملفات المضافة/المحذوفة/المعدلة/غير المعدلة. تشمل الاختصارات الشائعة Tab للتبديل بين العروض، وCtrl+F لتصفية الملفات، وSpace لطي/فك طي مجلد، وCtrl+A/Ctrl+R/Ctrl+M/Ctrl+U لإظهار أو إخفاء أنواع تغييرات الملفات.
## الإعدادات
لا يلزم أي إعداد، لكن يمكن لملف إعداد YAML تجاوز الإعدادات الافتراضية. تشمل الإعدادات المثالية محرك الحاويات (`docker` أو `podman`)، ومعالجة الأخطاء، والتسجيل، واختصارات المفاتيح، وإعدادات عرض الفروقات الافتراضية، وسلوك شجرة الملفات مثل حالة الطي وعرض الأجزاء، وإعدادات تجميع عرض الطبقات الافتراضية. يبحث dive عن الإعدادات في `$XDG_CONFIG_HOME/dive/*.yaml`، و`$XDG_CONFIG_DIRS/dive/*.yaml`، و`~/.config/dive/*.yaml`، و`~/.dive.yaml`؛ كما يُقبل `.yml`.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.