Wie man den docker scout compare-Befehl verwendet, um Image-Unterschiede zu analysieren

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie den Befehl docker scout compare effektiv nutzen können, um die Unterschiede zwischen zwei Docker-Images zu analysieren. Dieser Prozess ist von entscheidender Bedeutung, um die Änderungen bei Sicherheitslücken, Paketen und anderen Image-Komponenten zwischen verschiedenen Versionen oder Builds zu verstehen.

Durch praktische Übungen werden Sie die Vergleichsmöglichkeiten von Images mit Standard-Einstellungen erkunden, die Ignorierung von Sicherheitslücken in Basis-Images, die Filterung der Ergebnisse nach Schweregrad und Pakettyp sowie die Generierung eines Markdown-Berichts über die Vergleichsergebnisse. Am Ende dieses Labs können Sie den Befehl docker scout compare beherrschen, um wertvolle Einblicke in die Sicherheit und Zusammensetzung Ihrer Container-Images zu erhalten.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/ls -.-> lab-555200{{"Wie man den docker scout compare-Befehl verwendet, um Image-Unterschiede zu analysieren"}} docker/pull -.-> lab-555200{{"Wie man den docker scout compare-Befehl verwendet, um Image-Unterschiede zu analysieren"}} docker/images -.-> lab-555200{{"Wie man den docker scout compare-Befehl verwendet, um Image-Unterschiede zu analysieren"}} docker/build -.-> lab-555200{{"Wie man den docker scout compare-Befehl verwendet, um Image-Unterschiede zu analysieren"}} end

Vergleich von zwei Images mit Standard-Einstellungen

In diesem Schritt lernen Sie, wie Sie zwei Docker-Images mithilfe eines Tools zur Sicherheitslücken-Scans vergleichen können. Der Vergleich von Images ist von entscheidender Bedeutung, um Sicherheitsrisiken zu identifizieren und die Unterschiede zwischen verschiedenen Versionen oder Builds Ihrer Container-Images zu verstehen. Wir werden für diesen Zweck ein Tool namens trivy verwenden. trivy ist ein einfacher und umfassender Scanner für Sicherheitslücken in Containern und anderen Artefakten.

Zunächst installieren wir trivy. Da trivy in der LabEx-Umgebung nicht vorinstalliert ist, müssen Sie es herunterladen und installieren.

sudo apt-get update
sudo apt-get install -y wget apt-transport-https gnupg lsb-release
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo "deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) stable main" | sudo tee /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install -y trivy

Die obigen Befehle aktualisieren zunächst die Paketliste und installieren dann die erforderlichen Abhängigkeiten für die Hinzufügung eines neuen Repositorys. Danach wird der öffentliche Schlüssel für das trivy-Repository heruntergeladen und Ihrem System als vertrauenswürdiger Schlüssel hinzugefügt. Schließlich wird das trivy-Repository zu Ihrer Quellenliste hinzugefügt, die Paketliste erneut aktualisiert und trivy installiert.

Nachdem trivy installiert ist, laden wir die Docker-Images herunter, die wir vergleichen möchten. Wir werden zwei verschiedene Versionen des ubuntu-Images vergleichen: ubuntu:20.04 und ubuntu:22.04.

docker pull ubuntu:20.04
docker pull ubuntu:22.04

Diese Befehle laden die angegebenen ubuntu-Image-Versionen von Docker Hub herunter. Sie sollten eine Ausgabe sehen, die den Downloadfortschritt und das erfolgreiche Herunterladen der Images anzeigt.

Jetzt können wir trivy verwenden, um diese beiden Images zu vergleichen. Der grundlegende Befehl zum Vergleich von zwei Images lautet trivy image --diff-image [image1] [image2].

trivy image --diff-image ubuntu:20.04 ubuntu:22.04

Dieser Befehl analysiert sowohl ubuntu:20.04 als auch ubuntu:22.04 und meldet die Unterschiede in den gefundenen Sicherheitslücken zwischen den beiden Images. Die Ausgabe zeigt Sicherheitslücken, die in einem Image vorhanden sind, aber nicht im anderen, oder Sicherheitslücken mit unterschiedlichem Schweregrad. Dies hilft Ihnen zu verstehen, wie ein Upgrade oder eine Änderung der Image-Versionen Ihre Sicherheitslage beeinflussen könnte.

Die Ausgabe listet die Sicherheitslücken nach Schweregrad kategorisiert auf (UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL). Sie zeigt die Sicherheitslücken, die im zweiten Image (ubuntu:22.04 in diesem Fall) im Vergleich zum ersten (ubuntu:20.04) hinzugefügt wurden, sowie diejenigen, die entfernt wurden.

Vergleich von Images und Ignorieren von Sicherheitslücken in Basis-Images

Im vorherigen Schritt haben wir zwei ubuntu-Images verglichen und die Unterschiede in den Sicherheitslücken gesehen. Manchmal interessieren Sie sich beim Vergleich von Images möglicherweise eher für die Sicherheitslücken, die durch Ihren Anwendungscode oder die Abhängigkeiten eingeführt wurden, als für diejenigen, die vom Basis-Image geerbt wurden. trivy ermöglicht es Ihnen, Sicherheitslücken zu ignorieren, die in einem angegebenen Basis-Image vorhanden sind.

Um dies zu demonstrieren, erstellen wir zunächst eine einfache Dockerfile, die ubuntu:20.04 als Basis-Image verwendet und eine einfache Datei hinzufügt.

Navigieren Sie in Ihr Projektverzeichnis:

cd ~/project

Erstellen Sie eine Datei namens Dockerfile mit nano:

nano Dockerfile

Fügen Sie den folgenden Inhalt in die Dockerfile ein:

FROM ubuntu:20.04
RUN echo "This is a test file" >/app/test.txt

Speichern Sie die Datei und verlassen Sie nano (Strg+X, Y, Eingabe).

Diese Dockerfile ist sehr einfach. Sie beginnt mit dem ubuntu:20.04-Image und führt dann einen Befehl aus, um eine Datei namens test.txt in einem /app-Verzeichnis zu erstellen.

Jetzt bauen wir ein Docker-Image aus dieser Dockerfile. Wir werden es mit my-ubuntu-app:latest taggen.

docker build -t my-ubuntu-app:latest .

Der docker build-Befehl baut ein Image aus einer Dockerfile. Die Option -t my-ubuntu-app:latest taggt das Image mit dem Namen my-ubuntu-app und dem Tag latest. Der Punkt am Ende gibt an, dass sich die Dockerfile im aktuellen Verzeichnis befindet. Sie sollten eine Ausgabe sehen, die den Build-Prozess und die erfolgreiche Erstellung des Images anzeigt.

Jetzt haben wir zwei Images: ubuntu:20.04 (das Basis-Image) und my-ubuntu-app:latest (das auf dem Basis-Image aufgebaute Image). Wir können my-ubuntu-app:latest mit ubuntu:20.04 vergleichen und die Sicherheitslücken ignorieren, die bereits in ubuntu:20.04 vorhanden sind. Dies zeigt uns nur die Sicherheitslücken, die durch die Änderungen in unserer Dockerfile eingeführt wurden.

Wir verwenden die Option --ignore-base mit dem trivy image-Befehl, um dies zu erreichen.

trivy image --ignore-base --diff-image ubuntu:20.04 my-ubuntu-app:latest

Dieser Befehl vergleicht my-ubuntu-app:latest mit ubuntu:20.04, berichtet aber nur über Sicherheitslücken, die in my-ubuntu-app:latest vorhanden sind und nicht in ubuntu:20.04. Da unsere Dockerfile nur eine einfache Datei hinzugefügt und keine neuen Pakete installiert hat, sollten Sie im Vergleich zur Ausgabe des vorherigen Schritts nur sehr wenige oder keine neuen Sicherheitslücken gemeldet bekommen. Dies zeigt, wie --ignore-base hilft, sich auf die Sicherheitsauswirkungen Ihrer Anwendungsschicht zu konzentrieren.

Vergleich von Images und Filtern nach Schweregrad und Pakettyp

In den vorherigen Schritten haben wir grundlegende Image-Vergleiche durchgeführt. Allerdings kann die Ausgabe manchmal sehr detailliert sein, insbesondere für Images mit vielen Sicherheitslücken. trivy ermöglicht es Ihnen, die Ergebnisse basierend auf dem Schweregrad und dem Pakettyp zu filtern, was Ihnen hilft, sich auf die kritischsten Probleme oder bestimmte Arten von Sicherheitslücken zu konzentrieren.

Vergleichen wir erneut ubuntu:20.04 und ubuntu:22.04, aber diesmal filtern wir die Ergebnisse, um nur Sicherheitslücken mit einem Schweregrad von HIGH oder CRITICAL anzuzeigen. Dies ist nützlich, wenn Sie die Behebung der schwerwiegendsten Sicherheitslücken priorisieren möchten.

Wir verwenden die Option --severity, um den Mindest-Schweregrad für die Berichterstattung anzugeben. Sie können eine durch Kommas getrennte Liste von Schweregraden angeben.

trivy image --diff-image ubuntu:20.04 ubuntu:22.04 --severity HIGH,CRITICAL

Dieser Befehl vergleicht die beiden ubuntu-Images und zeigt nur Sicherheitslücken an, die in einem der beiden Images als HIGH oder CRITICAL klassifiziert sind. Sie werden feststellen, dass die Ausgabe viel kürzer ist als beim Standard-Vergleich, da Sicherheitslücken mit niedrigeren Schweregraden (UNKNOWN, LOW, MEDIUM) ausgeschlossen werden.

Neben dem Filtern nach Schweregrad können Sie auch nach dem Typ des Pakets filtern, in dem die Sicherheitslücke gefunden wurde. trivy kann nach Sicherheitslücken in Betriebssystem-Paketen (wie die, die über apt, yum usw. installiert wurden) und Anwendungsabhängigkeiten (wie Bibliotheken, die von Ihrem Code verwendet werden) suchen.

Vergleichen wir die Images erneut, aber diesmal suchen wir nur nach Sicherheitslücken in Betriebssystem-Paketen. Wir verwenden dafür die Option --vuln-type.

trivy image --diff-image ubuntu:20.04 ubuntu:22.04 --vuln-type os

Dieser Befehl vergleicht die beiden Images und meldet nur Sicherheitslücken, die in den Betriebssystem-Paketen gefunden wurden. Dies ist hilfreich, wenn Sie sich hauptsächlich um die Sicherheit der Basis-Betriebssystem-Schicht Ihres Images kümmern.

Sie können diese Filter auch kombinieren. Beispielsweise, um nur HIGH- oder CRITICAL-Sicherheitslücken in Betriebssystem-Paketen anzuzeigen:

trivy image --diff-image ubuntu:20.04 ubuntu:22.04 --severity HIGH,CRITICAL --vuln-type os

Dieser Befehl bietet eine fokussiertere Ansicht der schwerwiegendsten Sicherheitslücken innerhalb der Betriebssystem-Schicht Ihrer Images. Das Filtern hilft Ihnen, die Ausgabe zu verwalten und Ihre Sicherheitsbemühungen effektiv zu priorisieren.

Vergleich von Images und Generierung eines Markdown-Berichts

In den vorherigen Schritten haben wir die Ergebnisse des Sicherheitslücken-Vergleichs direkt im Terminal angesehen. Dies ist zwar für schnelle Überprüfungen nützlich, aber oft müssen Sie die Ergebnisse in einem strukturierten Format speichern, um Berichte zu erstellen, Dokumentationen anzulegen oder weitere Analysen durchzuführen. trivy unterstützt verschiedene Ausgabeformate, darunter Markdown.

Die Generierung eines Markdown-Berichts ist nützlich, da Markdown eine leichte Auszeichnungssprache ist, die einfach zu lesen ist und leicht in andere Formate wie HTML oder PDF konvertiert werden kann.

Um einen Markdown-Bericht des Image-Vergleichs zu generieren, verwenden wir die Option --format und geben markdown an. Wir leiten außerdem die Ausgabe mit dem >-Operator in eine Datei um.

Vergleichen wir erneut ubuntu:20.04 und ubuntu:22.04 und speichern die Ausgabe in einer Markdown-Datei namens comparison_report.md in Ihrem ~/project-Verzeichnis.

trivy image --diff-image ubuntu:20.04 ubuntu:22.04 --format markdown > ~/project/comparison_report.md

Dieser Befehl führt den gleichen Vergleich wie im ersten Schritt durch, formatiert aber die Ausgabe als Markdown und speichert sie in der angegebenen Datei. Sie sehen diesmal die Ausgabe nicht direkt im Terminal.

Nachdem der Befehl abgeschlossen ist, können Sie die generierte Markdown-Datei mit cat oder nano anzeigen.

cat ~/project/comparison_report.md

Dieser Befehl zeigt den Inhalt der comparison_report.md-Datei in Ihrem Terminal an. Sie sollten die Ergebnisse des Sicherheitslücken-Vergleichs in Markdown-Syntax sehen, einschließlich Überschriften, Listen und Tabellen.

Sie können die Datei auch mit nano öffnen, um sie in einem Texteditor anzuzeigen:

nano ~/project/comparison_report_markdown.md

Denken Sie daran, nano nach dem Anzeigen der Datei zu beenden (Strg+X).

Die Generierung von Berichten in verschiedenen Formaten wie Markdown ermöglicht es Ihnen, die Informationen über Sicherheitslücken leicht mit anderen zu teilen oder in Ihre bestehenden Berichtswerkflüsse zu integrieren. Dies ist ein entscheidender Schritt bei der Einbindung von Sicherheits-Scans in Ihre Entwicklungs- und Deployments-Pipelines.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie das trivy-Tool verwenden können, um zwei Docker-Images zu vergleichen. Sie haben begonnen, indem Sie trivy in der LabEx-Umgebung installiert haben. Dies beinhaltete das Hinzufügen des trivy-Repositorys und die Installation des Pakets mit apt. Nach der Installation haben Sie zwei verschiedene Versionen des ubuntu-Images, ubuntu:20.04 und ubuntu:22.04, von Docker Hub gezogen. Schließlich haben Sie den grundlegenden trivy image --diff-image-Befehl ausgeführt, um diese beiden Images zu vergleichen und die Unterschiede in ihren Sicherheitslücken und Paketen zu analysieren.