Sommaire

Image Docker multi-étape (multi-stage) Image Docker multi-étape Multi-stage

1. Origine du besoin

Dans le cas d’une application simple comme celle présentée (Python + Flask), le fichier Dockerfile n’a pas besoin d’être particulièrement complexe. En effet, il n’y a aucune compilation et la copie des fichiers suffit.

En revanche, lorsqu’une compilation est requise, la situation est plus complexe. Pour contourner ce problème, vous pouvez faire appel aux solutions suivantes :

  • installer puis compiler le programme dans l’image,

  • compiler le programme en dehors de l’image.

La première solution pose problème puisque l’image résultante sera plus grosse et contiendra des outils de compilation. De manière générale, il est déconseillé de laisser ce type d’outils dans l’image du container puisque leur présence peut entraîner des problèmes de sécurité.

La seconde solution pose également problème étant donné que la génération du programme n’est pas gérée par Docker, mais par une entité externe (une usine logicielle Jenkins, Gitlab, etc.).

La réponse à ces deux problèmes est de passer par une image multi-étape. Ces images utilisent plusieurs images sources (une pour la compilation et une pour le lancement du programme) et sont référencées en fonction d’un nom.

2. Exemple ...