⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Conteneuriser une application

Pour le reste de ce guide, vous travaillerez avec un gestionnaire de liste de tâches simple qui s'exécute sur Node.js. Si vous n'êtes pas familier avec Node.js, ne vous inquiétez pas. Ce guide ne nécessite aucune expérience préalable avec JavaScript.

Prérequis

  • Vous avez installé la dernière version de Docker Desktop.
  • Vous avez installé un client Git.
  • Vous avez un IDE ou un éditeur de texte pour éditer les fichiers. Docker recommande d'utiliser Visual Studio Code.

Obtenir l'application

Avant de pouvoir exécuter l'application, vous devez obtenir le code source de l'application sur votre machine.

  1. Clonez le dépôt getting-started-app en utilisant la commande suivante :

    $ git clone https://github.com/docker/getting-started-app.git
    
  2. Visualisez le contenu du dépôt cloné. Vous devriez voir les fichiers et sous-répertoires suivants.

    ├── getting-started-app/
    │ ├── .dockerignore
    │ ├── package.json
    │ ├── README.md
    │ ├── spec/
    │ ├── src/
    │ └── yarn.lock

Construire l'image de l'application

Pour construire l'image, vous devrez utiliser un Dockerfile. Un Dockerfile est simplement un fichier basé sur du texte sans extension de fichier qui contient un script d'instructions. Docker utilise ce script pour construire une image de conteneur.

  1. Dans le répertoire getting-started-app, au même emplacement que le fichier package.json, créez un fichier nommé Dockerfile avec le contenu suivant :

    # syntax=docker/dockerfile:1
    
    FROM node:lts-alpine
    WORKDIR /app
    COPY . .
    RUN yarn install --production
    CMD ["node", "src/index.js"]
    EXPOSE 3000

    Ce Dockerfile commence avec une image de base node:lts-alpine, une image Linux légère qui vient avec Node.js et le gestionnaire de packages Yarn pré-installés. Il copie tout le code source dans l'image, installe les dépendances nécessaires, et démarre l'application.

  2. Construisez l'image en utilisant les commandes suivantes :

    Dans le terminal, assurez-vous d'être dans le répertoire getting-started-app. Remplacez /path/to/getting-started-app par le chemin vers votre répertoire getting-started-app.

    $ cd /path/to/getting-started-app
    

    Construisez l'image.

    $ docker build -t getting-started .
    

    La commande docker build utilise le Dockerfile pour construire une nouvelle image. Vous avez peut-être remarqué que Docker a téléchargé beaucoup de "couches". C'est parce que vous avez indiqué au constructeur que vous vouliez commencer à partir de l'image node:lts-alpine. Mais, puisque vous n'aviez pas cela sur votre machine, Docker a dû télécharger l'image.

    Après que Docker ait téléchargé l'image, les instructions du Dockerfile ont copié votre application et utilisé yarn pour installer les dépendances de votre application. La directive CMD spécifie la commande par défaut à exécuter lors du démarrage d'un conteneur à partir de cette image.

    Enfin, le flag -t étiquette votre image. Pensez-y comme un nom lisible par l'homme pour l'image finale. Puisque vous avez nommé l'image getting-started, vous pouvez faire référence à cette image lorsque vous exécutez un conteneur.

    Le . à la fin de la commande docker build indique à Docker qu'il devrait chercher le Dockerfile dans le répertoire courant.

Démarrer un conteneur d'application

Maintenant que vous avez une image, vous pouvez exécuter l'application dans un conteneur en utilisant la commande docker run.

  1. Exécutez votre conteneur en utilisant la commande docker run et spécifiez le nom de l'image que vous venez de créer :

    $ docker run -d -p 127.0.0.1:3000:3000 getting-started
    

    Le flag -d (abréviation de --detach) exécute le conteneur en arrière-plan. Cela signifie que Docker démarre votre conteneur et vous renvoie à l'invite du terminal. De plus, il n'affiche pas les journaux dans le terminal.

    Le flag -p (abréviation de --publish) crée un mappage de port entre l'hôte et le conteneur. Le flag -p prend une valeur de chaîne au format HOST:CONTAINER, où HOST est l'adresse sur l'hôte, et CONTAINER est le port sur le conteneur. La commande publie le port 3000 du conteneur vers 127.0.0.1:3000 (localhost:3000) sur l'hôte. Sans le mappage de port, vous ne pourriez pas accéder à l'application depuis l'hôte.

  2. Après quelques secondes, ouvrez votre navigateur web sur http://localhost:3000. Vous devriez voir votre application.

    Liste de tâches vide
  3. Ajoutez un ou deux éléments et voyez que cela fonctionne comme vous l'attendez. Vous pouvez marquer les éléments comme terminés et les supprimer. Votre frontend stocke avec succès les éléments dans le backend.

À ce stade, vous avez un gestionnaire de liste de tâches en cours d'exécution avec quelques éléments.

Si vous jetez un coup d'œil rapide à vos conteneurs, vous devriez voir au moins un conteneur en cours d'exécution qui utilise l'image getting-started et sur le port 3000. Pour voir vos conteneurs, vous pouvez utiliser la CLI ou l'interface graphique de Docker Desktop.

Exécutez la commande docker ps dans un terminal pour lister vos conteneurs.

$ docker ps

Une sortie similaire à la suivante devrait apparaître.

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
df784548666d        getting-started     "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        127.0.0.1:3000->3000/tcp   priceless_mcclintock

Dans Docker Desktop, sélectionnez l'onglet Conteneurs pour voir une liste de vos conteneurs.

Docker Desktop avec le conteneur get-started en cours d'exécution

Résumé

Dans cette section, vous avez appris les bases de la création d'un Dockerfile pour construire une image. Une fois que vous avez construit une image, vous avez démarré un conteneur et vu l'application en cours d'exécution.

Informations connexes :

Étapes suivantes

Ensuite, vous allez apporter une modification à votre application et apprendre comment mettre à jour votre application en cours d'exécution avec une nouvelle image. En cours de route, vous apprendrez quelques autres commandes utiles.