Sobre el proyecto

dive es una herramienta de línea de comandos para explorar una imagen Docker/OCI, inspeccionar el contenido de cada capa y descubrir formas de reducir el tamaño de la imagen. Está escrita en Go y se distribuye bajo la licencia MIT. ## Uso básico Analiza una imagen existente por etiqueta, ID o digest: ```bash dive <your-image-tag> ``` También se puede ejecutar directamente a través de Docker montando el socket de Docker: ```bash alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive" dive nginx:latest ``` Las imágenes se pueden construir y luego analizar inmediatamente en un solo paso: ```bash dive build -t <some-tag> . ``` ## Características básicas - **Contenido de la imagen capa por capa**: Selecciona una capa a la izquierda para ver el contenido combinado de esa capa y todas las anteriores a la derecha. El árbol de archivos se puede navegar con las teclas de flecha. - **Indicadores de cambios por capa**: Los archivos añadidos, modificados o eliminados se resaltan en el árbol de archivos. La vista se puede cambiar entre los cambios de una capa específica o los cambios agregados hasta la capa seleccionada. - **Estimación de eficiencia de la imagen**: El panel inferior izquierdo muestra información básica de las capas y una métrica experimental que estima el espacio desperdiciado, como archivos duplicados entre capas, archivos movidos o archivos eliminados de forma incompleta. Se proporcionan tanto una puntuación porcentual como el espacio total desperdiciado. - **Ciclos rápidos de construcción/análisis**: Reemplaza `docker build` por `dive build` para analizar la imagen inmediatamente después de construirla. - **Integración con CI**: Con `CI=true` definido en el entorno, se omite la interfaz y la imagen se analiza con un resultado de aprobado/fallido basado en reglas. - **Múltiples fuentes de imágenes**: La opción `--source` selecciona de dónde obtener la imagen. Las fuentes compatibles incluyen `docker` (predeterminada), `docker-archive` (un archivo tar de Docker desde el disco) y `podman` (solo Linux). ## Integración con CI Ejecutar dive con `CI=true` omite la interfaz interactiva y devuelve una indicación de aprobado/fallido mediante el código de salida. Un archivo `.dive-ci` en la raíz del repositorio puede definir reglas: ```yaml rules: # Falla si la eficiencia es inferior a X%, expresada como una proporción entre 0-1. lowestEfficiency: 0.95 # Falla si el espacio desperdiciado es al menos X o mayor, expresado en B, KB, MB, GB. highestWastedBytes: 20MB # Falla si el espacio desperdiciado constituye X% o más de la imagen, expresado como una proporción entre 0-1. # La capa de la imagen base no se incluye en el tamaño total de la imagen. highestUserWastedPercent: 0.20 ``` La ruta de configuración de CI se puede sobrescribir con `--ci-config`. ## Instalación Se documentan varios métodos de instalación: - **Ubuntu/Debian**: descarga la versión `.deb` e instálala con `apt`. - **Snap**: `snap install dive`, con conexiones a los ejecutables y al daemon de Docker. El README advierte que el método Snap no se recomienda cuando Docker se instaló mediante `apt-get`. - **RHEL/CentOS**: descarga la versión `.rpm` e instálala con `rpm -i`. - **Arch Linux**: disponible en el repositorio extra, instálalo con `pacman -S dive`. - **macOS**: disponible mediante Homebrew (`brew install dive`) o MacPorts (`sudo port install dive`), o mediante la compilación de la versión para Darwin. - **Windows**: disponible mediante Chocolatey (`choco install dive`), Scoop (`scoop install main/dive`), winget (`winget install --id wagoodman.dive`), o la compilación de la versión para Windows. - **Herramientas de Go**: `go install github.com/wagoodman/dive@latest` (requiere Go 1.10 o superior; la salida de la versión puede no ser precisa cuando se instala de esta forma). - **Nix/NixOS**: `nix-env -iA nixos.dive` o `nix-env -iA nixpkgs.dive`. - **Imagen de Docker**: descarga `docker.io/wagoodman/dive` o `ghcr.io/wagoodman/dive` y monta el socket de Docker al ejecutarla. Para runtimes alternativos como Colima, puede ser necesario establecer el host de Docker, por ejemplo: ```bash export DOCKER_HOST=$(docker context inspect -f '{{ .Endpoints.docker.Host }}') ``` ## Atajos de teclado La interfaz interactiva incluye atajos de teclado para salir, cambiar entre las vistas de capas y árbol de archivos, filtrar archivos, desplazarse, contraer directorios y alternar la visibilidad de archivos añadidos/eliminados/modificados/no modificados. Los atajos comunes incluyen Tab para cambiar de vista, Ctrl+F para filtrar archivos, Espacio para contraer/expandir un directorio, y Ctrl+A/Ctrl+R/Ctrl+M/Ctrl+U para mostrar u ocultar tipos de cambios de archivos. ## Configuración No se requiere configuración, pero un archivo de configuración YAML puede sobrescribir los valores predeterminados. Los ajustes de ejemplo incluyen el motor de contenedores (`docker` o `podman`), el manejo de errores, el registro, los atajos de teclado, los valores predeterminados de la vista de diferencias, el comportamiento del árbol de archivos como el estado de contracción y el ancho del panel, y los valores predeterminados de agregación de la vista de capas. dive busca configuraciones en `$XDG_CONFIG_HOME/dive/*.yaml`, `$XDG_CONFIG_DIRS/dive/*.yaml`, `~/.config/dive/*.yaml` y `~/.dive.yaml`; también se acepta `.yml`.