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

किसी Docker इमेज का विश्लेषण करने के लिए बस इमेज टैग/आईडी/डाइजेस्ट के साथ dive चलाएँ:
dive <your-image-tag>
या आप सीधे Docker के साथ शुरू कर सकते हैं:
alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive"
dive <your-image-tag>
# for example
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>

यह बीटा गुणवत्ता है! यदि आप कोई नई सुविधा चाहते हैं या कोई बग पाते हैं तो बेझिझक एक issue सबमिट करें :)
Docker इमेज की सामग्री को परत के अनुसार विभाजित करके दिखाएँ
जैसे ही आप बाईं ओर कोई परत चुनते हैं, आपको दाईं ओर उस परत की सामग्री पिछली सभी परतों के साथ मिलाकर दिखाई जाती है। साथ ही, आप तीर कुंजियों से फ़ाइल ट्री को पूरी तरह से एक्सप्लोर कर सकते हैं।
प्रत्येक परत में क्या बदला है, यह इंगित करें
जो फ़ाइलें बदली गई हैं, संशोधित की गई हैं, जोड़ी गई हैं या हटाई गई हैं, उन्हें फ़ाइल ट्री में इंगित किया जाता है। इसे किसी विशिष्ट परत के लिए परिवर्तन दिखाने के लिए, या इस परत तक के संचित परिवर्तनों को दिखाने के लिए समायोजित किया जा सकता है।
"इमेज दक्षता" का अनुमान लगाएँ
निचला बायाँ फलक बुनियादी परत जानकारी और एक प्रयोगात्मक मीट्रिक दिखाता है जो अनुमान लगाएगा कि आपकी इमेज में कितनी बर्बाद जगह है। यह परतों के बीच फ़ाइलों की नकल करने, परतों के बीच फ़ाइलों को स्थानांतरित करने, या फ़ाइलों को पूरी तरह से न हटाने के कारण हो सकता है। एक प्रतिशत "स्कोर" और कुल बर्बाद फ़ाइल स्थान दोनों प्रदान किए जाते हैं।
त्वरित बिल्ड/विश्लेषण चक्र
आप एक कमांड से Docker इमेज बना सकते हैं और तुरंत विश्लेषण कर सकते हैं:
dive build -t some-tag .
आपको बस अपने docker build कमांड को उसी dive build
कमांड से बदलना है।
CI एकीकरण
किसी इमेज का विश्लेषण करें और इमेज दक्षता और बर्बाद जगह के आधार पर पास/फेल परिणाम प्राप्त करें। किसी भी वैध dive कमांड को लागू करते समय बस वातावरण में CI=true सेट करें।
एकाधिक इमेज स्रोत और कंटेनर इंजन समर्थित
--source विकल्प के साथ, आप चुन सकते हैं कि कंटेनर इमेज कहाँ से प्राप्त करनी है:
dive <your-image> --source <source>
या छवि को <source>:// स्कीम के साथ उपसर्ग करें:
dive <source>://<your-image>
फ़ाइल-आधारित स्रोत भी <source>:<path> रूप लेते हैं जो अन्य anchore टूल्स उपयोग करते हैं (जैसे dive oci-dir:./layout)।
अन्य प्रत्येक स्रोत के लिए एकल कोलन को इमेज नाम और टैग के रूप में पढ़ा जाता है, इसलिए dive docker:dind
docker:dind इमेज का विश्लेषण करता है।
| स्रोत | इमेज यहाँ से पढ़ता है |
|---|---|
docker | Docker इंजन (डिफ़ॉल्ट)। स्थानीय रूप से अनुपलब्ध इमेजें docker API के माध्यम से खींची जाती हैं, आपके docker कॉन्फ़िग से क्रेडेंशियल्स के साथ। DOCKER_HOST, DOCKER_CONTEXT और वर्तमान docker कॉन्टेक्स्ट का सम्मान किया जाता है |
podman | Podman। linux पर स्थानीय स्टोर सीधे पढ़ा जाता है (सॉकेट की आवश्यकता नहीं, containers-storage देखें, और myapp जैसा छोटा नाम podman के localhost/myapp को भी ढूँढता है), podman सॉकेट पर वापस आते हुए। macOS पर चल रही podman मशीन का API सॉकेट उपयोग किया जाता है (podman machine inspect के माध्यम से पाया जाता है); CONTAINER_HOST=unix://... इसे ओवरराइड करता है, ssh कनेक्शन अस्वीकार किए जाते हैं |
docker-archive | डिस्क पर एक docker save tarball, या एक OCI आर्काइव (docker-tar एक उपनाम है) |
oci-archive | डिस्क पर एक OCI इमेज लेआउट tarball |
oci-dir | डिस्क पर एक OCI इमेज लेआउट डायरेक्टरी |
registry | एक रजिस्ट्री, बिना कंटेनर इंजन के (आपके docker कॉन्फ़िग से क्रेडेंशियल्स)। निजी IP पतों पर रजिस्ट्रियाँ अस्वीकार की जाती हैं, क्योंकि उन तक सादे http पर पहुँचा जाएगा |
containerd | containerd डेमॉन (CONTAINERD_NAMESPACE नेमस्पेस चुनता है) |
containers-storage | स्थानीय podman/buildah स्टोर (केवल linux, नीचे देखें) |
auto | इसका पता लगाएँ: पहले डिस्क पर फ़ाइलें, फिर docker, podman, containerd और containers-storage, फिर एक रजिस्ट्री पुल। जो स्रोत चुना गया वह रिपोर्ट किया जाता है, क्योंकि जो इमेज किसी स्थानीय इंजन के पास नहीं है वह चुपचाप एक रजिस्ट्री से आती है (छोटे नाम के लिए Docker Hub)। केवल --source के लिए मान्य, स्कीम के रूप में नहीं |
मल्टी-प्लेटफ़ॉर्म इमेज के लिए, --platform विश्लेषण करने के लिए वेरिएंट चुनता है (जैसे --platform linux/arm64)। एक docker save
tarball एकल प्लेटफ़ॉर्म रखता है, जब यह मेल नहीं खाता तो dive रिपोर्ट करता है।
containers-storage समर्थन केवल containers_image_openpgp बिल्ड टैग के साथ संकलित किया जाता है, जो linux
रिलीज़ बिल्ड्स (और docker इमेज) में है। इसके बिना स्रोत रिपोर्ट करता है कि यह उपलब्ध नहीं है। इसे स्वयं बिल्ड करने के लिए: go build -tags containers_image_openpgp,exclude_graphdriver_btrfs ./cmd/dive।
JSON निर्यात
--json <path> UI को छोड़ देता है और विश्लेषण को एक फ़ाइल में लिखता है। प्रत्येक लेयर का id लेयर का diff ID है (digestId के समान मान)।
Ubuntu/Debian
debs का उपयोग करते हुए:
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
Using 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] यदि आपने Docker को
apt-getके माध्यम से इंस्टॉल किया है, तो Snap विधि की अनुशंसा नहीं की जाती है, क्योंकि यह आपके मौजूदा Docker daemon को तोड़ सकती है।यह भी देखें: 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 पृष्ठ से नवीनतम Darwin बिल्ड डाउनलोड करें।
Windows
यदि आप Chocolatey का उपयोग करते हैं