Marcio Cunha

Cómo inspeccionar capas y tamaño de imágenes Docker con dive

Aprende a usar la herramienta dive para inspeccionar capas de imágenes Docker, identificar desperdicios ocultos de espacio y optimizar tus builds con precisión.

Marcio Cunha•5 min
También disponible en:PortuguêsEnglish
Resumen
  • Las imágenes de Docker se componen de capas apiladas que acumulan datos temporales residuales cuando se gestionan mal
  • La utilidad dive permite navegar visualmente por el árbol de archivos de cada capa individual de un contenedor
  • Eliminar archivos temporales en la misma instrucción RUN evita que la basura persista en la capa final
  • El análisis detallado de eficiencia ayuda a reducir drásticamente los tiempos de descarga y el consumo de almacenamiento
  • Combinar buenas prácticas de construcción y limpieza temprana acelera considerablemente el flujo de entrega de software

Por qué importa tanto el tamaño de las imágenes de Docker en la práctica

Cuando construimos aplicaciones empaquetadas en contenedores, que son entornos aislados que ejecutan software con todo lo necesario, rara vez miramos dentro de la caja. El proceso de creación sigue pasos secuenciales donde cada instrucción añade una nueva capa de archivos sobre la anterior. En la práctica, esto significa que si descargas un paquete gigante en una línea y lo borras en la siguiente, el archivo sigue existiendo oculto en las entrañas del historial, pesando en el resultado final que se envía al servidor.

Esta dinámica suele generar sorpresas desagradables al subir sistemas a la nube o intentar acelerar los canales de entrega continua. Para resolver problemas crónicos de almacenamiento, vale la pena consultar nuestra guía sobre cómo liberar espacio en disco en Docker vía CLI, pero prevenir el desperdicio desde el origen de la construcción es siempre la mejor estrategia.

Qué es dive y cómo revela los secretos de Docker

dive es una herramienta de código abierto desarrollada específicamente para explorar imágenes de Docker, sus capas y el contenido de cada una de forma interactiva. En lugar de adivinar por qué una imagen engordó repentinamente a gigabytes, el programa muestra una interfaz dividida en dos columnas: a la izquierda navegas por las capas cronológicas y a la derecha ves las modificaciones exactas del sistema de archivos en ese paso preciso.

Cuando ejecutas el comando de inspección, el programa calcula una puntuación estimada de eficiencia, mostrando si hay archivos duplicados, elementos modificados o acumulación inútil en el camino. Esta transparencia radical cambia la forma en que escribimos instrucciones de construcción, permitiendo corregir ineficiencias antes de que lleguen a producción y causen cuellos de botella operativos complejos.

Cómo instalar y empezar a usar dive en tu ordenador

La instalación de la utilidad es bastante sencilla y se puede realizar mediante administradores de paquetes tradicionales en Linux, macOS o herramientas universales de línea de comandos. Si usas distribuciones basadas en Debian o Ubuntu, puedes descargar el paquete binario directamente desde el repositorio oficial de GitHub o instalarlo vía Homebrew en entornos Apple Silicon.

Para empezar a trabajar de inmediato sin instalar paquetes locales permanentes, puedes ejecutar el inspector encapsulado dentro de un contenedor temporal apuntando al socket del demonio local. En la práctica, esto significa ejecutar una instrucción directa en tu terminal que descarga y ejecuta la herramienta analizando la imagen deseada de forma totalmente aislada y segura.

docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest mi-proyecto:latest

Este comando monta el canal de comunicación de Docker de tu máquina dentro del contenedor del inspector, permitiéndole leer metadatos locales sin complicaciones. Una vez que la interfaz cargue, verás el resumen estadístico arriba, la lista de capas en el panel izquierdo y los archivos modificados en el panel derecho.

Navegando por la interfaz e identificando desperdicio de espacio

Una vez abierta la interfaz interactiva, la navegación fluye de manera intuitiva usando las flechas del teclado y teclas de acceso rápido. La columna izquierda muestra cada comando ejecutado en el archivo de configuración original, como la copia de códigos fuente o la instalación de dependencias del sistema operativo. Al seleccionar una capa específica, el panel derecho revela en verde los archivos añadidos, en rojo los eliminados y en amarillo los modificados.

Uno de los mayores culpables descubiertos por esta inspección visual son los archivos temporales de caché de administradores de paquetes descargados para instalar una biblioteca pero nunca borrados en la misma línea de comandos. Dado que el sistema de archivos por capas es inmutable, borrar un archivo en una capa posterior simplemente crea una nueva instrucción de eliminación sin recuperar el espacio físico de la capa anterior. Detectar este comportamiento es el primer paso para reescribir instrucciones correctamente.

Cómo optimizar tus instrucciones de construcción en la práctica

Tras identificar los puntos críticos de acumulación mediante inspección visual, los ajustes exigen cambios estructurales en la forma en que escribimos las instrucciones de construcción de paquetes. En lugar de repartir actualizaciones de repositorios, instalación de herramientas y limpieza en líneas separadas, debemos agrupar todo en una única instrucción encadenada usando operadores lógicos como el doble ampersand.

En la práctica, esto garantiza que la eliminación de caché ocurra en el mismo contexto físico donde se generó el archivo temporal, evitando que el peso muerto se guarde en el resultado definitivo. Para profundizar en tus estrategias de mejora continua en la integración continua, vale la pena consultar también las recomendaciones sobre cómo usar caché remoto en CI/CD para acelerar builds lentos.

A continuación se muestra un ejemplo clásico de instrucción optimizada que instala dependencias y limpia archivos residuales en un solo bloque continuo:

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y \
    curl \
    git \
    && rm -rf /var/lib/apt/lists/*

Este enfoque ligero reduce drásticamente el volumen total transferido por la red, ahorrando ancho de banda y espacio en disco en los registros, además de acelerar el ciclo de despliegue de nuevas versiones. Para profundizar en estos conceptos arquitectónicos en producción, consulte también nuestro análisis técnico sobre ¿Build corrupto? Cómo limpiar el caché de Maven en terminal.

Consideraciones finales sobre auditoría de contenedores

Mantener un control riguroso sobre el tamaño de las imágenes de Docker dejó de ser un capricho estético para convertirse en un requisito fundamental de eficiencia operativa y seguridad en la ingeniería moderna. Herramientas visuales como dive transforman una caja negra opaca en un ecosistema transparente donde cada megabyte puede ser auditado y justificado con absoluta claridad. Al adoptar el hábito de inspeccionar regularmente tus paquetes antes de enviarlos a producción, tu equipo gana agilidad, reduce costos de infraestructura y construye sistemas mucho más limpios.