
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...>