
डॉकर इमेज में प्रत्येक लेयर का अन्वेषण करने के लिए एक उपकरण
एक उपकरण जो Docker इमेज, लेयर सामग्री की खोज करने और आपकी Docker/OCI इमेज के आकार को कम करने के तरीके खोजने में सहायता करता है।

Docker इमेज का विश्लेषण करने के लिए बस एक इमेज टैग/आईडी/डाइजेस्ट के साथ dive चलाएँ:
dive <your-image-tag>
या आप सीधे Docker के साथ dive का उपयोग कर सकते हैं:
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 पाइपलाइन में चला सकते हैं ताकि यह सुनिश्चित हो सके कि आप बर्बाद जगह को न्यूनतम रख रहे हैं (यह UI को छोड़ देता है):
CI=true dive <your-image>

यह बीटा गुणवत्ता है! यदि आप कोई नई सुविधा चाहते हैं या कोई बग पाते हैं तो कृपया एक मुद्दा प्रस्तुत करें :)
लेयर के अनुसार Docker इमेज सामग्री दिखाएँ
जब आप बाईं ओर किसी लेयर का चयन करते हैं, तो आपको दाईं ओर उस लेयर की सामग्री को पिछली सभी लेयरों के साथ संयुक्त रूप में दिखाया जाता है। साथ ही, आप arrow keys का उपयोग करके फ़ाइल ट्री का पूरी तरह से अन्वेषण कर सकते हैं।
बताएँ कि प्रत्येक लेयर में क्या बदला है
जो फ़ाइलें बदली गई हैं, संशोधित की गई हैं, जोड़ी गई हैं या हटाई गई हैं, उन्हें फ़ाइल ट्री में दर्शाया गया है। इसे किसी विशिष्ट लेयर के लिए परिवर्तन दिखाने, या इस लेयर तक के समग्र परिवर्तन दिखाने के लिए समायोजित किया जा सकता है।
"इमेज दक्षता" का अनुमान लगाएं
नीचे बाईं ओर का पैनल बुनियादी लेयर जानकारी और एक प्रायोगिक मीट्रिक दिखाता है जो अनुमान लगाएगा कि आपकी इमेज में कितनी बर्बाद जगह है। यह लेयरों में फ़ाइलों की नकल, लेयरों में फ़ाइलों को स्थानांतरित करने, या फ़ाइलों को पूरी तरह से न हटाने के कारण हो सकता है। प्रतिशत "स्कोर" और कुल बर्बाद फ़ाइल स्थान दोनों प्रदान किए जाते हैं।
त्वरित बिल्ड/विश्लेषण चक्र
आप एक Docker इमेज बना सकते हैं और एक कमांड के साथ तुरंत विश्लेषण कर सकते हैं:
dive build -t some-tag .
आपको केवल अपने docker build कमांड को उसी dive build कमांड से बदलना होगा।
CI एकीकरण
एक इमेज का विश्लेषण करें और इमेज दक्षता और बर्बाद जगह के आधार पर पास/फेल परिणाम प्राप्त करें। बस किसी भी मान्य dive कमांड को लागू करते समय वातावरण में CI=true सेट करें।
एकाधिक इमेज स्रोत और कंटेनर इंजन समर्थित
--source विकल्प के साथ, आप चुन सकते हैं कि कंटेनर इमेज कहाँ से लाई जाए:
dive <your-image> --source <source>
या
dive <source>://<your-image>
मान्य source विकल्प इस प्रकार हैं:
docker: Docker इंजन (डिफ़ॉल्ट विकल्प)docker-archive: डिस्क से एक Docker Tar आर्काइवpodman: Podman इंजन (केवल लिनक्स)Ubuntu/Debian
डेब्स का उपयोग करना:
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
स्नैप का उपयोग करना:
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] यदि आपने
apt-getके माध्यम से Docker स्थापित किया है तो स्नैप विधि अनुशंसित नहीं है, क्योंकि यह आपके मौजूदा 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
Arch Linux
extra repository में उपलब्ध है और pacman के माध्यम से स्थापित किया जा सकता है:
pacman -S dive
Mac
यदि आप Homebrew का उपयोग करते हैं:
brew install dive
यदि आप MacPorts का उपयोग करते हैं:
sudo port install dive
या releases page से नवीनतम Darwin बिल्ड डाउनलोड करें।
Windows
यदि आप Chocolatey का उपयोग करते हैं
choco install dive
यदि आप scoop का उपयोग करते हैं
scoop install main/dive
यदि आप winget का उपयोग करते हैं:
winget install --id wagoodman.dive
या releases page से नवीनतम Windows बिल्ड डाउनलोड करें।
Go उपकरण Go संस्करण 1.10 या उच्चतर की आवश्यकता है।
go install github.com/wagoodman/dive@latest
नोट: इस तरह से स्थापित करने पर dive -v चलाने पर आपको उचित संस्करण नहीं दिखेगा।
Nix/NixOS
NixOS पर:
nix-env -iA nixos.dive
गैर-NixOS (Linux, Mac) पर:
nix-env -iA nixpkgs.dive
X-CMD
x-cmd एक Posix Shell के लिए टूलबॉक्स है, जो शेल और awk का उपयोग करके एक हल्का पैकेज मैनेजर प्रदान करता है।
x env use dive
Docker
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...>
Windows के लिए Docker (PowerShell संगत लाइन ब्रेक दिखा रहा है; Command Prompt संगतता के लिए एकल लाइन में संक्षिप्त करें)
docker run --rm -it `
-v /var/run/docker.sock:/var/run/docker.sock `
docker.io/wagoodman/dive:latest <dive arguments...>
नोट: आपके स्थानीय रूप से चल रहे डॉकर संस्करण के आधार पर, आपको Docker API संस्करण को एक पर्यावरण चर के रूप में निर्दिष्ट करने की आवश्यकता हो सकती है:
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 आदि) का उपयोग कर रहे हैं तो स्थानीय इमेज खींचने के लिए आपको डॉकर होस्ट को पर्यावरण चर के रूप में निर्दिष्ट करने की आवश्यकता हो सकती है:
export DOCKER_HOST=$(docker context inspect -f '{{ .Endpoints.docker.Host }}')
जब dive को पर्यावरण चर CI=true के साथ चलाया जाता है, तो dive UI को बायपास कर दिया जाएगा और इसके बजाय आपकी डॉकर इमेज का विश्लेषण किया जाएगा, जो रिटर्न कोड के माध्यम से पास/फेल संकेत देगा। वर्तमान में तीन मीट्रिक एक .dive-ci फ़ाइल के माध्यम से समर्थित हैं जिसे आप अपनी रिपॉजिटरी की जड़ में रख सकते हैं:
rules:
# यदि दक्षता X% से नीचे मापी जाती है, तो असफल के रूप में चिह्नित करें।
# 0-1 के बीच अनुपात के रूप में व्यक्त किया गया।
lowestEfficiency: 0.95
# यदि बर्बाद जगह की मात्रा कम से कम X या X से बड़ी है, तो असफल के रूप में चिह्नित करें।
# B, KB, MB, और GB में व्यक्त किया गया।
highestWastedBytes: 20MB
# यदि बर्बाद जगह इमेज का X% या अधिक भाग बनाती है, तो असफल के रूप में चिह्नित करें।
# नोट: बेस इमेज लेयर कुल इमेज आकार में शामिल नहीं है।
# 0-1 के बीच अनुपात के रूप में व्यक्त किया गया; यदि सीमा पूरी होती है या पार हो जाती है तो असफल।
highestUserWastedPercent: 0.20
आप --ci-config विकल्प के साथ CI कॉन्फ़िगरेशन पथ को ओवरराइड कर सकते हैं।
कोई कॉन्फ़िगरेशन आवश्यक नहीं है, हालाँकि, आप एक कॉन्फ़िगरेशन फ़ाइल बना सकते हैं और मानों को ओवरराइड कर सकते हैं:
# समर्थित विकल्प "docker" और "podman" हैं
container-engine: docker
# यदि इमेज आर्काइव को पार्स करने में त्रुटियाँ हों तो भी विश्लेषण जारी रखें
ignore-errors: false
log:
enabled: true
path: ./dive.log
level: info
# नोट: आप मानों को अल्पविराम से अलग करके एकाधिक बाइंडिंग निर्दिष्ट कर सकते हैं।
# नोट: UI संकेत पहली बाइंडिंग से प्राप्त होता है
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 | फ़ाइलट्री दृश्य: एक पृष्ठ नीचे स्क्रॉल करें |