10 Punkte von GN⁺ 2024-01-09 | 1 Kommentare | Auf WhatsApp teilen

Tool zum Erkunden von Docker-Images: dive

  • Docker-Image-Analyse: Mit dem Befehl dive sowie einem Image-Tag, einer ID oder einem Digest lassen sich Docker-Images analysieren.
  • Docker-Befehle direkt verwenden: Durch Einrichten eines alias kann dive direkt als Docker-Befehl verwendet werden.
  • Build auf dem Macbook: Auf einem Macbook, das nur die Docker Container Engine unterstützt, können mit dive Images gebaut und analysiert werden.
  • Integration in CI-Pipelines: Mit der Umgebungsvariable CI=true lassen sich Images ohne UI analysieren und Platzverschwendung minimieren.

Grundfunktionen

  • Inhalte von Docker-Images pro Layer anzeigen: Die Inhalte des ausgewählten Layers und die mit den vorherigen Layern zusammengeführten Inhalte lassen sich rechts einsehen.
  • Änderungen in jedem Layer anzeigen: Im Dateibaum werden geänderte, modifizierte, hinzugefügte oder gelöschte Dateien angezeigt.
  • "Image-Effizienz" schätzen: Schätzt den im Image enthaltenen verschwendeten Speicherplatz und zeigt einen Effizienz-Score sowie verschwendeten Dateispeicher an.
  • Schneller Build-/Analyse-Zyklus: Mit dem Befehl dive build -t some-tag . kann ein Docker-Image gebaut und sofort analysiert werden.
  • Unterstützung für verschiedene Image-Quellen und Container-Engines: Mit der Option --source kann ausgewählt werden, woher Container-Images bezogen werden.

Installation

  • Ubuntu/Debian: Installation von dive mit curl und apt.
  • RHEL/Centos: Installation von dive mit curl und rpm.
  • Arch Linux: Installation über pacman möglich.
  • Mac: Homebrew oder MacPorts verwenden oder den Darwin-Build von der Release-Seite herunterladen.
  • Windows: Aktuellstes Release herunterladen.
  • Go tools: Go-Version 1.10 oder höher erforderlich, Installation mit go get.
  • Nix/NixOS: Installation mit nix-env.
  • Docker: Image mit docker pull holen und unter Einbindung der Docker-Socket-Datei ausführen.

CI-Integration

  • Umgebungsvariable CI=true setzen: Analysiert Docker-Images ohne UI und zeigt Bestehen/Fehlschlagen über den Rückgabecode an.
  • Regeln über die Datei .dive-ci festlegen: Kriterien für Bestehen/Fehlschlagen anhand von Effizienz, Menge des verschwendeten Speicherplatzes und dessen Anteil konfigurierbar.

Tastenzuweisungen

  • Über verschiedene Tastenzuweisungen lassen sich Layer- und Dateibaum-Ansicht in der UI steuern.

UI-Konfiguration

  • Über eine Konfigurationsdatei können verschiedene Optionen angepasst werden, um das Verhalten von dive zu ändern.

GN⁺-Meinung

  • Wichtigkeit: dive ist ein sehr nützliches Tool, um die Größe von Docker-Images zu optimieren und Verschwendung zu reduzieren. Das kann zur Senkung von Cloud-Infrastrukturkosten und zu effizienterem Ressourcenmanagement beitragen.
  • Interessant: Dass sich jede Ebene eines Docker-Images detailliert analysieren und Änderungen visuell nachvollziehen lassen, ist für Entwickler und Systemadministratoren besonders spannend.
  • Hilfreich: Durch die Integration von dive in CI/CD-Pipelines lassen sich kontinuierliche Qualitätskontrolle und bessere Effizienz durch automatisierte Image-Analysen fördern.

1 Kommentare

 
GN⁺ 2024-01-09
Hacker-News-Kommentare
  • Crane und die Bibliothek go-containerregistry

    • Crane ist hervorragend für die Bearbeitung von Images und Layern geeignet und basiert auf der Bibliothek go-containerregistry.
    • Man kann neue Layer hinzufügen und die Metadaten bestehender Images ändern, etwa Umgebungsvariablen, Labels und EntryPoints.
    • Es ist möglich, mehrere Layer zu einem einzelnen Layer zu „flatten“ oder ein Image zu „rebasen“ (Änderungen auf ein neues/aktualisiertes Base-Image erneut anzuwenden).
    • Alle Arbeiten erfolgen direkt in der Registry, daher ist Docker nicht erforderlich (zum Erstellen des ursprünglichen Images aber weiterhin nützlich).
    • Link zur Nutzung von Crane
  • Die Nützlichkeit von Dive

    • Dive ist sehr nützlich, um zu verstehen, wie Docker-Images funktionieren und wie man effiziente Dockerfiles schreibt.
    • Anders als beim Lesen der Dokumentation hilft es enorm beim Verständnis, die Auswirkungen von Änderungen am Dockerfile auf die resultierende Layer-Struktur zu sehen.
    • Dive ist ein unverzichtbares Werkzeug, um zu lernen und Vertrauen darin zu entwickeln, was genau man baut und deployt.
    • Es gibt auch ein weiteres Tool namens Dredge, das zum Vergleichen von Layer-Unterschieden verwendet wird.
    • Link zur Nutzung von Dredge
  • Ein verstecktes Merkmal von Dive

    • Dive ist nicht nur sehr nützlich, sein Autor ist auch ein großartiger Entwickler und die Zusammenarbeit mit ihm macht viel Freude.
  • Frage nach dem Grund für die Verwendung von GoLang

    • Neugier darauf, warum die meisten Container-/Infrastruktur-Tools in GoLang geschrieben sind.
    • Beispiele sind Docker, Podman, nerdctl, Terraform und Kubernetes.
    • Die Frage ist, ob GoLang offensichtliche Vorteile für den Bau solcher Tools bietet.
  • Die Praxistauglichkeit von Dive

    • Dive wird mehrmals im Monat verwendet und ist nützlich, wenn man prüfen möchte, ob eine bestimmte Datei in einem Layer vorhanden ist, und wenn man den Dateiinhalt ansehen möchte.
    • Derzeit wird das gelöst, indem Container ausgeführt oder Dateiinhalte extrahiert werden, um Ordner zu durchsuchen.
  • Googles Tool container-diff

    • container-diff ist nützlich, um zu prüfen, was zufällige Skripte, die man per Pipe in bash schickt, auf dem System tun würden.
  • Andere großartige TUI-Terminal-Tools

    • Neben Dive gibt es weitere großartige TUI-Terminal-Tools wie lazydocker und dry.
    • Es gibt auch Tools innerhalb der Docker-Kategorie.
    • Link zu Terminal-Tools
  • Warum Docker tar-Archive verwendet

    • Es gibt Zweifel daran, warum Docker für Layer-Inhalte tar-Archive statt normaler Verzeichnisse verwendet.
    • Das betreffende Tool löst ein Problem, das ursprünglich nicht existieren sollte.
  • Die erstaunliche Wirkung von Dive

    • Dive war schon oft eine große Hilfe und hat viel dabei geholfen, etwas über Layer zu lernen.
    • Es ist so gut, dass Docker Desktop seine Funktionalität nachahmt.