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

Conteneuriser une application Node.js

Prérequis

  • Vous avez installé la dernière version de Docker Desktop.
  • Vous disposez d'un client git. Les exemples de cette section utilisent un client git en ligne de commande, mais vous pouvez utiliser n'importe quel client.

Aperçu

Cette section vous guide dans la conteneurisation et l'exécution d'une application Node.js.

Obtenir l'application d'exemple

Clonez l'application d'exemple à utiliser avec ce guide. Ouvrez un terminal, changez de répertoire pour un répertoire dans lequel vous souhaitez travailler, et exécutez la commande suivante pour cloner le dépôt :

$ git clone https://github.com/docker/docker-nodejs-sample && cd docker-nodejs-sample

Initialiser les ressources Docker

Maintenant que vous avez une application, vous pouvez créer les ressources Docker nécessaires pour la conteneuriser. Vous pouvez utiliser la fonctionnalité intégrée Docker Init de Docker Desktop pour aider à rationaliser le processus, ou vous pouvez créer manuellement les ressources.

À l'intérieur du répertoire docker-nodejs-sample, exécutez la commande docker init dans un terminal. docker init fournit une configuration par défaut , mais vous devrez répondre à quelques questions sur votre application. Référez-vous à l'exemple suivant pour répondre aux invites de docker init et utilisez les mêmes réponses pour vos invites.

$ docker init
Bienvenue dans l'interface de ligne de commande Docker Init !

Cet utilitaire vous guidera dans la création des fichiers suivants avec des valeurs par défaut pertinentes pour votre projet :
  - .dockerignore
  - Dockerfile
  - compose.yaml
  - README.Docker.md

Commençons !

? Quelle plateforme d'application votre projet utilise-t-il ? Node
? Quelle version de Node voulez-vous utiliser ? 18.0.0
? Quel gestionnaire de paquets voulez-vous utiliser ? npm
? Quelle commande voulez-vous utiliser pour démarrer l'application : node src/index.js
? Sur quel port votre serveur écoute-t-il ? 3000

Si vous n'avez pas Docker Desktop d'installé ou si vous préférez créer les ressources manuellement, vous pouvez créer les fichiers suivants dans le répertoire de votre projet.

Créez un fichier nommé Dockerfile avec le contenu suivant.

Dockerfile
# syntax=docker/dockerfile:1

# Des commentaires sont fournis tout au long de ce fichier pour vous aider à démarrer.
# Si vous avez besoin de plus d'aide, consultez le guide de référence Dockerfile à l'adresse
# https://docs.docker.com/go/dockerfile-reference/

# Vous voulez nous aider à améliorer ce modèle ? Partagez vos commentaires ici : https://forms.gle/ybq9Krt8jtBL3iCk7

ARG NODE_VERSION=18.0.0

FROM node:${NODE_VERSION}-alpine

# Utiliser l'environnement de production de node par défaut.
ENV NODE_ENV production


WORKDIR /usr/src/app

# Télécharger les dépendances dans une étape distincte pour profiter de la mise en cache de Docker.
# Tirez parti d'un montage de cache sur /root/.npm pour accélérer les builds ultérieures.
# Tirez parti des montages de liaison vers package.json et package-lock.json pour éviter d'avoir à les copier dans
# cette couche.
RUN --mount=type=bind,source=package.json,target=package.json \
    --mount=type=bind,source=package-lock.json,target=package-lock.json \
    --mount=type=cache,target=/root/.npm \
    npm ci --omit=dev

# Exécuter l'application en tant qu'utilisateur non root.
USER node

# Copier le reste des fichiers source dans l'image.
COPY . .

# Exposer le port sur lequel l'application écoute.
EXPOSE 3000

# Exécuter l'application.
CMD node src/index.js

Créez un fichier nommé compose.yaml avec le contenu suivant.

compose.yaml
# Des commentaires sont fournis tout au long de ce fichier pour vous aider à démarrer.
# Si vous avez besoin de plus d'aide, consultez le guide de référence Docker Compose à l'adresse
# https://docs.docker.com/go/compose-spec-reference/

# Ici, les instructions définissent votre application comme un service appelé "server".
# Ce service est construit à partir du Dockerfile dans le répertoire actuel.
# Vous pouvez ajouter ici d'autres services dont votre application peut dépendre, tels qu'une
# base de données ou un cache. Pour des exemples, consultez le dépôt Awesome Compose :
# https://github.com/docker/awesome-compose
services:
  server:
    build:
      context: .
    environment:
      NODE_ENV: production
    ports:
      - 3000:3000
# La section commentée ci-dessous est un exemple de la façon de définir une base de données PostgreSQL
# que votre application peut utiliser. `depends_on` indique à Docker Compose de
# démarrer la base de données avant votre application. Le volume `db-data` persiste les
# données de la base de données entre les redémarrages de conteneurs. Le secret `db-password` est utilisé
# pour définir le mot de passe de la base de données. Vous devez créer `db/password.txt` et ajouter
# un mot de passe de votre choix avant d'exécuter `docker compose up`.
#     depends_on:
#       db:
#         condition: service_healthy
#   db:
#     image: postgres
#     restart: always
#     user: postgres
#     secrets:
#       - db-password
#     volumes:
#       - db-data:/var/lib/postgresql/data
#     environment:
#       - POSTGRES_DB=example
#       - POSTGRES_PASSWORD_FILE=/run/secrets/db-password
#     expose:
#       - 5432
#     healthcheck:
#       test: [ "CMD", "pg_isready" ]
#       interval: 10s
#       timeout: 5s
#       retries: 5
# volumes:
#   db-data:
# secrets:
#   db-password:
#     file: db/password.txt

Créez un fichier nommé .dockerignore avec le contenu suivant.

.dockerignore
# Incluez ici tous les fichiers ou répertoires que vous ne voulez pas copier dans votre
# conteneur (par exemple, les artefacts de construction locaux, les fichiers temporaires, etc.).
#
# Pour plus d'aide, consultez le guide de référence du fichier .dockerignore à l'adresse
# https://docs.docker.com/go/build-context-dockerignore/

**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/.next
**/.cache
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/charts
**/docker-compose*
**/compose.y*ml
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
**/build
**/dist
LICENSE
README.md

Vous devriez maintenant avoir au moins le contenu suivant dans votre répertoire docker-nodejs-sample.

├── docker-nodejs-sample/
│ ├── spec/
│ ├── src/
│ ├── .dockerignore
│ ├── .gitignore
│ ├── compose.yaml
│ ├── Dockerfile
│ ├── package-lock.json
│ ├── package.json
│ └── README.md

Pour en savoir plus sur les fichiers, consultez ce qui suit :

Exécuter l'application

À l'intérieur du répertoire docker-nodejs-sample, exécutez la commande suivante dans un terminal.

$ docker compose up --build

Ouvrez un navigateur et affichez l'application à http://localhost:3000. Vous devriez voir une simple application de liste de tâches.

Dans le terminal, appuyez sur ctrl+c pour arrêter l'application.

Exécuter l'application en arrière-plan

Vous pouvez exécuter l'application détachée du terminal en ajoutant l'option -d. À l'intérieur du répertoire docker-nodejs-sample, exécutez la commande suivante dans un terminal.

$ docker compose up --build -d

Ouvrez un navigateur et affichez l'application à http://localhost:3000.

Vous devriez voir une simple application de liste de tâches.

Dans le terminal, exécutez la commande suivante pour arrêter l'application.

$ docker compose down

Pour plus d'informations sur les commandes Compose, consultez la référence de la CLI Compose.

Résumé

Dans cette section, vous avez appris comment vous pouvez conteneuriser et exécuter votre application Node.js en utilisant Docker.

Informations connexes :

Étapes suivantes

Dans la section suivante, vous apprendrez à développer votre application en utilisant des conteneurs.