Dieses Tutorial zeigt die Vorteile der Verwendung von Docker -Containern für Node.js -Anwendungen und legt einen effizienten Entwicklungs -Workflow fest.
node.js ermöglicht die Erstellung schneller und skalierbarer Webanwendungen, die JavaScript sowohl auf dem Server als auch auf der Client -Seite verwenden. Während Ihre Anwendung möglicherweise fehlerfrei auf Ihrer Entwicklungsmaschine funktioniert, ist die konsistente Leistung in verschiedenen Umgebungen (Kollegenmaschinen, Produktionserver) nicht garantiert. Betrachten Sie diese potenziellen Probleme:
Schlüsselvorteile
Docker -Lösung
Docker befasst sich effektiv mit den oben genannten Kompatibilitätsproblemen. Anstatt Anwendungen direkt zu installieren, führen Sie sie in leichten, isolierten virtuellen maschinenähnlichen Umgebungen aus, die als Container bezeichnet werden.
Im Gegensatz zu virtuellen Maschinen, die gesamte PC -Hardware und Betriebssysteme emulieren, emuliert Docker ein Betriebssystem und ermöglicht es Ihnen, Anwendungen direkt zu installieren. Es ist üblich, eine Anwendung pro Linux-basierter Container auszuführen und über ein virtuelles Netzwerk für die HTTP-Kommunikation zu verbinden.
Die Vorteile sind zahlreich:
mit Docker, die Installation von Node.js lokal oder Runtime -Manager wie NVM ist unnötig.
Ihr erster Node.js Skript
Docker Desktop (Windows, MacOS oder Linux) installieren. Erstellen Sie ein einfaches Skript namens version.js
:
console.log(`Node.js version: ${process.version}`);
Wenn node.js lokal installiert ist, führen Sie sie aus, um die Version anzuzeigen. Führen Sie es nun in einem Docker -Container aus (mit der neuesten LTS -Node.js -Version):
(macOS/linux)
$ docker run --rm --name version -v $PWD:/home/node/app -w /home/node/app node:lts-alpine version.js
(Windows PowerShell)
> docker run --rm --name version -v ${PWD}:/home/node/app -w /home/node/app node:lts-alpine version.js
Der erste Lauf könnte einige Momente dauern, während Docker Abhängigkeiten herunterladen. Nachfolgende Läufe sind viel schneller. Sie können einfach die Versionen von Node.js wechseln (z. B. node:21-alpine
). Das Skript wird in einem Linux -Container mit einer bestimmten Node.js -Version ausgeführt.
Befehlsaufschlüsselung:
docker run
: Startet einen Container aus einem Bild. --rm
: Entfernt den Container nach Beendigung. --name version
: weist dem Container einen Namen zu. -v $PWD:/home/node/app
: montiert das aktuelle Verzeichnis als Volumen im Container. -w /home/node/app
: Legt das Arbeitsverzeichnis im Container fest. node:lts-alpine
: Gibt das Docker -Bild an (LTS -Node.js auf Alpine Linux). version.js
: Der Befehl zum Ausführen. Docker -Bilder sind in Docker Hub verfügbar und bieten verschiedene Versionen mit Kennungen wie :lts-alpine
, 20-bullseye-slim
oder latest
. Alpine Linux ist eine leichte Verteilung ideal für einfache Projekte.
Ausführen komplexerer Anwendungen
Für Anwendungen mit Abhängigkeiten und Erstellen von Schritten (mit NPM) ist ein benutzerdefiniertes Docker -Image erforderlich. In diesem Beispiel wird Express.js verwendet:
Erstellen Sie ein Verzeichnis namens simple
, add package.json
:
{ "name": "simple", "version": "1.0.0", "description": "simple Node.js and Docker example", "type": "module", "main": "index.js", "scripts": { "debug": "node --watch --inspect=0.0.0.0:9229 index.js", "start": "node index.js" }, "license": "MIT", "dependencies": { "express": "^4.18.2" } }
und index.js
:
// Express application import express from 'express'; // configuration const cfg = { port: process.env.PORT || 3000 }; // initialize Express const app = express(); // home page route app.get('/:name?', (req, res) => { res.send(`Hello ${req.params.name || 'World'}!`); }); // start server app.listen(cfg.port, () => { console.log(`server listening at http://localhost:${cfg.port}`); });
Erstellen Sie ein Dockerfile
:
# base Node.js LTS image FROM node:lts-alpine # define environment variables ENV HOME=/home/node/app ENV NODE_ENV=production ENV NODE_PORT=3000 # create application folder and assign rights to the node user RUN mkdir -p $HOME && chown -R node:node $HOME # set the working directory WORKDIR $HOME # set the active user USER node # copy package.json from the host COPY --chown=node:node package.json $HOME/ # install application modules RUN npm install && npm cache clean --force # copy remaining files COPY --chown=node:node . . # expose port on the host EXPOSE $NODE_PORT # application launch command CMD [ "node", "./index.js" ]
Erstellen Sie das Bild: docker image build -t simple .
Führen Sie den Container aus: docker run -it --rm --name simple -p 3000:3000 simple
Zugriff auf die App unter http://localhost:3000/
.
a .dockerignore
Datei kann verhindern, dass unnötige Dateien in das Bild kopiert werden.
Verbesserter Entwicklungsworkflow mit Docker Compose
Die vorherige Methode ist für die Entwicklung ineffizient. Docker Compose bietet eine bessere Lösung. Erstellen Sie docker-compose.yml
:
version: '3' services: simple: environment: - NODE_ENV=development build: context: ./ dockerfile: Dockerfile container_name: simple volumes: - ./:/home/node/app ports: - "3000:3000" - "9229:9229" command: /bin/sh -c 'npm install && npm run debug'
Beginnen Sie mit docker compose up
. Änderungen zu index.js
automatischen Neustarts. Verwenden Sie das Debugger des VS -Code (an Port 9229 anhängen) für ein verbessertes Debugging. Stoppen Sie mit docker compose down
.
Schlussfolgerung
Während Docker eine erste Einrichtung benötigt, sind die langfristigen Vorteile von zuverlässigem, verteilbarem Code signifikant. Dieses Tutorial deckt die Grundlagen ab; Erforschen Sie weitere Ressourcen für die fortgeschrittene Nutzung. Die Bilder werden für die Kürze beibehalten.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Node.js mit Docker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!