
أداة لاستكشاف صورة Docker ومحتويات الطبقات واكتشاف طرق لتقليل حجم صورة Docker/OCI الخاصة بك.

لتحليل صورة Docker، قم بتشغيل dive باستخدام علامة/معرف/خلاصة الصورة:
dive <your-image-tag>
أو يمكنك استخدام dive مباشرة مع Docker:
alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive"
dive <your-image-tag>
# مثال
dive nginx:latest
أو إذا أردت بناء صورتك ثم الانتقال مباشرة لتحليلها:
dive build -t <some-tag> .
البناء على macOS (يدعم محرك حاويات Docker فقط):
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$(pwd)":"$(pwd)" \
-w "$(pwd)" \
-v "$HOME/.dive.yaml":"$HOME/.dive.yaml" \
docker.io/wagoodman/dive:latest build -t <some-tag> .
بالإضافة إلى ذلك، يمكنك تشغيل هذا في خط أنابيب CI الخاص بك لضمان الحفاظ على المساحة المهدرة عند أدنى حد (هذا يتجاوز واجهة المستخدم):
CI=true dive <your-image>

هذه نسخة تجريبية! لا تتردد في تقديم مشكلة إذا كنت تريد ميزة جديدة أو وجدت خطأ :)
عرض محتويات صورة Docker مقسمة حسب الطبقة
عند تحديد طبقة على اليسار، تظهر لك محتويات تلك الطبقة بالإضافة إلى جميع الطبقات السابقة على اليمين. كما يمكنك استكشاف شجرة الملفات بالكامل باستخدام مفاتيح الأسهم.
الإشارة إلى ما تغير في كل طبقة
يتم الإشارة إلى الملفات التي تغيرت أو عدلت أو أضيفت أو حذفت في شجرة الملفات. يمكن ضبط ذلك لإظهار التغييرات لطبقة معينة، أو التغييرات المجمعة حتى هذه الطبقة.
تقدير "كفاءة الصورة"
تعرض اللوحة السفلية اليسرى معلومات أساسية عن الطبقة ومقياسًا تجريبيًا يخمن مقدار المساحة المهدرة التي تحتويها صورتك. قد يكون ذلك من تكرار الملفات عبر الطبقات، أو نقل الملفات عبر الطبقات، أو عدم إزالة الملفات بالكامل. يتم توفير كل من النسبة المئوية "للنتيجة" وإجمالي مساحة الملفات المهدرة.
دورات بناء/تحليل سريعة
يمكنك بناء صورة Docker وإجراء تحليل فوري بأمر واحد:
dive build -t some-tag .
كل ما عليك فعله هو استبدال أمر docker build الخاص بك بنفس أمر dive build.
تكامل CI
قم بتحليل صورة واحصل على نتيجة نجاح/فشل بناءً على كفاءة الصورة والمساحة المهدرة. ما عليك سوى تعيين CI=true في البيئة عند تشغيل أي أمر dive صالح.
دعم مصادر صور متعددة ومحركات حاويات متعددة
مع الخيار --source، يمكنك تحديد مكان جلب صورة الحاوية:
dive <your-image> --source <source>
أو
dive <source>://<your-image>
مع خيارات source الصالحة كالتالي:
docker: محرك Docker (الخيار الافتراضي)docker-archive: أرشيف Docker Tar من القرصpodman: محرك Podman (لينكس فقط)أوبونتو/ديبيان
باستخدام حزم deb:
DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -fOL "https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.deb"
sudo apt install ./dive_${DIVE_VERSION}_linux_amd64.deb
باستخدام snap:
sudo snap install docker
sudo snap install dive
sudo snap connect dive:docker-executables docker:docker-executables
sudo snap connect dive:docker-daemon docker:docker-daemon
[!CAUTION] طريقة Snap غير موصى بها إذا قمت بتثبيت Docker عبر
apt-get، لأنها قد تعطل برنامج Docker الخفي الموجود لديك.انظر أيضًا: https://github.com/wagoodman/dive/issues/546
RHEL/Centos
DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -fOL "https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.rpm"
rpm -i dive_${DIVE_VERSION}_linux_amd64.rpm
آرتش لينكس
متوفر في مستودع extra ويمكن تثبيته عبر pacman:
pacman -S dive
ماك
إذا كنت تستخدم Homebrew:
brew install dive
إذا كنت تستخدم MacPorts:
sudo port install dive
أو قم بتنزيل أحدث إصدار لـ Darwin من صفحة الإصدارات.
ويندوز
إذا كنت تستخدم Chocolatey
choco install dive
إذا كنت تستخدم scoop
scoop install main/dive
إذا كنت تستخدم winget:
winget install --id wagoodman.dive
أو قم بتنزيل أحدث إصدار لويندوز من صفحة الإصدارات.
أدوات Go يتطلب إصدار Go 1.10 أو أعلى.
go install github.com/wagoodman/dive@latest
ملاحظة: عند التثبيت بهذه الطريقة، لن ترى إصدارًا مناسبًا عند تشغيل dive -v.
نيكس/NixOS
على NixOS:
nix-env -iA nixos.dive
على غير NixOS (لينكس، ماك)
nix-env -iA nixpkgs.dive
X-CMD
x-cmd هي صندوق أدوات لـ Posix Shell، وتقدم مدير حزم خفيف الوزن مبني باستخدام shell و awk.
x env use dive
دوكر
docker pull docker.io/wagoodman/dive
# أو بدلاً من ذلك
docker pull ghcr.io/wagoodman/dive
عند التشغيل، ستحتاج إلى تضمين ملف مقبس Docker:
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
docker.io/wagoodman/dive:latest <dive arguments...>
دوكر لويندوز (إظهار فواصل أسطر متوافقة مع PowerShell؛ قم بدمجها في سطر واحد للتأقلم مع Command Prompt)
docker run --rm -it `
-v /var/run/docker.sock:/var/run/docker.sock `
docker.io/wagoodman/dive:latest <dive arguments...>
ملاحظة: اعتمادًا على إصدار docker الذي تقوم بتشغيله محليًا، قد تحتاج إلى تحديد إصدار واجهة برمجة تطبيقات docker كمتغير بيئة:
DOCKER_API_VERSION=1.37 dive ...
أو إذا كنت تعمل باستخدام صورة docker:
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DOCKER_API_VERSION=1.37 \
docker.io/wagoodman/dive:latest <dive arguments...>
إذا كنت تستخدم بيئة تشغيل بديلة (Colima إلخ) فقد تحتاج إلى تحديد مضيف docker كمتغير بيئة لسحب الصور المحلية:
export DOCKER_HOST=$(docker context inspect -f '{{ .Endpoints.docker.Host }}')
عند تشغيل dive مع متغير البيئة CI=true، سيتم تجاوز واجهة المستخدم الخاصة بـ dive وبدلاً من ذلك سيتم تحليل صورة docker الخاصة بك، مع إعطاء إشارة نجاح/فشل عبر رمز الإرجاع. حاليًا هناك ثلاثة مقاييس مدعومة عبر ملف .dive-ci الذي يمكنك وضعه في جذر المستودع الخاص بك:
rules:
# إذا كانت الكفاءة المقاسة أقل من X%، قم بوضع علامة فشل.
# يتم التعبير عنها كنسبة بين 0-1.
lowestEfficiency: 0.95
# إذا كانت كمية المساحة المهدرة على الأقل X أو أكبر من X، قم بوضع علامة فشل.
# يتم التعبير عنها بـ B، KB، MB، و GB.
highestWastedBytes: 20MB
# إذا كانت المساحة المهدرة تشكل X% أو أكثر من الصورة، قم بوضع علامة فشل.
# ملاحظة: طبقة الصورة الأساسية غير مضمنة في الحجم الإجمالي للصورة.
# يتم التعبير عنها كنسبة بين 0-1؛ تفشل إذا تم تجاوز الحد أو الوصول إليه.
highestUserWastedPercent: 0.20
يمكنك تجاوز مسار تكوين CI باستخدام الخيار --ci-config.
لا حاجة لتكوين، ومع ذلك، يمكنك إنشاء ملف تكوين وتجاوز القيم:
# الخيارات المدعومة هي "docker" و "podman"
container-engine: docker
# استمر في التحليل حتى في حالة وجود أخطاء في تحليل أرشيف الصورة
ignore-errors: false
log:
enabled: true
path: ./dive.log
level: info
# ملاحظة: يمكنك تحديد عدة روابط بفصل القيم بفاصلة.
# ملاحظة: يتم اشتقاق تلميح واجهة المستخدم من الرابط الأول
keybinding:
# روابط عامة
quit: ctrl+c
toggle-view: tab
filter-files: ctrl+f, ctrl+slash
close-filter-files: esc
up: up,k
down: down,j
left: left,h
right: right,l
# روابط خاصة بعرض الطبقة
compare-all: ctrl+a
compare-layer: ctrl+l
# روابط خاصة بعرض الملف
toggle-collapse-dir: space
toggle-collapse-all-dir: ctrl+space
toggle-added-files: ctrl+a
toggle-removed-files: ctrl+r
toggle-modified-files: ctrl+m
toggle-unmodified-files: ctrl+u
toggle-filetree-attributes: ctrl+b
page-up: pgup,u
page-down: pgdn,d
diff:
# يمكنك تغيير الملفات الافتراضية المعروضة في شجرة الملفات (اللوحة اليمنى). يتم عرض جميع أنواع الفروق افتراضيًا.
hide:
- added
- removed
- modified
- unmodified
filetree:
# حالة طي الدليل الافتراضية
collapse-dir: false
# النسبة المئوية لعرض الشاشة التي يجب أن تشغلها شجرة الملفات (يجب أن تكون >0 و <1)
pane-width: 0.5
# إظهار سمات الملف بجوار شجرة الملفات
show-attributes: true
layer:
# تمكين عرض جميع التغييرات من هذه الطبقة وكل طبقة سابقة
show-aggregated-changes: false
سيبحث dive عن ملفات التكوين في المواقع التالية:
$XDG_CONFIG_HOME/dive/*.yaml$XDG_CONFIG_DIRS/dive/*.yaml~/.config/dive/*.yaml~/.dive.yamlيمكن استخدام .yml بدلاً من .yaml إذا رغبت.
| مفتاح الربط | الوصف |
|---|
| Ctrl + C أو Q | خروج |
| Tab | التبديل بين عرض الطبقة وعرض شجرة الملفات |
| Ctrl + F | تصفية الملفات |
| ESC | إغلاق تصفية الملفات |
| PageUp أو U | التمرير لأعلى صفحة |
| PageDown أو D | التمرير لأسفل صفحة |
| Up أو K | التحرك لأعلى سطر واحد داخل الصفحة |
| Down أو J | التحرك لأسفل سطر واحد داخل الصفحة |
| Ctrl + A | عرض الطبقة: رؤية التعديلات المجمعة للصورة |
| Ctrl + L | عرض الطبقة: رؤية تعديلات الطبقة الحالية |
| Space | عرض شجرة الملفات: طي/فك طي دليل |
| Ctrl + Space | عرض شجرة الملفات: طي/فك طي جميع الأدلة |
| Ctrl + A | عرض شجرة الملفات: إظهار/إخفاء الملفات المضافة |
| Ctrl + R | عرض شجرة الملفات: إظهار/إخفاء الملفات المحذوفة |
| Ctrl + M | عرض شجرة الملفات: إظهار/إخفاء الملفات المعدلة |
| Ctrl + U | عرض شجرة الملفات: إظهار/إخفاء الملفات غير المعدلة |
| Ctrl + B | عرض شجرة الملفات: إظهار/إخفاء سمات الملف |
| PageUp أو U | عرض شجرة الملفات: التمرير لأعلى صفحة |
| PageDown أو D | عرض شجرة الملفات: التمرير لأسفل صفحة |