Défi : Construction Docker Multi-étapes

DockerBeginner
Pratiquer maintenant

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 Dockerfile articulé 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 :

  1. Créez un nouveau répertoire nommé myapp et placez-vous à l'intérieur.

    mkdir myapp
    cd myapp
    
  2. Téléchargez le code source NodeJS depuis https://github.com/labex-labs/nodejs-example.git.

    git clone https://github.com/labex-labs/nodejs-example.git
    

    Déplacez le code téléchargé à la racine du répertoire myapp.

    mv nodejs-example/* .
    rm -rf nodejs-example
    
  3. Créez un fichier nommé Dockerfile dans le répertoire myapp avec 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é myapp dans le dossier /home/labex/project.
  • Cloner le code source NodeJS dans ce répertoire myapp.
  • Créer un Dockerfile dans le répertoire myapp avec 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 :

  1. Utilisez la commande docker build pour créer l'image myapp.

    docker build -t myapp .
    
  2. 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 build depuis 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 port 3000 interne vers le port 3030 de l'hôte. Vous devrez ensuite vérifier l'accès à l'application via votre navigateur.

Exemple

Voici la marche à suivre :

  1. Démarrez un nouveau conteneur nommé my-app.

    docker run --name my-app -p 3030:3000 myapp
    
  2. Ouvrez un navigateur web et accédez à l'adresse http://localhost:3030 pour 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 3000 du conteneur vers le port 3030 de 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.

✨ Vérifier la solution et pratiquer✨ Vérifier la solution et pratiquer✨ Vérifier la solution et pratiquer