Minimiser la taille de vos images, Docker est capital pour optimiser le déploiement de vos applications conteneurisées. Réduire la taille de vos images Docker améliorera non seulement leurs performances, mais vous facilitera également la tâche dans vos actions de maintenance quotidiennes. Dans cet article, nous verrons comment optimiser vos images Docker pour en réduire la taille.
Vous souhaitez devenir complètement opérationnel sur le déploiement d’applications conteneurisées ? Notre formation Docker en inter et intraentreprise vous permettra de déployer des environnements applicatifs et à les automatiser.
L’équipe Ambient IT
Les configurations Multistage
L’une des méthodes les plus populaires pour réduire la taille des images est la configuration multistage de Docker.
Lorsque vous construisez une image Docker, vous écrivez des instructions à l’aide d’un Dockerfile. Lorsque vous créez un Dockerfile, celui-ci crée une image assez grande, même pour la plus petite base de code. Vous devez vous attendre à ce que cette taille augmente au fur et à mesure que la taille de l’application augmente. Et si en plus de cela, vous gérez plusieurs environnements, les choses peuvent devenir encore plus complexes et couteuses à long terme.
Pour régler ce problème, la construction en plusieurs étapes est une excellente alternative aux constructions traditionnelles. Elle vous permet de réduire la taille des images Docker. Vous pourrez définir plusieurs étapes dans votre Dockerfile pour représenter les différentes étapes du processus de construction, en utilisant plusieurs commandes FROM. Chacune représente une étape différente du processus de construction de l’image Docker.
Le concept de base de cette méthode est de créer une image différente à chaque étape de la création. Chacune d’entre elles exécute différentes commandes pour construire et empaqueter votre application.
L’image finale de l’application est créée en copiant les fichiers de code et les dépendances des étapes précédentes. Docker élimine alors tous les fichiers intermédiaires et les artefacts de construction qui ne sont plus nécessaires à la création de l’image finale.
Cette méthode dispose de nombreux avantages :
- L’image obtenue est plus fine
- Pas besoin de créer différents Dockerfiles pour le développement et la production
- Il n’y a qu’un seul fichier à maintenir puisqu’un artefact unique est créé à la fin
C’est une approche particulièrement adaptée aux applications étendues avec des dépendances de développement qui ne doivent pas être exécutées dans l’environnement de production.
Le choix des images de base
Les images de bases Docker constituent la base de la structuration de vos environnements Docker. Elles fournissent des images préconstruites contenant les outils et les bibliothèques nécessaires à l’exécution de vos applications dans des conteneurs. Chaque image est balisée pour le fichier Docker correspondant.
Vous pouvez choisir d’utiliser d’autres variantes de versionnement comme images de base de distribution, telles que :
- node:-alpine : cette variante utilise les distributions Linux Alpine pour s’assurer que votre image de base a une taille de 5 Mo.
- Node:-slim : Node.js fournit cette variante pour seulement les paquets communs nécessaires à l’exécution de Node.js, fournissant ainsi des images de base encore plus petites.
Le choix de l’image de base est déterminant pour la taille de vos images. Vérifiez toujours les balises et les variantes fournies par votre image de base pour en réduire la taille. Veillez toutefois à vérifier que les variantes que vous utilisez incluent les dépendances appropriées pour votre application.
Couche d’image Docker
Les images Docker sont divisées en couche. Les couches sont créées en fonction de la façon dont est construite l’image. Chaque commande ou ligne du fichier Docker crée sa propre couche d’image. Ces couches constituent le système de fichiers de l’image Docker.
Chaque commande réalisée dans Dockerfile va créer une couche d’image qui lui est propre. Elles sont ensuite assemblées pour réaliser l’image finale. Avec le temps, les images augmentent donc naturellement en taille. Vous devez donc élaguer les couches afin de garder des tailles d’images raisonnables.
Une commande COPY peut vous aider à réduire le nombre de couches de vos images :
FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 4000
RUN npm start
L’ajout d’une Wildcard indique à Docker qu’il doit réunir les packages.json et package-lock.json dans la même couche d’image. De nombreuses autres commandes sont possibles, le concept global est de réunir des couches d’images avec des fonctions similaires.
Ajouter .dockerignore
Lors de la création d’une image Node.js, vous avez des dossiers et des fichiers tels que node_modules, .dist, build et npm-debug.log. Docker n’en a pas besoin, et les commandes install et build les créeront.
Ainsi, les copier dans Docker augmentera la taille de votre image. Pour éviter cela, créez toujours un fichier .dockerignore dans le répertoire root de votre fichier, afin que Docker puisse les ignorer. En outre, .dockerignore peut également être utilisé pour éviter de copier des fichiers contenant des données sensibles, telles que des mots de passe, dans l’image.
Conclusion
Réduire la taille de vos images Docker n’est pas une tâche excessivement compliquée et cela améliorera grandement l’ensemble de vos conteneurs. Il existe d’autres méthodes pour créer des images Docker réduites alors n’hésitez pas à nous faire part des vôtres en commentaire !