Suche…


Ausführen einer Basic Node.js-Anwendung in einem Container

Das Beispiel, das ich besprechen werde, setzt voraus, dass Sie eine Docker-Installation haben, die in Ihrem System funktioniert, und ein grundlegendes Verständnis für die Arbeit mit Node.js. Wenn Sie wissen, wie Sie mit Docker arbeiten müssen, sollte klar sein, dass das Node.js-Framework nicht auf Ihrem System installiert werden muss. Stattdessen verwenden wir die latest Version des von Docker verfügbaren node . Daher können Sie das Bild bei Bedarf vorher mit dem Befehls- docker pull node herunterladen. (Der Befehl pulls automatisch die neueste Version des node aus dem Andockfenster.)

  1. Fahren Sie mit der Erstellung eines Verzeichnisses fort, in dem sich alle Ihre aktiven Anwendungsdateien befinden würden. Erstellen package.json in diesem Verzeichnis eine package.json Datei, die Ihre Anwendung sowie die Abhängigkeiten beschreibt. Ihre package.json Datei sollte package.json so aussehen:

     {
       "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. Wenn wir mit Node.js arbeiten müssen, erstellen wir normalerweise eine server Datei, die eine Webanwendung definiert. In diesem Fall verwenden wir das Express.js Framework (ab Version 4.13.3 ). Eine grundlegende server.js Datei würde server.js so aussehen:

     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. Für diejenigen, die mit Docker vertraut sind, hätten Sie eine Docker- Dockerfile . Eine Dockerfile Datei ist eine Textdatei, die alle Befehle enthält, die zum Erstellen eines benutzerdefinierten Abbilds erforderlich sind, das auf Ihre Anwendung zugeschnitten ist.

Erstellen Sie eine leere Textdatei mit dem Namen Dockerfile im aktuellen Verzeichnis. Die Methode zum Erstellen ist in Windows unkompliziert. Unter Linux möchten Sie möglicherweise touch Dockerfile in dem Verzeichnis ausführen, das alle für Ihre Anwendung erforderlichen Dateien enthält. Öffnen Sie die Docker-Datei mit einem beliebigen Texteditor und fügen Sie die folgenden Zeilen hinzu:

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 weist den Docker-Dämon an, von welchem ​​Image wir erstellen wollen. In diesem Fall verwenden wir die latest Version des offiziellen Docker-Image- node die im Docker Hub verfügbar ist.

  • In diesem Bild erstellen wir ein Arbeitsverzeichnis, das alle erforderlichen Dateien enthält, und weisen den Dämon an, dieses Verzeichnis als das gewünschte Arbeitsverzeichnis für unsere Anwendung festzulegen. Dazu fügen wir hinzu

      RUN mkdir -p /usr/src/my_first_app
      WORKDIR /usr/src/my_first_app
    
  • Anschließend fahren wir mit der Installation von Anwendungsabhängigkeiten fort, indem wir zunächst die package.json Datei (die die Anwendungsinformationen einschließlich der Abhängigkeiten angibt) in das Arbeitsverzeichnis /usr/src/my_first_app im Image verschieben. Wir machen das durch

      COPY package.json /usr/src/my_first_app/
      RUN npm install 
    
  • Wir geben dann COPY . /usr/src/my_first_app , um alle Anwendungsdateien und Quellcode zum Arbeitsverzeichnis im Image hinzuzufügen.

  • Dann verwenden wir die Anweisung EXPOSE , um den Daemon anzuweisen, Port 8080 des resultierenden Containers sichtbar zu machen (über eine Container-zu-Host-Zuordnung), da die Anwendung an Port 8080 bindet.

  • Im letzten Schritt node server.js wir den Dämon an, den Befehlsknoten node server.js im Image auszuführen, indem Sie den node server.js npm start ausführen. Wir verwenden dazu die CMD Direktive, die die Befehle als Argumente übernimmt.

      CMD [ "npm", "start" ] 
    
  1. Wir erstellen dann eine .dockerignore -Datei in demselben Verzeichnis wie die Dockerfile , um zu verhindern, dass unsere von Node.js-Systeminstallation verwendete Kopie von node_modules und Protokollen in das Docker-Image kopiert wird. Die .dockerignore Datei muss den folgenden Inhalt haben:

     node_modules
     npm-debug.log
    
  2. Bauen Sie Ihr Bild auf

Navigieren Sie zu dem Verzeichnis, das die Docker- Dockerfile enthält, und führen Sie den folgenden Befehl aus, um das Docker-Image zu erstellen. Mit der Markierung -t können Sie Ihr Bild mit einem Tag versehen, sodass Sie es später leichter finden können, indem Sie den Befehl docker images verwenden:

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

Ihr Bild wird jetzt von Docker aufgelistet. Zeigen Sie Bilder mit dem folgenden Befehl an:

$ docker images

REPOSITORY                      TAG        ID              CREATED
node                            latest     539c0211cd76    10 minutes ago
<your username>/node-web-app    latest     d64d3505b0d2    1 minute ago
  1. Ausführen des Bildes

Wir können jetzt das soeben erstellte Image mit den Inhalten der Anwendung, dem node Basis-Image und der Dockerfile . Wir führen nun unser neu erstelltes Image <your username>/node-web-app . Durch die Option -d für den docker run Befehl wird der Container im separaten Modus ausgeführt, sodass der Container im Hintergrund ausgeführt wird. Das Flag -p leitet einen öffentlichen Port an einen privaten Port innerhalb des Containers weiter. Führen Sie das zuvor erstellte Image mit diesem Befehl aus:

$ docker run -p 49160:8080 -d <your username>/node-web-app
  1. Drucken Sie die Ausgabe Ihrer App, indem Sie docker ps auf Ihrem Terminal docker ps . Die Ausgabe sollte ungefähr so ​​aussehen.

     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
    

docker logs <CONTAINER ID> Sie die Anwendungsausgabe ab, indem Sie docker logs <CONTAINER ID> . In diesem Fall handelt es sich um docker logs 7b701693b294 .

Ausgabe: Running on http://localhost:8080

  1. Von der docker ps Ausgabe von docker ps lautet das erhaltene Port-Mapping 0.0.0.0:49160->8080/tcp . Daher ordnete Docker den 8080 Port im Container dem Port 49160 auf der Hostmaschine zu. Im Browser können wir jetzt localhost:49160 eingeben localhost:49160 .

Wir können unsere App auch mit curl aufrufen:

$ 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow