10 puntos por GN⁺ 2024-01-09 | 1 comentarios | Compartir por WhatsApp

Herramienta de exploración de imágenes Docker: dive

  • Análisis de imágenes Docker: permite analizar imágenes Docker usando el comando dive junto con una etiqueta, ID o digest de imagen.
  • Uso directo como comando de Docker: se puede configurar un alias para usar dive directamente como si fuera un comando de Docker.
  • Compilación en Macbook: en Macbook que solo soportan Docker Container Engine, se pueden compilar y analizar imágenes usando dive.
  • Integración con pipelines de CI: al configurar la variable de entorno CI=true, es posible analizar imágenes sin UI y minimizar el desperdicio de espacio.

Funciones básicas

  • Mostrar el contenido de la imagen Docker por capa: permite ver a la derecha el contenido de la capa seleccionada y el contenido combinado con las capas anteriores.
  • Mostrar los cambios realizados en cada capa: en el árbol de archivos se muestran los archivos modificados, cambiados, agregados o eliminados.
  • Estimación de la "eficiencia de la imagen": estima la cantidad de espacio desperdiciado incluido en la imagen y muestra una puntuación de eficiencia junto con el espacio desperdiciado por archivos.
  • Ciclo rápido de compilación/análisis: con el comando dive build -t some-tag . se puede compilar una imagen Docker y analizarla de inmediato.
  • Soporte para diversas fuentes de imágenes y motores de contenedores: con la opción --source se puede elegir desde dónde obtener la imagen de contenedor.

Cómo instalarlo

  • Ubuntu/Debian: instalar dive usando curl y apt.
  • RHEL/Centos: instalar dive usando curl y rpm.
  • Arch Linux: se puede instalar mediante pacman.
  • Mac: usar Homebrew o MacPorts, o descargar la compilación de Darwin desde la página de lanzamientos.
  • Windows: descargar la versión más reciente.
  • Go tools: requiere Go 1.10 o superior; se instala con go get.
  • Nix/NixOS: usar nix-env para instalarlo.
  • Docker: obtener la imagen con docker pull y ejecutarla incluyendo el archivo del socket de Docker.

Integración con CI

  • Configurar la variable de entorno CI=true: analiza imágenes Docker sin UI y devuelve el resultado de aprobación/fallo mediante el código de retorno.
  • Configurar reglas mediante el archivo .dive-ci: permite definir criterios de aprobación/fallo según la eficiencia, la cantidad de espacio desperdiciado y su proporción.

Asignación de teclas

  • Es posible manipular las vistas de capas y del árbol de archivos dentro de la UI mediante varias combinaciones de teclas.

Configuración de la UI

  • Mediante el archivo de configuración se pueden personalizar varias opciones para cambiar el comportamiento de dive.

Opinión de GN⁺

  • Importancia: dive es una herramienta muy útil para optimizar el tamaño de las imágenes Docker y reducir el desperdicio. Esto puede contribuir a bajar costos de infraestructura en la nube y a una gestión más eficiente de los recursos.
  • Interés: la posibilidad de analizar en detalle cada capa de una imagen Docker y revisar visualmente los cambios resulta muy interesante para desarrolladores y administradores de sistemas.
  • Utilidad: al integrar dive en un pipeline de CI/CD, se puede impulsar un control continuo de calidad y mejoras de eficiencia mediante el análisis automatizado de imágenes.

1 comentarios

 
GN⁺ 2024-01-09
Opiniones en Hacker News
  • Crane y la biblioteca go-containerregistry

    • Crane es excelente para manipular imágenes y capas, y está basado en la biblioteca go-containerregistry.
    • Permite agregar capas nuevas y modificar los metadatos de una imagen existente (variables de entorno, etiquetas, entrypoint, etc.).
    • Puede "aplanar" múltiples capas en una sola capa, o hacer "rebase" de una imagen (reaplicar cambios sobre una imagen base nueva/actualizada).
    • Todo se hace directamente en el registro, así que no se necesita Docker (aunque sigue siendo útil al crear la imagen original).
    • Enlace de uso de Crane
  • La utilidad de Dive

    • Dive es muy útil para entender cómo funcionan las imágenes de Docker y cómo escribir Dockerfiles eficientes.
    • A diferencia de solo leer la documentación, ver cómo los cambios en el Dockerfile afectan la estructura resultante de capas ayuda muchísimo a comprenderlo.
    • Dive es una herramienta esencial para aprender y para desarrollar confianza sobre qué es exactamente lo que se está construyendo/desplegando.
    • También existe otra herramienta llamada Dredge que se usa para comparar diferencias entre capas.
    • Enlace de uso de Dredge
  • Una característica oculta de Dive

    • Dive no solo es muy útil, sino que su autor es un gran desarrollador y es muy agradable trabajar con él.
  • Pregunta sobre por qué usar GoLang

    • Curiosidad sobre por qué la mayoría de las herramientas de contenedores/infraestructura están escritas en GoLang.
    • Ejemplos como Docker, Podman, nerdctl, Terraform y Kubernetes.
    • Pregunta sobre si GoLang ofrece ventajas evidentes para construir este tipo de herramientas.
  • La practicidad de Dive

    • Usa Dive varias veces al mes, y le resulta útil cuando quiere verificar si cierto archivo existe en una capa y revisar su contenido.
    • Actualmente lo resuelve ejecutando el contenedor o extrayendo el contenido de los archivos para explorar la carpeta.
  • La herramienta container-diff de Google

    • container-diff es útil para revisar scripts aleatorios que se envían por bash y ver qué harán en el sistema.
  • Otras excelentes herramientas TUI de terminal

    • Además de Dive, también hay excelentes herramientas TUI de terminal como lazydocker y dry.
    • También hay herramientas dentro de la categoría de Docker.
    • Enlace de herramientas de terminal
  • Por qué Docker usa archivos tar

    • Duda sobre por qué Docker usa archivos tar para el contenido de las capas en lugar de directorios normales.
    • Esa herramienta resuelve un problema que originalmente no debería existir.
  • El efecto sorprendente de Dive

    • Dive ha sido de gran ayuda muchas veces y le ha permitido aprender mucho sobre las capas.
    • Es tan bueno que Docker Desktop terminó imitando su funcionalidad.