Comment utiliser la commande docker scout compare pour analyser les différences entre les images

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à utiliser efficacement la commande docker scout compare pour analyser les différences entre deux images Docker. Ce processus est essentiel pour comprendre les changements en matière de vulnérabilités, de packages et d'autres composants d'image entre différentes versions ou builds.

Grâce à des exercices pratiques, vous explorerez la comparaison d'images avec les paramètres par défaut, l'ignorance des vulnérabilités de l'image de base, le filtrage des résultats par gravité et par type de package, et la génération d'un rapport au format markdown des résultats de la comparaison. À la fin de ce laboratoire, vous maîtriserez l'utilisation de docker scout compare pour obtenir des informations précieuses sur la sécurité et la composition de vos images conteneur.


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{{"Comment utiliser la commande docker scout compare pour analyser les différences entre les images"}} docker/pull -.-> lab-555200{{"Comment utiliser la commande docker scout compare pour analyser les différences entre les images"}} docker/images -.-> lab-555200{{"Comment utiliser la commande docker scout compare pour analyser les différences entre les images"}} docker/build -.-> lab-555200{{"Comment utiliser la commande docker scout compare pour analyser les différences entre les images"}} end

Comparer deux images avec les paramètres par défaut

Dans cette étape, vous apprendrez à comparer deux images Docker à l'aide d'un outil de scan de vulnérabilités. Comparer les images est essentiel pour identifier les risques de sécurité et comprendre les différences entre les différentes versions ou builds de vos images conteneur. Nous utiliserons un outil appelé trivy à cet effet. trivy est un scanner de vulnérabilités simple et complet pour les conteneurs et autres artefacts.

Tout d'abord, installons trivy. Comme trivy n'est pas préinstallé dans l'environnement LabEx, vous devez le télécharger et l'installer.

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

Les commandes ci-dessus mettent d'abord à jour la liste des packages, puis installent les dépendances nécessaires pour ajouter un nouveau dépôt. Ensuite, elles téléchargent la clé publique du dépôt trivy et l'ajoutent aux clés de confiance de votre système. Enfin, elles ajoutent le dépôt trivy à votre liste de sources, mettent à jour à nouveau la liste des packages et installent trivy.

Maintenant que trivy est installé, téléchargeons les images Docker que nous voulons comparer. Nous comparerons deux versions différentes de l'image ubuntu : ubuntu:20.04 et ubuntu:22.04.

docker pull ubuntu:20.04
docker pull ubuntu:22.04

Ces commandes téléchargent les versions spécifiées de l'image ubuntu depuis Docker Hub. Vous devriez voir une sortie indiquant la progression du téléchargement et le téléchargement réussi des images.

Maintenant, nous pouvons utiliser trivy pour comparer ces deux images. La commande de base pour comparer deux images est trivy image --diff-image [image1] [image2].

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

Cette commande analysera à la fois ubuntu:20.04 et ubuntu:22.04 et rapportera les différences dans les vulnérabilités trouvées entre les deux images. La sortie montrera les vulnérabilités présentes dans une image mais pas dans l'autre, ou les vulnérabilités avec des niveaux de gravité différents. Cela vous aide à comprendre comment la mise à niveau ou le changement de version d'image peut avoir un impact sur votre posture de sécurité.

La sortie répertoriera les vulnérabilités classées par gravité (INCONNUE, FAIBLE, MOYENNE, ÉLEVÉE, CRITIQUE). Elle montrera les vulnérabilités qui ont été ajoutées dans la deuxième image (ubuntu:22.04 dans ce cas) par rapport à la première (ubuntu:20.04), et les vulnérabilités qui ont été supprimées.

Comparer des images et ignorer les vulnérabilités de l'image de base

Dans l'étape précédente, nous avons comparé deux images ubuntu et observé les différences en matière de vulnérabilités. Parfois, lors de la comparaison d'images, vous pourriez être intéressé par les vulnérabilités introduites par votre code d'application ou ses dépendances, plutôt que les vulnérabilités héritées de l'image de base. trivy vous permet d'ignorer les vulnérabilités présentes dans une image de base spécifiée.

Pour illustrer cela, créons d'abord un simple Dockerfile qui utilise ubuntu:20.04 comme image de base et ajoute un fichier simple.

Accédez au répertoire de votre projet :

cd ~/project

Créez un fichier nommé Dockerfile en utilisant nano :

nano Dockerfile

Collez le contenu suivant dans le Dockerfile :

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

Enregistrez le fichier et quittez nano (Ctrl+X, Y, Entrée).

Ce Dockerfile est très simple. Il part de l'image ubuntu:20.04 puis exécute une commande pour créer un fichier nommé test.txt dans un répertoire /app.

Maintenant, construisons une image Docker à partir de ce Dockerfile. Nous allons la taguer en tant que my-ubuntu-app:latest.

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

La commande docker build construit une image à partir d'un Dockerfile. Le flag -t my-ubuntu-app:latest tague l'image avec le nom my-ubuntu-app et le tag latest. Le . à la fin spécifie que le Dockerfile se trouve dans le répertoire actuel. Vous devriez voir une sortie indiquant le processus de construction et la création réussie de l'image.

Maintenant, nous avons deux images : ubuntu:20.04 (l'image de base) et my-ubuntu-app:latest (l'image construite à partir de l'image de base). Nous pouvons comparer my-ubuntu-app:latest avec ubuntu:20.04 et ignorer les vulnérabilités déjà présentes dans ubuntu:20.04. Cela nous montrera uniquement les vulnérabilités introduites par les modifications dans notre Dockerfile.

Nous utilisons le flag --ignore-base avec la commande trivy image pour y parvenir.

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

Cette commande compare my-ubuntu-app:latest avec ubuntu:20.04 mais ne rapporte que les vulnérabilités présentes dans my-ubuntu-app:latest et non dans ubuntu:20.04. Étant donné que notre Dockerfile n'a ajouté qu'un simple fichier et n'a installé aucun nouveau package, vous devriez voir très peu ou aucune nouvelle vulnérabilité rapportée par rapport à la sortie de l'étape précédente. Cela montre comment --ignore-base vous aide à vous concentrer sur l'impact en matière de sécurité de votre couche d'application.

Comparer des images et filtrer par gravité et type de package

Dans les étapes précédentes, nous avons effectué des comparaisons d'images de base. Cependant, la sortie peut parfois être très détaillée, en particulier pour les images présentant de nombreuses vulnérabilités. trivy vous permet de filtrer les résultats en fonction du niveau de gravité et du type de package, ce qui vous aide à vous concentrer sur les problèmes les plus critiques ou sur des types spécifiques de vulnérabilités.

Comparons à nouveau ubuntu:20.04 et ubuntu:22.04, mais cette fois-ci, nous allons filtrer les résultats pour n'afficher que les vulnérabilités de gravité ÉLEVÉE ou CRITIQUE. Cela est utile lorsque vous souhaitez prioriser la correction des vulnérabilités les plus graves.

Nous utilisons le flag --severity pour spécifier le niveau de gravité minimum à rapporter. Vous pouvez fournir une liste de niveaux de gravité séparés par des virgules.

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

Cette commande comparera les deux images ubuntu et n'affichera que les vulnérabilités classées comme ÉLEVÉES ou CRITIQUES dans l'une ou l'autre des images. Vous remarquerez que la sortie est beaucoup plus courte que la comparaison par défaut, car elle exclut les vulnérabilités de niveau de gravité inférieur (INCONNUE, FAIBLE, MOYENNE).

En plus de filtrer par gravité, vous pouvez également filtrer par le type de package dans lequel la vulnérabilité a été trouvée. trivy peut scanner les vulnérabilités dans les packages du système d'exploitation (tels que ceux installés via apt, yum, etc.) et les dépendances d'application (telles que les bibliothèques utilisées par votre code).

Comparons les images à nouveau, mais cette fois-ci, nous ne chercherons que les vulnérabilités dans les packages du système d'exploitation. Nous utilisons le flag --vuln-type pour cela.

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

Cette commande comparera les deux images et ne rapportera que les vulnérabilités trouvées dans les packages du système d'exploitation. Cela est utile si vous êtes principalement préoccupé par la sécurité de la couche système d'exploitation de base de votre image.

Vous pouvez également combiner ces filtres. Par exemple, pour voir uniquement les vulnérabilités ÉLEVÉES ou CRITIQUES dans les packages du système d'exploitation :

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

Cette commande offre une vue plus ciblée des vulnérabilités les plus graves au sein de la couche système d'exploitation de vos images. Le filtrage vous aide à gérer la sortie et à prioriser efficacement vos efforts en matière de sécurité.

Comparer des images et générer un rapport au format Markdown

Dans les étapes précédentes, nous avons consulté les résultats de la comparaison des vulnérabilités directement dans le terminal. Bien que cela soit utile pour des vérifications rapides, vous avez souvent besoin de sauvegarder les résultats dans un format structuré pour la génération de rapports, la documentation ou une analyse plus approfondie. trivy prend en charge différents formats de sortie, y compris le Markdown.

Générer un rapport au format Markdown est utile car le Markdown est un langage de balisage léger, facile à lire et pouvant être facilement converti en d'autres formats tels que HTML ou PDF.

Pour générer un rapport Markdown de la comparaison d'images, nous utilisons le flag --format et spécifions markdown. Nous redirigeons également la sortie vers un fichier en utilisant l'opérateur >.

Comparons à nouveau ubuntu:20.04 et ubuntu:22.04 et enregistrons la sortie dans un fichier Markdown nommé comparison_report.md dans votre répertoire ~/project.

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

Cette commande effectue la même comparaison que dans la première étape, mais formate la sortie au format Markdown et la sauvegarde dans le fichier spécifié. Vous ne verrez pas la sortie directement dans le terminal cette fois-ci.

Une fois la commande terminée, vous pouvez consulter le fichier Markdown généré en utilisant cat ou nano.

cat ~/project/comparison_report.md

Cette commande affichera le contenu du fichier comparison_report.md dans votre terminal. Vous devriez voir les résultats de la comparaison des vulnérabilités formatés selon la syntaxe Markdown, y compris des titres, des listes et des tableaux.

Vous pouvez également ouvrir le fichier avec nano pour le consulter dans un éditeur de texte :

nano ~/project/comparison_report_markdown.md

N'oubliez pas de quitter nano après avoir consulté le fichier (Ctrl+X).

Générer des rapports dans différents formats tels que le Markdown vous permet de partager facilement les informations sur les vulnérabilités avec d'autres personnes ou de les intégrer à vos flux de travail de génération de rapports existants. C'est une étape cruciale pour intégrer la vérification de la sécurité dans vos pipelines de développement et de déploiement.

Résumé

Dans ce laboratoire, vous avez appris à utiliser l'outil trivy pour comparer deux images Docker. Vous avez commencé par installer trivy dans l'environnement LabEx, ce qui a consisté à ajouter le dépôt trivy et à installer le paquet en utilisant apt. Après l'installation, vous avez téléchargé deux versions différentes de l'image ubuntu, ubuntu:20.04 et ubuntu:22.04, depuis Docker Hub. Enfin, vous avez exécuté la commande de base trivy image --diff-image pour comparer ces deux images et analyser les différences dans leurs vulnérabilités et leurs packages.