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

Para analizar una imagen de Docker, simplemente ejecuta dive con una etiqueta/id/digest de imagen:
dive <your-image-tag>
o puedes sumergirte directamente 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>
# for example
dive nginx:latest
o si quieres construir tu imagen y luego pasar directamente a analizarla:
dive build -t <some-tag> .
Compilación en macOS (con soporte únicamente para 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 <some-tag> .
Además, puedes ejecutar esto en tu pipeline de CI para asegurarte de mantener el espacio desperdiciado al mínimo (esto omite la UI):
CI=true dive <your-image>

¡Esto es de calidad beta! No dudes en enviar un issue si quieres una nueva función o encuentras un bug :)
Muestra el contenido de la imagen Docker desglosado por capa
A medida que seleccionas una capa a la izquierda, se 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.
Indica qué ha cambiado en cada capa
Los archivos que han cambiado, se han modificado, añadido o eliminado 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 esa capa.
Estima la "eficiencia de la imagen"
El panel inferior izquierdo muestra información básica de la capa y una métrica experimental que estimará cuánto espacio desperdiciado contiene tu imagen. Esto puede deberse a la duplicación de archivos entre capas, al movimiento de archivos entre capas o a no eliminar completamente los archivos. Se proporciona tanto una "puntuación" porcentual como el espacio total de archivos desperdiciado.
Ciclos rápidos de compilación/análisis
Puedes compilar una imagen Docker y realizar un análisis inmediato con un solo comando:
dive build -t some-tag .
Solo necesitas reemplazar tu comando docker build por 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 imágenes y motores de contenedores compatibles
Con la opción --source, puedes seleccionar de dónde obtener la imagen del contenedor:
dive <your-image> --source <source>
o prefije la imagen con un esquema <source>://:
dive <source>://<your-image>
Las fuentes basadas en archivos también aceptan la forma <source>:<path> que usan otras herramientas de anchore (p. ej. dive oci-dir:./layout).
Para cualquier otra fuente, un solo dos puntos se interpreta como nombre de imagen y etiqueta, por lo que dive docker:dind analiza la
imagen docker:dind.
| Fuente | Lee la imagen desde |
|---|---|
docker | el motor de Docker (el valor predeterminado). Las imágenes que faltan localmente se descargan a través de la API de docker, con credenciales de tu configuración de docker. Se respetan DOCKER_HOST, DOCKER_CONTEXT y el contexto de docker actual |
podman | Podman. En linux se lee directamente el almacén local (no se necesita socket, véase containers-storage, y un nombre corto como myapp también encuentra el localhost/myapp de podman), recurriendo al socket de podman. En macOS se usa el socket de la API de la máquina podman en ejecución (encontrado mediante podman machine inspect); CONTAINER_HOST=unix://... lo sobrescribe, las conexiones ssh se rechazan |
docker-archive | un tarball de docker save en disco, o un archivo OCI (docker-tar es un alias) |
oci-archive | un tarball de diseño de imagen OCI en disco |
oci-dir | un directorio de diseño de imagen OCI en disco |
registry | un registro, sin un motor de contenedores (credenciales de tu configuración de docker). Se rechazan los registros en direcciones IP privadas, ya que se accedería a ellos mediante http sin cifrar |
containerd | el demonio containerd (CONTAINERD_NAMESPACE selecciona el espacio de nombres) |
containers-storage | el almacén local de podman/buildah (solo linux, véase más abajo) |
auto | detectarlo: primero archivos en disco, luego docker, podman, containerd y containers-storage, y después una descarga desde un registro. Se informa la fuente elegida, ya que una imagen que ningún motor local tiene proviene silenciosamente de un registro (Docker Hub para un nombre corto). Solo es válido para --source, no como esquema |
Para una imagen multiplataforma, --platform elige la variante a analizar (p. ej. --platform linux/arm64). Un tarball de docker save
contiene una sola plataforma; dive lo informa cuando no coincide.
El soporte de containers-storage solo se compila con la etiqueta de compilación containers_image_openpgp, que tienen las compilaciones
de la versión de linux (y la imagen de docker). Sin ella, la fuente informa que no está disponible. Para compilarlo
tú mismo: go build -tags containers_image_openpgp,exclude_graphdriver_btrfs ./cmd/dive.
Exportación JSON
--json <path> omite la interfaz y escribe el análisis en un archivo. El id de cada capa es el diff ID de la capa (el mismo valor que digestId).
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 instaló Docker mediante
apt-get, ya que podría romper su daemon de Docker existente.Véase 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