Introduction
Le build multi-étapes (Multi-stage Build) est une fonctionnalité de Docker qui permet d'utiliser plusieurs étapes au sein d'un même Dockerfile pour générer une image finale optimisée. Dans ce défi, vous allez mettre en pratique cette technique pour concevoir une image Docker à la fois compacte et performante.
Créer un Dockerfile avec un build multi-étapes
Dans cette section, vous allez rédiger un Dockerfile exploitant le principe du build multi-étapes.
Tâches
- Concevez un nouveau
Dockerfilearticulé autour de deux étapes. La première étape doit compiler l'application en installant les dépendances nécessaires et en exécutant le script de build. La seconde étape doit générer l'image finale en récupérant uniquement le code compilé de la première étape, en installant les dépendances de production et en exposant le port requis.
Exemple
Voici une illustration de la démarche à suivre :
Créez un nouveau répertoire nommé
myappet placez-vous à l'intérieur.mkdir myapp cd myappTéléchargez le code source NodeJS depuis
https://github.com/labex-labs/nodejs-example.git.git clone https://github.com/labex-labs/nodejs-example.gitDéplacez le code téléchargé à la racine du répertoire
myapp.mv nodejs-example/* . rm -rf nodejs-exampleCréez un fichier nommé
Dockerfiledans le répertoiremyappavec le contenu suivant :## Stage 1: Build the application FROM node:14-alpine AS base WORKDIR /app COPY . ./ RUN npm install ## Stage 2: Create the final image FROM node:14-alpine WORKDIR /app COPY --from=base /app/ . EXPOSE 3000 CMD [ "npm", "start" ]
Exigences
Pour réussir ce défi, vous devez :
- Créer un répertoire nommé
myappdans le dossier/home/labex/project. - Cloner le code source NodeJS dans ce répertoire
myapp. - Créer un
Dockerfiledans le répertoiremyappavec la configuration spécifiée.
Construire l'image Docker
Dans cette étape, vous allez générer l'image à partir de votre Dockerfile.
Tâches
- Construisez une nouvelle image nommée
myapp.
Exemple
Voici ce que vous devez réaliser :
Utilisez la commande
docker buildpour créer l'imagemyapp.docker build -t myapp .Vérifiez que l'image a bien été créée en listant les images disponibles.
Exigences
Pour réussir ce défi, vous devez :
- Exécuter la commande
docker builddepuis le répertoire/home/labex/project/myapp. - Nommer l'image résultante
myapp.
Exécuter un conteneur Docker
Dans cette dernière étape, vous allez instancier un conteneur à partir de l'image créée.
Tâches
- Lancez un conteneur basé sur l'image
myapp. Le conteneur doit mapper le port3000interne vers le port3030de l'hôte. Vous devrez ensuite vérifier l'accès à l'application via votre navigateur.
Exemple
Voici la marche à suivre :
Démarrez un nouveau conteneur nommé
my-app.docker run --name my-app -p 3030:3000 myappOuvrez un navigateur web et accédez à l'adresse
http://localhost:3030pour visualiser l'application en cours d'exécution.
Exigences
Pour réussir ce défi, vous devez :
- Nommer le conteneur
my-app. - Rediriger le port
3000du conteneur vers le port3030de la machine hôte.
Résumé
Félicitations ! Dans ce défi, vous avez appris à implémenter le build multi-étapes (Multi-stage Build) de Docker pour optimiser vos images. En segmentant le Dockerfile en plusieurs phases, vous avez séparé l'environnement de compilation de l'environnement d'exécution, réduisant ainsi considérablement le poids de l'image finale. Grâce à ces compétences, vous pouvez désormais concevoir des déploiements Docker plus professionnels et plus sécurisés.



