
Ein Werkzeug zum Erkunden jeder Schicht in einem Docker-Image.
Ein Werkzeug zum Erkunden eines Docker-Images, der Layer-Inhalte und zum Finden von Möglichkeiten, die Größe Ihres Docker/OCI-Images zu reduzieren.

Um ein Docker-Image zu analysieren, führen Sie einfach dive mit einem Image-Tag/ID/Digest aus:
dive <your-image-tag>
oder Sie können dive direkt mit Docker verwenden:
alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive"
dive <your-image-tag>
# zum Beispiel
dive nginx:latest
oder wenn Sie Ihr Image erstellen und dann direkt analysieren möchten:
dive build -t <some-tag> .
Build auf macOS (Unterstützung nur der Docker-Container-Engine):
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> .
Zusätzlich können Sie dies in Ihrer CI-Pipeline ausführen, um sicherzustellen, dass Sie den verschwendeten Speicherplatz minimieren (dies überspringt die Benutzeroberfläche):
CI=true dive <your-image>

Dies ist Beta-Qualität! Zögern Sie nicht, ein Issue zu melden, wenn Sie eine neue Funktion wünschen oder einen Fehler finden :)
Docker-Image-Inhalte aufgeschlüsselt nach Layer anzeigen
Wenn Sie links einen Layer auswählen, werden Ihnen rechts die Inhalte dieses Layers zusammen mit allen vorherigen Layern angezeigt. Außerdem können Sie den Dateibaum vollständig mit den Pfeiltasten erkunden.
Anzeigen, was sich in jedem Layer geändert hat
Dateien, die geändert, modifiziert, hinzugefügt oder entfernt wurden, werden im Dateibaum angezeigt. Dies kann angepasst werden, um Änderungen für einen bestimmten Layer oder aggregierte Änderungen bis zu diesem Layer anzuzeigen.
Schätzung der „Image-Effizienz“
Im linken unteren Bereich werden grundlegende Layer-Informationen und eine experimentelle Metrik angezeigt, die schätzt, wie viel verschwendeten Speicherplatz Ihr Image enthält. Dies kann durch Duplizieren von Dateien über Layer hinweg, Verschieben von Dateien zwischen Layern oder nicht vollständiges Entfernen von Dateien verursacht werden. Es werden sowohl ein prozentualer „Wert“ als auch der gesamte verschwendete Dateispeicherplatz angegeben.
Schnelle Build-/Analyse-Zyklen
Sie können ein Docker-Image erstellen und mit einem Befehl sofort analysieren:
dive build -t some-tag .
Sie müssen lediglich Ihren docker build-Befehl durch denselben dive build-Befehl ersetzen.
CI-Integration
Analysieren Sie ein Image und erhalten Sie ein Bestehen/Nichtbestehen-Ergebnis basierend auf der Image-Effizienz und dem verschwendeten Speicherplatz. Setzen Sie einfach CI=true in der Umgebung, wenn Sie einen gültigen dive-Befehl aufrufen.
Mehrere Image-Quellen und Container-Engines werden unterstützt
Mit der Option --source können Sie auswählen, woher das Container-Image bezogen werden soll:
dive <your-image> --source <source>
oder
dive <source>://<your-image>
Mit den gültigen source-Optionen wie folgt:
docker: Docker-Engine (die Standardoption)docker-archive: Ein Docker-Tar-Archiv von der Festplattepodman: Podman-Engine (nur Linux)Ubuntu/Debian
Verwendung von 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
Verwendung von 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] Die Snap-Methode wird nicht empfohlen, wenn Sie Docker über
apt-getinstalliert haben, da sie Ihren vorhandenen Docker-Daemon beschädigen könnte.Siehe auch: 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
Verfügbar im extra repository und kann über pacman installiert werden:
pacman -S dive
Mac
Wenn Sie Homebrew verwenden:
brew install dive
Wenn Sie MacPorts verwenden:
sudo port install dive
Oder laden Sie den neuesten Darwin-Build von der Releases-Seite herunter.
Windows
Wenn Sie Chocolatey verwenden:
choco install dive
Wenn Sie scoop verwenden:
scoop install main/dive
Wenn Sie winget verwenden:
winget install --id wagoodman.dive
Oder laden Sie den neuesten Windows-Build von der Releases-Seite herunter.
Go-Tools Erfordert Go Version 1.10 oder höher.
go install github.com/wagoodman/dive@latest
Hinweis: Bei einer Installation auf diese Weise sehen Sie bei der Ausführung von dive -v keine ordnungsgemäße Version.
Nix/NixOS
Auf NixOS:
nix-env -iA nixos.dive
Auf Nicht-NixOS (Linux, Mac):
nix-env -iA nixpkgs.dive
X-CMD
x-cmd ist ein Toolbox für Posix Shell, das einen leichten Paketmanager mit Shell und awk bietet.
x env use dive
Docker
docker pull docker.io/wagoodman/dive
# oder alternativ
docker pull ghcr.io/wagoodman/dive
Beim Ausführen müssen Sie die Docker-Socket-Datei einbinden:
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
docker.io/wagoodman/dive:latest <dive arguments...>
Docker für Windows (Anzeige von PowerShell-kompatiblen Zeilenumbrüchen; für Kompatibilität mit der Eingabeaufforderung in eine einzelne Zeile umwandeln):
docker run --rm -it `
-v /var/run/docker.sock:/var/run/docker.sock `
docker.io/wagoodman/dive:latest <dive arguments...>
Hinweis: Abhängig von der lokal installierten Docker-Version müssen Sie möglicherweise die Docker-API-Version als Umgebungsvariable angeben:
DOCKER_API_VERSION=1.37 dive ...
oder wenn Sie mit einem Docker-Image ausführen:
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...>
Wenn Sie eine alternative Runtime (Colima usw.) verwenden, müssen Sie möglicherweise den Docker-Host als Umgebungsvariable angeben, um lokale Images zu pullen:
export DOCKER_HOST=$(docker context inspect -f '{{ .Endpoints.docker.Host }}')
Wenn Sie dive mit der Umgebungsvariable CI=true ausführen, wird die dive-Benutzeroberfläche umgangen und stattdessen Ihr Docker-Image analysiert, wobei über den Rückgabecode ein Bestehen/Nichtbestehen angezeigt wird. Derzeit werden drei Metriken über eine .dive-ci-Datei unterstützt, die Sie im Stammverzeichnis Ihres Repositorys ablegen können:
rules:
# Wenn die Effizienz unter X% gemessen wird, als fehlgeschlagen markieren.
# Ausgedrückt als Verhältnis zwischen 0-1.
lowestEfficiency: 0.95
# Wenn die Menge des verschwendeten Speicherplatzes mindestens X oder größer als X ist, als fehlgeschlagen markieren.
# Ausgedrückt in B, KB, MB und GB.
highestWastedBytes: 20MB
# Wenn der verschwendete Speicherplatz X% oder mehr des Images ausmacht, als fehlgeschlagen markieren.
# Hinweis: Die Basis-Image-Schicht ist NICHT in der Gesamtbildgröße enthalten.
# Ausgedrückt als Verhältnis zwischen 0-1; schlägt fehl, wenn der Schwellenwert erreicht oder überschritten wird.
highestUserWastedPercent: 0.20
Sie können den CI-Konfigurationspfad mit der Option --ci-config überschreiben.
Es ist keine Konfiguration erforderlich, Sie können jedoch eine Konfigurationsdatei erstellen und Werte überschreiben:
# unterstützte Optionen sind "docker" und "podman"
container-engine: docker
# mit der Analyse fortfahren, auch wenn Fehler beim Parsen des Image-Archivs auftreten
ignore-errors: false
log:
enabled: true
path: ./dive.log
level: info
# Hinweis: Sie können mehrere Bindungen angeben, indem Sie die Werte durch Kommas trennen.
# Hinweis: UI-Hinweise leiten sich von der ersten Bindung ab
keybinding:
# Globale Bindungen
quit: strg+c
toggle-view: tab
filter-files: strg+f, strg+slash
close-filter-files: esc
up: hoch,k
down: runter,j
left: links,h
right: rechts,l
# Layerspezifische Bindungen
compare-all: strg+a
compare-layer: strg+l
# Dateiansichtsspezifische Bindungen
toggle-collapse-dir: leertaste
toggle-collapse-all-dir: strg+leertaste
toggle-added-files: strg+a
toggle-removed-files: strg+r
toggle-modified-files: strg+m
toggle-unmodified-files: strg+u
toggle-filetree-attributes: strg+b
page-up: bildauf,u
page-down: bildab,d
diff:
# Sie können die standardmäßig im Dateibaum (rechter Bereich) angezeigten Dateien ändern. Standardmäßig werden alle Diff-Typen angezeigt.
hide:
- added
- removed
- modified
- unmodified
filetree:
# Standardzustand für das Einklappen von Verzeichnissen
collapse-dir: false
# Der prozentuale Anteil der Bildschirmbreite, den der Dateibaum einnehmen soll (muss >0 und <1 sein)
pane-width: 0.5
# Dateiattribute neben dem Dateibaum anzeigen
show-attributes: true
layer:
# Aktiviert die Anzeige aller Änderungen von diesem Layer und jedem vorherigen Layer
show-aggregated-changes: false
dive sucht nach Konfigurationsdateien an den folgenden Orten:
$XDG_CONFIG_HOME/dive/*.yaml$XDG_CONFIG_DIRS/dive/*.yaml~/.config/dive/*.yaml~/.dive.yaml.yml kann anstelle von .yaml verwendet werden, falls gewünscht.
| Tastenkombination | Beschreibung |
|---|
| Strg + C oder Q | Beenden |
| Tab | Zwischen Layer- und Dateibaumansichten wechseln |
| Strg + F | Dateien filtern |
| ESC | Filter für Dateien schließen |
| Bild auf oder U | Eine Seite nach oben scrollen |
| Bild ab oder D | Eine Seite nach unten scrollen |
| Hoch oder K | Eine Zeile nach oben innerhalb einer Seite |
| Runter oder J | Eine Zeile nach unten innerhalb einer Seite |
| Strg + A | Layer-Ansicht: aggregierte Image-Änderungen anzeigen |
| Strg + L | Layer-Ansicht: aktuelle Layer-Änderungen anzeigen |
| Leertaste | Dateibaumansicht: Verzeichnis einklappen/ausklappen |
| Strg + Leertaste | Dateibaumansicht: alle Verzeichnisse einklappen/ausklappen |
| Strg + A | Dateibaumansicht: hinzugefügte Dateien anzeigen/ausblenden |
| Strg + R | Dateibaumansicht: entfernte Dateien anzeigen/ausblenden |
| Strg + M | Dateibaumansicht: geänderte Dateien anzeigen/ausblenden |
| Strg + U | Dateibaumansicht: unveränderte Dateien anzeigen/ausblenden |
| Strg + B | Dateibaumansicht: Dateiattribute anzeigen/ausblenden |
| Bild auf oder U | Dateibaumansicht: eine Seite nach oben scrollen |
| Bild ab oder D | Dateibaumansicht: eine Seite nach unten scrollen |