
Un outil pour explorer chaque couche dans une image Docker
Un outil pour explorer une image Docker, le contenu des couches, et découvrir des moyens de réduire la taille de votre image Docker/OCI.

Pour analyser une image Docker, exécutez simplement dive avec un tag/id/digest d'image :
dive <votre-tag-image>
ou vous pouvez utiliser dive directement avec Docker :
alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive"
dive <votre-tag-image>
# par exemple
dive nginx:latest
ou si vous voulez construire votre image puis passer directement à son analyse :
dive build -t <un-tag> .
Construction sur macOS (supportant uniquement le moteur de conteneur 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 <un-tag> .
De plus, vous pouvez exécuter ceci dans votre pipeline CI pour vous assurer de minimiser l'espace gaspillé (cela ignore l'interface utilisateur) :
CI=true dive <votre-image>

Ceci est de qualité bêta ! N'hésitez pas à soumettre un problème si vous voulez une nouvelle fonctionnalité ou trouvez un bug :)
Afficher le contenu de l'image Docker décomposé par couche
Lorsque vous sélectionnez une couche à gauche, le contenu de cette couche combiné avec toutes les couches précédentes est affiché à droite. De plus, vous pouvez explorer entièrement l'arborescence des fichiers avec les touches fléchées.
Indiquer ce qui a changé dans chaque couche
Les fichiers qui ont changé, été modifiés, ajoutés ou supprimés sont indiqués dans l'arborescence. Cela peut être ajusté pour afficher les modifications pour une couche spécifique, ou les modifications agrégées jusqu'à cette couche.
Estimer l'efficacité de l'image
Le volet en bas à gauche affiche les informations de base de la couche et une métrique expérimentale qui estimera la quantité d'espace gaspillé dans votre image. Cela peut provenir de la duplication de fichiers entre les couches, du déplacement de fichiers entre les couches, ou de la suppression incomplète de fichiers. Un pourcentage de score et l'espace total gaspillé sont fournis.
Cycles rapides de construction/analyse
Vous pouvez construire une image Docker et effectuer une analyse immédiate avec une seule commande :
dive build -t some-tag .
Vous devez simplement remplacer votre commande docker build par la même commande dive build.
Intégration CI
Analysez une image et obtenez un résultat de succès/échec basé sur l'efficacité de l'image et l'espace gaspillé. Il suffit de définir CI=true dans l'environnement lors de l'appel de toute commande dive valide.
Plusieurs sources d'images et moteurs de conteneurs pris en charge
Avec l'option --source, vous pouvez sélectionner d'où récupérer l'image du conteneur :
dive <votre-image> --source <source>
ou
dive <source>://<votre-image>
Avec les options source valides suivantes :
docker : moteur Docker (l'option par défaut)docker-archive : une archive Docker Tar depuis le disquepodman : moteur Podman (linux uniquement)Ubuntu/Debian
En utilisant les paquets 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
En utilisant 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] La méthode Snap n'est pas recommandée si vous avez installé Docker via
apt-get, car elle pourrait casser votre démon Docker existant.Voir aussi : 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
Disponible dans le dépôt extra et peut être installé via pacman :
pacman -S dive
Mac
Si vous utilisez Homebrew :
brew install dive
Si vous utilisez MacPorts :
sudo port install dive
Ou téléchargez la dernière version Darwin depuis la page des versions.
Windows
Si vous utilisez Chocolatey
choco install dive
Si vous utilisez scoop
scoop install main/dive
Si vous utilisez winget :
winget install --id wagoodman.dive
Ou téléchargez la dernière version Windows depuis la page des versions.
Outils Go Nécessite Go version 1.10 ou supérieure.
go install github.com/wagoodman/dive@latest
Note : en installant de cette façon, vous ne verrez pas une version correcte en exécutant dive -v.
Nix/NixOS
Sur NixOS :
nix-env -iA nixos.dive
Sur non-NixOS (Linux, Mac)
nix-env -iA nixpkgs.dive
X-CMD
x-cmd est une boîte à outils pour shell Posix, offrant un gestionnaire de paquets léger construit avec shell et awk.
x env use dive
Docker
docker pull docker.io/wagoodman/dive
# ou alternativement
docker pull ghcr.io/wagoodman/dive
Lors de l'exécution, vous devrez inclure le fichier de socket Docker :
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
docker.io/wagoodman/dive:latest <arguments dive...>
Docker pour Windows (affichage de sauts de ligne compatibles PowerShell ; réduire à une seule ligne pour la compatibilité avec l'invite de commande)
docker run --rm -it `
-v /var/run/docker.sock:/var/run/docker.sock `
docker.io/wagoodman/dive:latest <arguments dive...>