In diesem Post ich kurz zeigen, wie man eine NodeJS Applikation in ein Docker Image packen kann und daraus einen Container startet. Die Grundlage für dieses Beispiel ist eine sehr einfache NodeJS Applikation:

const http = require("http");
const port = 9000;

const requestListener = function (req, res) {
    res.writeHead(200);
    res.end("My first server!");
 };

const server = http.createServer(requestListener).listen(port);Code-Sprache: JavaScript (javascript)

Diese Applikation startet einen http Server auf den Port 9000 und gibt immer nur die Meldung My first server! zurück.

Meine aktuelle Pfadstruktur sieht so aus:

Wir erstellen das Dockerfile

Um für diese kleine Applikation ein Docker Image zu erstellen, benötigen wir zunächt eine Datei namens Dockerfile. Dort geben wir zunächt an, was unser Basisimage sein soll:

FROM node:18Code-Sprache: Dockerfile (dockerfile)

Wir wollen auch den Arbeitspfad gleich festlegen:

WORKDIR /usr/myappCode-Sprache: Dockerfile (dockerfile)

Nun kopieren wir den Code und die package.json in das Image:

COPY package.json /usr/myapp
COPY src /usr/myapp/srcCode-Sprache: Dockerfile (dockerfile)

Der spätere Container soll den Port 9000 nach außen hin öffnen, also:

EXPOSE 9000Code-Sprache: Dockerfile (dockerfile)

Am Schluss soll die NodeJS Applikation gestartet werden.

Die gesamte Dockerfile würde also so aussehen:

FROM node:18

WORKDIR /usr/myapp

COPY package.json /usr/myapp
COPY src /usr/myapp/src

EXPOSE 9000

ENTRYPOINT [ "node", "src/index.js" ]Code-Sprache: Dockerfile (dockerfile)

Meine Pfadstruktur würde aktuell so aussehen:

Wir erstellen das Docker Image

Um aus der eben erstellen Dockerfile ein Image zu erstellen, rufen wir folgenden Befehl auf der Konsole auf:

docker build -t nodetest .

Wichtig!: Wir müssen in der Konsole im selben Ordner sein wie der Ort an dem die Datei Dockerfile liegt.

Wenn alles geklappt hat, können wir mit docker images -a testen, ob wir ein neues Docker Image namens nodetest haben:

Nun können wir einen Container aus diesem Image starte:

docker run -d -p 9000:9000 nodetestCode-Sprache: CSS (css)

Hat jetzt alles geklappt, sollten wir mit dem Browser die URL http://127.0.0.1:9000/ aufrufen können und die Meldung „My first server!“ sehen: