Docker Dive : optimisation et analyse d’images Docker

Sommaire
- Introduction
- Fonctionnalités de Docker Dive
- Installation de Docker Dive
- Utilisation
- Les raccourcis
- 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
Raccourcis | Actions |
---|---|
Ctrl + C or Q | Quitter |
Tab | Passer de l’affichage des couches à l’affichage de l’arborescence des fichiers |
Ctrl + F | Filtrer les fichiers |
PageUp | Défiler vers le haut |
PageDown | Défiler vers le bas |
Ctrl + A | Vue en couches : voir les modifications d’images |
Ctrl + L | Vue de la couche : voir les modifications de la couche actuelle |
Space | Vue de l’arborescence des fichiers : réduire/ouvrir un répertoire |
Ctrl + Space | Vue de l’arborescence des fichiers : réduire/ouvrir tous les répertoires |
Ctrl + A | Vue de l’arborescence des fichiers : afficher/masquer les fichiers ajoutés |
Ctrl + R | Vue de l’arborescence des fichiers : afficher/masquer les fichiers supprimés |
Ctrl + M | Vue de l’arborescence des fichiers : afficher/masquer les fichiers modifiés |
Ctrl + U | Vue de l’arborescence des fichiers : afficher/masquer les fichiers non modifiés |
Ctrl + B | Vue 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.