Accueil Nos publications Blog Docker Dive : optimisation et analyse d’images Docker

Docker Dive : optimisation et analyse d’images Docker

Header logo Docker Dive

Sommaire

  1. Introduction
  2. Fonctionnalités de Docker Dive
  3. Installation de Docker Dive
  4. Utilisation
  5. Les raccourcis
  6. Conclusion

Introduction

La conteneurisation a révolutionné le paysage du développement logiciel en offrant une approche agile et reproductible pour le déploiement d’applications. Au cœur de cette révolution se trouvent les images Docker, des artefacts légers et portables qui encapsulent les dépendances et les configurations nécessaires à l’exécution d’une application.

Docker Dive est un outil open source émergeant développé par Alex Goodman. Il offre une perspective inédite sur les images Docker, permettant aux développeurs, aux ingénieurs DevOps et aux administrateurs systèmes d’explorer en détail la structure interne de ces conteneurs. Cette plongée approfondie dans les images Docker avec Dive offre une visibilité cruciale sur les couches, les fichiers et les modifications qui composent chaque image, facilitant ainsi la détection des inefficacités, la réduction de la taille des images, et l’optimisation générale des performances. Il reste tout de même primordial en amont de bien choisir l’image que l’on souhaite utiliser pour qu’elle soit la plus légère possible.

Les fonctionnalités de Docker Dive

  • Analyse des couches d’images : Docker Dive permet d’analyser les différentes couches qui composent une image Docker. Il affiche les changements entre les couches, mettant en évidence les ajouts, les suppressions et les modifications de fichiers.
  • Visualisation graphique : L’outil offre une interface en ligne de commande (CLI) avec une représentation graphique des couches. Cette visualisation permet de comprendre rapidement la structure hiérarchique de l’image Docker.
  • Inspection du contenu : Docker Dive permet d’inspecter le contenu d’une couche spécifique. Vous pouvez voir les fichiers présents dans une couche particulière, ce qui peut être utile pour comprendre la construction de l’image et identifier d’éventuels problèmes.
  • Intégration CI : Docker Dive peut s’intégrer dans votre CI vous permettant ainsi lors de son exécution de déterminer l’efficience de l’image utilisé.

Installation de Docker Dive

Voici les procédures pour installer Docker Dive dans les divers environnements où il est disponible :

Ubuntu / Debian

export DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -OL https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.deb
sudo apt install ./dive_${DIVE_VERSION}_linux_amd64.deb

CentOS

export DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -OL https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.rpm
rpm -i dive_${DIVE_VERSION}_linux_amd64.rpm

Mac

brew install dive

Windows

go get github.com/wagoodman/dive

Docker

docker pull wagoodman/dive

Intégration CI

Il est possible d’intégrer Docker Dive dans votre CI. Avec la variable d’environnement “CI=true”, ce-dernier analysera directement votre image docker et donnera une indication de réussite ou d’échec, trois métriques sont disponibles via le fichier .dive-ci qu’il est conseillé de placer à la racine du répertoire.

rules:
  # If the efficiency is measured below X%, mark as failed.
  # Expressed as a ratio between 0-1.
  lowestEfficiency: 0.95

  # If the amount of wasted space is at least X or larger than X, mark as failed.
  # Expressed in B, KB, MB, and GB.
  highestWastedBytes: 20MB

  # If the amount of wasted space makes up for X% or more of the image, mark as failed.
  # Note: the base image layer is NOT included in the total image size.
  # Expressed as a ratio between 0-1; fails if the threshold is met or crossed.
  highestUserWastedPercent: 0.20

Utilisation

Choisissons une image. Pour la démonstration, j’utilise l’image WordPress du DockerHub (il faut impérativement que l’image soit déjà dans le registry Docker)

dive wordpress

Une fois exécuté, Docker Dive se présente de la manière suivante, il vous propose une vue de votre image dans une interface utilisateur vous permettant d’avoir un visuel sur les différentes couches de l’image que vous avez selectionné :

L’interface utilisateur vous indique également les détails de la couche que vous analysez ainsi que ceux de l’image en question. Dive indique que l’efficience de l’image est de 98%, que sa taille est de 740MB et que l’espace perdu est de 13MB. Dive vous montrera les fichiers qui sont ajouté, supprimé, modifié et inchangé. De par ces informations vous avez les clés en main pour trouver les différents points sur lesquels il est possible d’optimiser l’image.

Docker Dive est un outil d’analyse d’images Docker principalement et ne permet pas directement la modification ou la suppression de fichiers à l’intérieur des conteneurs. Cependant, il offre une fonctionnalité permettant de créer un Dockerfile en fonction des modifications que vous souhaitez apporter à l’image.

Analysez votre image Docker

Dans un premier temps, vous pouvez analiser votre image pour identifier les fichiers que vous souhaitez modifier ou supprimer.

dive <nom_de_votre_image>

Créez un Dockerfile

Une fois que vous avez identifié les changements nécessaires, utilisez Dive pour générer un Dockerfile qui représente ces modifications.

dive build -o dockerfile .

Cela créera un fichier Dockerfile dans le répertoire courant, contenant les instructions nécessaires pour reproduire les modifications apportées à l’image.

Reconstruisez l’image Docker

Utilisez le Dockerfile modifié pour reconstruire l’image Docker avec les modifications souhaitées.

docker build -t <nouveau_nom_image> .

Vérifiez les modifications

Utilisez Dive pour analyser à nouveau l’image nouvellement construite et assurez-vous que les modifications ont été correctement appliquées.

dive <nouveau_nom_image>

Les raccourcis

RaccourcisActions
Ctrl + C or QQuitter
TabPasser de l’affichage des couches à l’affichage de l’arborescence des fichiers
Ctrl + FFiltrer les fichiers
PageUpDéfiler vers le haut
PageDownDéfiler vers le bas
Ctrl + AVue en couches : voir les modifications d’images
Ctrl + LVue de la couche : voir les modifications de la couche actuelle
SpaceVue de l’arborescence des fichiers : réduire/ouvrir un répertoire
Ctrl + SpaceVue de l’arborescence des fichiers : réduire/ouvrir tous les répertoires
Ctrl + AVue de l’arborescence des fichiers : afficher/masquer les fichiers ajoutés
Ctrl + RVue de l’arborescence des fichiers : afficher/masquer les fichiers supprimés
Ctrl + MVue de l’arborescence des fichiers : afficher/masquer les fichiers modifiés
Ctrl + UVue de l’arborescence des fichiers : afficher/masquer les fichiers non modifiés
Ctrl + BVue de l’arborescence des fichiers : afficher/masquer les attributs des fichiers

Conclusion

En conclusion, l’adoption de Docker Dive comme outil privilégié pour l’analyse, la modification et la réduction des images Docker marque une avancée significative dans le domaine de la gestion des conteneurs. Dive ne se contente pas d’être un simple outil d’inspection, il se présente comme un compagnon indispensable pour les équipes de développement, les ingénieurs DevOps et les administrateurs systèmes, leur permettant de résoudre les défis complexes liés à la taille des images et à l’optimisation des performances.

Vous souhaitez en savoir plus ? Contactez-nous !