10 points par GN⁺ 2024-01-09 | 1 commentaires | Partager sur WhatsApp

Outil d’exploration d’images Docker dive

  • Analyse d’images Docker : il est possible d’analyser des images Docker avec la commande dive et un tag, un ID ou un digest d’image.
  • Utilisation directe comme commande Docker : il est possible de configurer un alias pour utiliser dive directement comme une commande Docker.
  • Build sur Macbook : sur un Macbook ne prenant en charge que le moteur de conteneurs Docker, il est possible d’utiliser dive pour construire et analyser des images.
  • Intégration au pipeline CI : en définissant la variable d’environnement CI=true, il est possible d’analyser des images sans UI et de minimiser l’espace gaspillé.

Fonctionnalités de base

  • Affichage du contenu des images Docker par couche : le contenu de la couche sélectionnée et le contenu combiné des couches précédentes peuvent être consultés à droite.
  • Affichage des changements dans chaque couche : l’arborescence de fichiers indique les fichiers modifiés, mis à jour, ajoutés ou supprimés.
  • Estimation de l’« efficacité de l’image » : estime la quantité d’espace gaspillé contenue dans l’image et fournit un score d’efficacité ainsi que l’espace disque gaspillé par les fichiers.
  • Cycle rapide de build/analyse : la commande dive build -t some-tag . permet de construire une image Docker puis de l’analyser immédiatement.
  • Prise en charge de diverses sources d’images et de moteurs de conteneurs : l’option --source permet de choisir d’où récupérer l’image de conteneur.

Méthodes d’installation

  • Ubuntu/Debian : installation de dive avec curl et apt.
  • RHEL/Centos : installation de dive avec curl et rpm.
  • Arch Linux : installation via pacman.
  • Mac : utilisation de Homebrew ou MacPorts, ou téléchargement d’un build Darwin depuis la page des releases.
  • Windows : téléchargement de la dernière release.
  • Go tools : nécessite Go 1.10 ou supérieur, installation avec go get.
  • Nix/NixOS : utilisation de nix-env pour l’installation.
  • Docker : récupération de l’image avec docker pull, puis exécution en incluant le fichier socket Docker.

Intégration CI

  • Définir la variable d’environnement CI=true : analyse d’images Docker sans UI et indication de réussite/échec via le code de retour.
  • Définir des règles via le fichier .dive-ci : permet de fixer des critères de réussite/échec selon l’efficacité, la quantité d’espace gaspillé et son ratio.

Raccourcis clavier

  • Divers raccourcis clavier permettent de manipuler les vues des couches et de l’arborescence de fichiers dans l’UI.

Configuration de l’UI

  • Il est possible de personnaliser diverses options via un fichier de configuration afin de modifier le comportement de dive.

Avis de GN⁺

  • Importance : dive est un outil très utile pour optimiser la taille des images Docker et réduire le gaspillage. Cela peut contribuer à diminuer les coûts d’infrastructure cloud et à améliorer la gestion efficace des ressources.
  • Intérêt : la possibilité d’analyser en détail chaque couche d’une image Docker et de visualiser les changements est une fonctionnalité particulièrement intéressante pour les développeurs et les administrateurs système.
  • Utilité : l’intégration de dive dans un pipeline CI/CD permet d’améliorer en continu la qualité et l’efficacité grâce à une analyse automatisée des images.

1 commentaires

 
GN⁺ 2024-01-09
Avis Hacker News
  • Crane et la bibliothèque go-containerregistry

    • Crane est excellent pour manipuler des images et des couches, et il s’appuie sur la bibliothèque go-containerregistry.
    • Il permet d’ajouter de nouvelles couches et de modifier les métadonnées d’une image existante (variables d’environnement, labels, point d’entrée, etc.).
    • Il permet d’"aplatir" plusieurs couches en une seule, ou de "rebaser" une image (réappliquer les modifications sur une image de base nouvelle ou mise à jour).
    • Toutes les opérations se font directement dans le registre, donc Docker n’est pas nécessaire (même s’il reste utile pour créer l’image d’origine).
    • Lien vers l’utilisation de Crane
  • L’utilité de Dive

    • Dive est très utile pour comprendre comment fonctionnent les images Docker et comment écrire efficacement un Dockerfile.
    • Contrairement à la simple lecture de la documentation, voir l’impact d’une modification du Dockerfile sur la structure finale des couches aide énormément à comprendre.
    • Dive est un outil essentiel pour apprendre et pour gagner en confiance sur ce que l’on construit et déploie exactement.
    • Il existe aussi un autre outil appelé Dredge, utilisé pour comparer les différences entre les couches.
    • Lien vers l’utilisation de Dredge
  • Une caractéristique cachée de Dive

    • Dive n’est pas seulement très utile, son auteur est aussi un excellent développeur et il est très agréable de travailler avec lui.
  • Question sur l’usage de GoLang

    • Interrogation sur la raison pour laquelle la plupart des outils de conteneurs et d’infrastructure sont écrits en GoLang.
    • Exemples : Docker, Podman, nerdctl, Terraform, Kubernetes, etc.
    • Question sur le fait que GoLang offre ou non des avantages évidents pour construire ce type d’outils.
  • Le côté pratique de Dive

    • Dive est utilisé plusieurs fois par mois, et il est pratique lorsqu’on veut vérifier si un fichier existe dans une couche donnée et en inspecter le contenu.
    • Actuellement, cela se fait en lançant le conteneur ou en extrayant le contenu des fichiers pour parcourir les dossiers.
  • L’outil container-diff de Google

    • container-diff est utile pour vérifier ce que va faire au système un script aléatoire que l’on envoie dans bash via un pipe.
  • D’autres excellents outils TUI pour le terminal

    • En plus de Dive, il existe d’excellents outils TUI pour le terminal comme lazydocker et dry.
    • Il existe aussi des outils dans la catégorie Docker.
    • Lien vers les outils terminal
  • Pourquoi Docker utilise des archives tar

    • Question sur la raison pour laquelle Docker utilise des archives tar plutôt que des répertoires ordinaires pour le contenu des couches.
    • Cet outil résout un problème qui n’aurait peut-être pas dû exister au départ.
  • L’effet remarquable de Dive

    • Dive a rendu de grands services à plusieurs reprises et permet d’apprendre énormément sur les couches.
    • Il est si bon que Docker Desktop en a imité les fonctionnalités.