
Uno strumento per esplorare ogni layer in un'immagine Docker
Uno strumento per esplorare un'immagine Docker, il contenuto dei layer e scoprire modi per ridurre le dimensioni della tua immagine Docker/OCI.

Per analizzare un'immagine Docker, esegui semplicemente dive con un tag/id/digest dell'immagine:
dive <your-image-tag>
oppure puoi usare direttamente dive con Docker:
alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive"
dive <your-image-tag>
# per esempio
dive nginx:latest
oppure se vuoi creare la tua immagine e poi passare direttamente all'analisi:
dive build -t <some-tag> .
Compilazione su macOS (supporta solo il motore contenitori 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> .
Inoltre, puoi eseguirlo nella tua pipeline CI per assicurarti di mantenere al minimo lo spazio sprecato (salta l'interfaccia):
CI=true dive <your-image>

Questa è una versione beta! Sentiti libero di aprire un problema se vuoi una nuova funzionalità o trovi un bug :)
Mostra il contenuto dell'immagine Docker suddiviso per layer
Quando selezioni un layer a sinistra, viene mostrato il contenuto di quel layer combinato con tutti i layer precedenti a destra. Inoltre, puoi esplorare completamente l'albero dei file con i tasti freccia.
Indica cosa è cambiato in ogni layer
I file che sono stati modificati, aggiunti o rimossi vengono indicati nell'albero dei file. Questo può essere regolato per mostrare le modifiche per un layer specifico o le modifiche aggregate fino a questo layer.
Stima dell'"efficienza dell'immagine"
Il pannello in basso a sinistra mostra le informazioni di base del layer e una metrica sperimentale che stima quanto spazio sprecato contiene la tua immagine. Questo potrebbe derivare dalla duplicazione di file tra i layer, dallo spostamento di file tra i layer o dalla rimozione non completa dei file. Vengono forniti sia una percentuale "punteggio" che lo spazio totale sprecato.
Cicli rapidi di build/analisi
Puoi creare un'immagine Docker ed eseguire un'analisi immediata con un solo comando:
dive build -t some-tag .
Devi solo sostituire il tuo comando docker build con lo stesso comando dive build.
Integrazione CI
Analizza un'immagine e ottieni un risultato di superato/non superato basato sull'efficienza dell'immagine e sullo spazio sprecato. Basta impostare CI=true nell'ambiente quando si invoca un comando dive valido.
Supporto di più sorgenti di immagini e motori contenitori
Con l'opzione --source, puoi selezionare da dove recuperare l'immagine del contenitore:
dive <your-image> --source <source>
oppure
dive <source>://<your-image>
Con le opzioni source valide:
docker: motore Docker (opzione predefinita)docker-archive: un archivio Tar Docker dal discopodman: motore Podman (solo Linux)Ubuntu/Debian
Usando i 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
Usando 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] Il metodo Snap non è consigliato se hai installato Docker tramite
apt-get, poiché potrebbe rompere il demone Docker esistente.Vedi anche: 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
Disponibile nel repository extra e può essere installato tramite pacman:
pacman -S dive
Mac
Se usi Homebrew:
brew install dive
Se usi MacPorts:
sudo port install dive
Oppure scarica l'ultima build Darwin dalla pagina delle release.
Windows
Se usi Chocolatey
choco install dive
Se usi scoop
scoop install main/dive
Se usi winget:
winget install --id wagoodman.dive
Oppure scarica l'ultima build Windows dalla pagina delle release.
Strumenti Go Richiede la versione 1.10 o successiva di Go.
go install github.com/wagoodman/dive@latest
Nota: installando in questo modo non vedrai una versione corretta quando esegui dive -v.
Nix/NixOS
Su NixOS:
nix-env -iA nixos.dive
Su non-NixOS (Linux, Mac)
nix-env -iA nixpkgs.dive
X-CMD
x-cmd è una toolbox per Posix Shell che offre un gestore di pacchetti leggero costruito utilizzando shell e awk.
x env use dive
Docker
docker pull docker.io/wagoodman/dive
# oppure
docker pull ghcr.io/wagoodman/dive
Durante l'esecuzione dovrai includere il file del socket Docker:
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
docker.io/wagoodman/dive:latest <dive arguments...>
Docker per Windows (mostra interruzioni di riga compatibili con PowerShell; comprimi in una singola riga per la compatibilità con il prompt dei comandi)
docker run --rm -it `
-v /var/run/docker.sock:/var/run/docker.sock `
docker.io/wagoodman/dive:latest <dive arguments...>
Nota: a seconda della versione di Docker che stai utilizzando localmente, potrebbe essere necessario specificare la versione dell'API Docker come variabile d'ambiente:
DOCKER_API_VERSION=1.37 dive ...
oppure se stai eseguendo con un'immagine 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...>
se stai utilizzando un runtime alternativo (Colima, ecc.) potrebbe essere necessario specificare l'host Docker come variabile d'ambiente per poter estrarre immagini locali:
export DOCKER_HOST=$(docker context inspect -f '{{ .Endpoints.docker.Host }}')