Recherche…


Exécution d'une application Basic Node.js dans un conteneur

L'exemple que je vais aborder suppose que vous avez une installation Docker qui fonctionne dans votre système et une compréhension de base de la façon de travailler avec Node.js. Si vous savez comment travailler avec Docker, il est évident que le framework Node.js ne doit pas nécessairement être installé sur votre système. Nous utiliserons plutôt la latest version de l’image de node disponible auprès de Docker. Par conséquent, si nécessaire, vous pouvez télécharger l'image au préalable avec le docker pull node commande docker pull node . (La commande pulls automatiquement la dernière version de l'image de node depuis le menu fixe.)

  1. Procédez à la création d’un répertoire où tous vos fichiers d’application de travail résideraient. Créez un fichier package.json dans ce répertoire qui décrit votre application ainsi que les dépendances. Votre fichier package.json devrait ressembler à ceci:

     {
       "name": "docker_web_app",
       "version": "1.0.0",
       "description": "Node.js on Docker",
       "author": "First Last <[email protected]>",
       "main": "server.js",
       "scripts": {
         "start": "node server.js"
       },
       "dependencies": {
         "express": "^4.13.3"
       }
     }
    
  1. Si nous devons travailler avec Node.js, nous créons généralement un fichier de server qui définit une application Web. Dans ce cas, nous utilisons le framework Express.js (version 4.13.3 ). Un fichier server.js base ressemblerait à ceci:

     var express = require('express');
     var PORT = 8080;
     var app = express();
     app.get('/', function (req, res) {
       res.send('Hello world\n');
     });
     
     app.listen(PORT);
     console.log('Running on http://localhost:' + PORT);
    
  2. Pour ceux qui connaissent Docker, vous auriez rencontré un Dockerfile . Un Dockerfile est un fichier texte contenant toutes les commandes requises pour créer une image personnalisée adaptée à votre application.

Créez un fichier texte vide nommé Dockerfile dans le répertoire en cours. La méthode pour en créer un est simple dans Windows. Sous Linux, vous souhaiterez peut-être exécuter touch Dockerfile dans le répertoire contenant tous les fichiers requis pour votre application. Ouvrez le fichier Dockerfile avec n'importe quel éditeur de texte et ajoutez les lignes suivantes:

FROM node:latest
RUN mkdir -p /usr/src/my_first_app
WORKDIR /usr/src/my_first_app
COPY package.json /usr/src/my_first_app/
RUN npm install
COPY . /usr/src/my_first_app
EXPOSE 8080
  • FROM node:latest indique au démon Docker quelle image nous voulons générer. Dans ce cas, nous utilisons la latest version du node image Docker officiel disponible sur le Docker Hub .

  • Dans cette image, nous procédons à la création d'un répertoire de travail contenant tous les fichiers requis et nous demandons au démon de définir ce répertoire comme répertoire de travail souhaité pour notre application. Pour cela nous ajoutons

      RUN mkdir -p /usr/src/my_first_app
      WORKDIR /usr/src/my_first_app
    
  • Nous procédons ensuite à l'installation des dépendances de l'application en déplaçant d'abord le fichier package.json (qui spécifie les informations d'application, y compris les dépendances) dans le /usr/src/my_first_app de l'image. Nous faisons cela par

      COPY package.json /usr/src/my_first_app/
      RUN npm install 
    
  • Nous tapez ensuite COPY . /usr/src/my_first_app pour ajouter tous les fichiers d'application et le code source au répertoire de travail de l'image.

  • Nous utilisons ensuite la directive EXPOSE pour demander au démon de rendre visible le port 8080 du conteneur résultant (via un mappage de conteneur à hôte) puisque l'application est liée au port 8080 .

  • Au cours de la dernière étape, nous demandons au démon d'exécuter la commande node server.js dans l'image en exécutant la commande de base npm start . Nous utilisons la directive CMD pour cela, qui prend les commandes comme arguments.

      CMD [ "npm", "start" ] 
    
  1. Nous créons ensuite un fichier .dockerignore dans le même répertoire que le Dockerfile pour empêcher que notre copie de node_modules et de journaux utilisés par notre installation système Node.js ne soit copiée sur l'image Docker. Le fichier .dockerignore doit avoir le contenu suivant:

     node_modules
     npm-debug.log
    
  2. Construisez votre image

Naviguez jusqu'au répertoire contenant le Dockerfile et exécutez la commande suivante pour créer l'image Docker. L' -t vous permet de baliser votre image pour la retrouver plus facilement à l'aide de la commande docker images:

    $ docker build -t <your username>/node-web-app .

Votre image sera maintenant répertoriée par Docker. Visualisez les images en utilisant la commande ci-dessous:

$ docker images

REPOSITORY                      TAG        ID              CREATED
node                            latest     539c0211cd76    10 minutes ago
<your username>/node-web-app    latest     d64d3505b0d2    1 minute ago
  1. Lancer l'image

Nous pouvons maintenant exécuter l'image que nous venons de créer en utilisant le contenu de l'application, l'image de base du node et le Dockerfile . Nous allons maintenant exécuter notre image nouvellement créée <your username>/node-web-app . Fournir l'option -d à la commande docker run exécute le conteneur en mode détaché, de sorte que le conteneur s'exécute en arrière-plan. L' -p redirige un port public vers un port privé à l'intérieur du conteneur. Exécutez l'image que vous avez précédemment créée à l'aide de cette commande:

$ docker run -p 49160:8080 -d <your username>/node-web-app
  1. Imprimez la sortie de votre application en exécutant docker ps sur votre terminal. La sortie devrait ressembler à ceci.

     CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS              PORTS                     NAMES
     7b701693b294      <your username>/node-web-app   "npm start"         20 minutes ago       Up 48 seconds       0.0.0.0:49160->8080/tcp   loving_goldstine
    

Obtenez la sortie de l'application en saisissant les docker logs <CONTAINER ID> . Dans ce cas, il s'agit des docker logs 7b701693b294 .

Sortie: en Running on http://localhost:8080

  1. À partir de la sortie du docker ps , le mappage de port obtenu est 0.0.0.0:49160->8080/tcp . Docker a donc mappé le port 8080 intérieur du conteneur sur le port 49160 de la machine hôte. Dans le navigateur, nous pouvons maintenant entrer localhost:49160 .

Nous pouvons également appeler notre application en utilisant curl :

$ curl -i localhost:49160

HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 12
Date: Sun, 08 Jan 2017 14:00:12 GMT
Connection: keep-alive

Hello world      


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow