Utiliser des conteneurs pour le développement Node.js
Prérequis
Terminez Conteneuriser une application Node.js.
Aperçu
Dans cette section, vous apprendrez à mettre en place un environnement de développement pour votre application conteneurisée. Cela inclut :
- L'ajout d'une base de données locale et la persistance des données
- La configuration de votre conteneur pour exécuter un environnement de développement
- Le débogage de votre application conteneurisée
Ajouter une base de données locale et persister les données
Vous pouvez utiliser des conteneurs pour mettre en place des services locaux, comme une base de données. Dans cette section, vous mettrez à jour le fichier compose.yaml
pour définir un service de base de données et un volume pour persister les données.
-
Ouvrez votre fichier
compose.yaml
dans un IDE ou un éditeur de texte. -
Décommentez les instructions relatives à la base de données. Voici le fichier
compose.yaml
mis à jour.ImportantPour cette section, n'exécutez pas
docker compose up
avant d'y être invité. L'exécution de la commande à des points intermédiaires peut initialiser incorrectement votre base de données.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 de 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 courant. # Vous pouvez ajouter ici d'autres services dont votre application peut dépendre, comme 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: development POSTGRES_HOST: db POSTGRES_USER: postgres POSTGRES_PASSWORD_FILE: /run/secrets/db-password POSTGRES_DB: example 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 des 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 y 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
NotePour en savoir plus sur les instructions du fichier Compose, consultez la référence du fichier Compose.
-
Ouvrez
src/persistence/postgres.js
dans un IDE ou un éditeur de texte. Vous remarquerez que cette application utilise une base de données Postgres et nécessite quelques variables d'environnement pour se connecter à la base de données. Le fichiercompose.yaml
n'a pas encore défini ces variables. -
Ajoutez les variables d'environnement qui spécifient la configuration de la base de données. Voici le fichier
compose.yaml
mis à jour.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 de 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 courant. # Vous pouvez ajouter ici d'autres services dont votre application peut dépendre, comme 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: development POSTGRES_HOST: db POSTGRES_USER: postgres POSTGRES_PASSWORD_FILE: /run/secrets/db-password POSTGRES_DB: example 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 des 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 y 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
-
Ajoutez la section
secrets
sous le serviceserver
pour que votre application gère de manière sécurisée le mot de passe de la base de données. Voici le fichiercompose.yaml
mis à jour.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 de 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 courant. # Vous pouvez ajouter ici d'autres services dont votre application peut dépendre, comme 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: development POSTGRES_HOST: db POSTGRES_USER: postgres POSTGRES_PASSWORD_FILE: /run/secrets/db-password POSTGRES_DB: example 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 des 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 y ajouter # un mot de passe de votre choix avant d'exécuter `docker compose up`. depends_on: db: condition: service_healthy secrets: - db-password 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
-
Dans le répertoire
docker-nodejs-sample
, créez un répertoire nommédb
. -
Dans le répertoire
db
, créez un fichier nommépassword.txt
. Ce fichier contiendra votre mot de passe de base de données.Vous devriez maintenant avoir au moins le contenu suivant dans votre répertoire
docker-nodejs-sample
.├── docker-nodejs-sample/ │ ├── db/ │ │ └── password.txt │ ├── spec/ │ ├── src/ │ ├── .dockerignore │ ├── .gitignore │ ├── compose.yaml │ ├── Dockerfile │ ├── package-lock.json │ ├── package.json │ └── README.md
-
Ouvrez le fichier
password.txt
dans un IDE ou un éditeur de texte, et spécifiez un mot de passe de votre choix. Votre mot de passe doit être sur une seule ligne sans lignes supplémentaires. Assurez-vous que le fichier ne contient aucun caractère de nouvelle ligne ou autre caractère caché. -
Assurez-vous d'enregistrer vos modifications dans tous les fichiers que vous avez modifiés.
-
Exécutez la commande suivante pour démarrer votre application.
$ docker compose up --build
Ouvrez un navigateur et accédez à http://localhost:3000. Vous devriez voir une simple application de liste de tâches.
-
Appuyez sur
Ctrl+C
dans le terminal pour arrêter votre application.
Configurer le conteneur pour le développement
Lorsque vous développez, vous voulez que les modifications de votre code source soient immédiatement reflétées. De plus, vous voulez également attacher un débogueur à votre application pour déboguer. Vous pouvez y parvenir en utilisant des montages bind et en configurant votre conteneur pour le développement.
-
Ouvrez votre fichier
compose.yaml
dans un IDE ou un éditeur de texte. -
Dans la section
server
de votrecompose.yaml
, mettez à jour la valeur deNODE_ENV
àdevelopment
.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 de 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 courant. # Vous pouvez ajouter ici d'autres services dont votre application peut dépendre, comme 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: development POSTGRES_HOST: db POSTGRES_USER: postgres POSTGRES_PASSWORD_FILE: /run/secrets/db-password POSTGRES_DB: example ports: - 3000:3000 # ...
-
Configurez un montage bind pour le
server
afin que les modifications du code source puissent être reflétées dans le conteneur.compose.yaml# ... services: server: build: context: . environment: NODE_ENV: development POSTGRES_HOST: db POSTGRES_USER: postgres POSTGRES_PASSWORD_FILE: /run/secrets/db-password POSTGRES_DB: example ports: - 3000:3000 volumes: - ./src:/usr/src/app/src # ...
Le montage bind monte votre répertoire
src
local dans le répertoire/usr/src/app/src
du conteneur. -
Configurez l'application pour qu'elle s'exécute en mode débogage avec un processus de rechargement automatique.
Mettez à jour la commande
docker run
dans le Dockerfile pour utilisernodemon
.nodemon
est un outil qui vous aide à développer des applications basées sur Node.js en redémarrant automatiquement l'application lorsque des modifications de fichiers dans le répertoire sont détectées.Dockerfile# syntax=docker/dockerfile:1 FROM node:18-alpine WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 # La section commentée ci-dessous est la commande `docker run` que le # conteneur exécutera. Nous utiliserons cette commande pour la production. # CMD [ "node", "src/index.js" ] # La ligne ci-dessous est la commande `docker run` que le conteneur exécutera. # Nous utiliserons cette commande pour le développement. CMD [ "npm", "run", "dev" ]
Le
package.json
a déjà un script de développement qui exécute l'application en mode débogage en utilisantnodemon
. -
Exposez le port de débogage.
Mettez à jour votre fichier
compose.yaml
pour exposer le port de débogage9229
.compose.yaml# ... services: server: build: context: . environment: NODE_ENV: development POSTGRES_HOST: db POSTGRES_USER: postgres POSTGRES_PASSWORD_FILE: /run/secrets/db-password POSTGRES_DB: example volumes: - ./src:/usr/src/app/src ports: - 3000:3000 - 9229:9229 # ...
-
Reconstruisez et exécutez l'application.
$ docker compose up --build
Déboguer l'application conteneurisée
Maintenant que votre conteneur est configuré pour le développement, vous pouvez y attacher un débogueur. Cette section vous montre comment attacher un débogueur à l'aide de Visual Studio Code (VS Code).
-
Ouvrez
docker-nodejs-sample
dans VS Code. -
Assurez-vous que l'extension Docker pour VS Code est installée et activée.
-
Dans VS Code, accédez à Exécuter > Ajouter une configuration....
-
Dans l'invite, sélectionnez Docker : Attacher à Node.
VS Code crée un fichier
.vscode/launch.json
pour vous..vscode/launch.json{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "attach", "name": "Docker: Attach to Node", "remoteRoot": "/usr/src/app" } ] }
-
Assurez-vous que votre application s'exécute toujours. Si ce n'est pas le cas, exécutez
docker compose up --build
dans le terminal. -
Définissez un point d'arrêt dans
src/server.js
à la ligne 50. -
Dans VS Code, accédez à Exécuter et déboguer.
-
Dans le menu déroulant Exécuter et déboguer, sélectionnez Docker : Attacher à Node et appuyez ensuite sur le bouton de lecture.
-
Ouvrez un navigateur et accédez à http://localhost:3000/.
Vous devriez voir que l'exécution dans VS Code s'est arrêtée au point d'arrêt que vous avez défini.
-
Accédez au terminal où votre application s'exécute et appuyez sur
Ctrl+C
pour l'arrêter.
Résumé
Dans cette section, vous avez appris à mettre en place un environnement de développement pour votre application conteneurisée. Vous avez appris à ajouter une base de données locale, à persister les données, à configurer votre conteneur pour le développement et à déboguer votre application.
Lectures complémentaires recommandées :
Prochaines étapes
Dans la section suivante, vous apprendrez à configurer un flux de travail CI/CD pour votre application.