
Una herramienta para explorar cada capa en una imagen Docker.
Una herramienta para explorar una imagen Docker, el contenido de sus capas y descubrir formas de reducir el tamaño de tu imagen Docker/OCI.

Para analizar una imagen Docker simplemente ejecuta dive con una etiqueta/id/digest de imagen:
dive <tu-etiqueta-de-imagen>
O puedes usar dive directamente con Docker:
alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive"
dive <tu-etiqueta-de-imagen>
# por ejemplo
dive nginx:latest
O si quieres construir tu imagen y luego saltar directamente a analizarla:
dive build -t <alguna-etiqueta> .
Construir en macOS (soporta solo el motor de contenedores 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 <alguna-etiqueta> .
Además puedes ejecutar esto en tu pipeline de CI para asegurarte de mantener el espacio desperdiciado al mínimo (esto omite la interfaz):
CI=true dive <tu-imagen>

¡Esto es calidad beta! No dudes en enviar un issue si quieres una nueva función o encuentras un bug :)
Mostrar el contenido de la imagen Docker desglosado por capa
Cuando seleccionas una capa a la izquierda, se te muestra el contenido de esa capa combinado con todas las capas anteriores a la derecha. Además, puedes explorar completamente el árbol de archivos con las teclas de flecha.
Indicar qué ha cambiado en cada capa
Los archivos que han cambiado, sido modificados, añadidos o eliminados se indican en el árbol de archivos. Esto se puede ajustar para mostrar los cambios de una capa específica, o los cambios agregados hasta esta capa.
Estimar la "eficiencia de la imagen"
El panel inferior izquierdo muestra información básica de la capa y una métrica experimental que adivinará cuánto espacio desperdiciado contiene tu imagen. Esto puede deberse a duplicar archivos entre capas, mover archivos entre capas o no eliminar archivos por completo. Se proporciona tanto un porcentaje de "puntuación" como el total de espacio desperdiciado en archivos.
Ciclos rápidos de construcción/análisis
Puedes construir una imagen Docker y realizar un análisis inmediato con un solo comando:
dive build -t alguna-etiqueta .
Solo necesitas reemplazar tu comando docker build con el mismo comando dive build.
Integración con CI
Analiza una imagen y obtén un resultado de aprobado/reprobado basado en la eficiencia de la imagen y el espacio desperdiciado. Simplemente establece CI=true en el entorno al invocar cualquier comando válido de dive.
Múltiples fuentes de imagen y motores de contenedores compatibles
Con la opción --source, puedes seleccionar de dónde obtener la imagen del contenedor:
dive <tu-imagen> --source <origen>
o
dive <origen>://<tu-imagen>
Con las opciones de origen válidas de la siguiente manera:
docker: motor Docker (la opción por defecto)docker-archive: un archivo tar de Docker desde el discopodman: motor Podman (solo Linux)Ubuntu/Debian
Usando 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
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] El método Snap no se recomienda si instalaste Docker mediante
apt-get, ya que podría romper tu demonio Docker existente.Ver también: 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 en el repositorio extra y se puede instalar mediante pacman:
pacman -S dive
Mac
Si usas Homebrew:
brew install dive
Si usas MacPorts:
sudo port install dive
O descarga la última compilación Darwin desde la página de lanzamientos.
Windows
Si usas Chocolatey
choco install dive
Si usas scoop
scoop install main/dive
Si usas winget:
winget install --id wagoodman.dive
O descarga la última compilación Windows desde la página de lanzamientos.
Herramientas Go Requiere Go versión 1.10 o superior.
go install github.com/wagoodman/dive@latest
Nota: instalando de esta manera no verás una versión adecuada al ejecutar dive -v.
Nix/NixOS
En NixOS:
nix-env -iA nixos.dive
En no-NixOS (Linux, Mac)
nix-env -iA nixpkgs.dive
X-CMD
x-cmd es un toolbox para Shell Posix, que ofrece un gestor de paquetes ligero construido con shell y awk.
x env use dive
Docker
docker pull docker.io/wagoodman/dive
# o alternativamente
docker pull ghcr.io/wagoodman/dive
Al ejecutarlo necesitarás incluir el archivo del socket Docker:
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
docker.io/wagoodman/dive:latest <argumentos de dive...>
Docker para Windows (mostrando saltos de línea compatibles con PowerShell; colapsar a una sola línea para compatibilidad con Command Prompt)
docker run --rm -it `
-v /var/run/docker.sock:/var/run/docker.sock `
docker.io/wagoodman/dive:latest <argumentos de dive...>
Nota: dependiendo de la versión de Docker que estés ejecutando localmente, puede que necesites especificar la versión de la API de Docker como variable de entorno:
DOCKER_API_VERSION=1.37 dive ...
o si ejecutas con una imagen 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 <argumentos de dive...>
si estás usando un runtime alternativo (Colima, etc.) puede que necesites especificar el host de Docker como variable de entorno para poder extraer imágenes locales:
export DOCKER_HOST=$(docker context inspect -f '{{ .Endpoints.docker.Host }}')
Al ejecutar dive con la variable de entorno CI=true, se omitirá la interfaz de dive y en su lugar analizará tu imagen Docker, dando una indicación de aprobado/reprobado mediante el código de retorno. Actualmente hay tres métricas compatibles mediante un archivo .dive-ci que puedes colocar en la raíz de tu repositorio:
rules:
# Si la eficiencia se mide por debajo de X%, marcar como fallido.
# Expresado como una proporción entre 0 y 1.
lowestEfficiency: 0.95
# Si la cantidad de espacio desperdiciado es al menos X o mayor que X, marcar como fallido.
# Expresado en B, KB, MB y GB.
highestWastedBytes: 20MB
# Si la cantidad de espacio desperdiciado constituye X% o más de la imagen, marcar como fallido.
# Nota: la capa base de la imagen NO está incluida en el tamaño total de la imagen.
# Expresado como una proporción entre 0 y 1; falla si se alcanza o supera el umbral.
highestUserWastedPercent: 0.20
Puedes sobrescribir la ruta de configuración de CI con la opción --ci-config.
| Atajo de teclado | Descripción |
|---|---|
| Ctrl + C o Q | Salir |
| Tab | Cambiar entre las vistas de capa y árbol de archivos |
| Ctrl + F | Filtrar archivos |
| ESC | Cerrar filtro de archivos |
| PageUp o U | Desplazar hacia arriba una página |
| PageDown o D | Desplazar hacia abajo una página |
| Up o K | Moverse una línea hacia arriba dentro de una página |
| Down o J | Moverse una línea hacia abajo dentro de una página |
| Ctrl + A | Vista de capa: ver modificaciones agregadas de la imagen |
| Ctrl + L | Vista de capa: ver modificaciones de la capa actual |
| Space | Vista de árbol de archivos: colapsar/expandir un directorio |
| Ctrl + Space | Vista de árbol de archivos: colapsar/expandir todos los directorios |
| Ctrl + A | Vista de árbol de archivos: mostrar/ocultar archivos añadidos |
| Ctrl + R | Vista de árbol de archivos: mostrar/ocultar archivos eliminados |
| Ctrl + M | Vista de árbol de archivos: mostrar/ocultar archivos modificados |
| Ctrl + U | Vista de árbol de archivos: mostrar/ocultar archivos no modificados |
| Ctrl + B | Vista de árbol de archivos: mostrar/ocultar atributos de archivo |
| PageUp o U | Vista de árbol de archivos: desplazar hacia arriba una página |
| PageDown o D | Vista de árbol de archivos: desplazar hacia abajo una página |
No es necesaria ninguna configuración, sin embargo, puedes crear un archivo de configuración y sobrescribir valores:
# las opciones soportadas son "docker" y "podman"
container-engine: docker
# continuar con el análisis incluso si hay errores al analizar el archivo de imagen
ignore-errors: false
log:
enabled: true
path: ./dive.log
level: info
# Nota: puedes especificar múltiples atajos separando los valores con una coma.
# Nota: la sugerencia de la interfaz se deriva del primer atajo
keybinding:
# Atajos globales
quit: ctrl+c
toggle-view: tab
filter-files: ctrl+f, ctrl+slash
close-filter-files: esc
up: up,k
down: down,j
left: left,h
right: right,l
# Atajos específicos de la vista de capa
compare-all: ctrl+a
compare-layer: ctrl+l
# Atajos específicos de la vista de archivo
toggle-collapse-dir: space
toggle-collapse-all-dir: ctrl+space
toggle-added-files: ctrl+a
toggle-removed-files: ctrl+r
toggle-modified-files: ctrl+m
toggle-unmodified-files: ctrl+u
toggle-filetree-attributes: ctrl+b
page-up: pgup,u
page-down: pgdn,d
diff:
# Puedes cambiar los archivos predeterminados que se muestran en el árbol de archivos (panel derecho). Todos los tipos de diff se muestran por defecto.
hide:
- added
- removed
- modified
- unmodified
filetree:
# El estado de colapso de directorios por defecto
collapse-dir: false
# El porcentaje del ancho de pantalla que debe ocupar el árbol de archivos en la pantalla (debe ser >0 y <1)
pane-width: 0.5
# Mostrar los atributos de archivo junto al árbol de archivos
show-attributes: true
layer:
# Activar mostrar todos los cambios desde esta capa y todas las capas anteriores
show-aggregated-changes: false
dive buscará configuraciones en las siguientes ubicaciones:
$XDG_CONFIG_HOME/dive/*.yaml$XDG_CONFIG_DIRS/dive/*.yaml~/.config/dive/*.yaml~/.dive.yamlSe puede usar .yml en lugar de .yaml si se desea.