Docker und JavaScript: Containerisierung von Anwendungen von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Docker und JavaScript: Containerisierung von Anwendungen auf Node.js — vollständiger Leitfaden



In der modernen Webentwicklung ist Containerisierung nicht nur ein Trend, sondern eine Notwendigkeit. Docker ermöglicht es, eine JavaScript-Anwendung zusammen mit allen Abhängigkeiten, Konfigurationen und der Laufzeitumgebung in einen isolierten Container zu packen, der garantiert auf jedem System gleich funktioniert – vom Entwickler-Laptop bis zum Produktionsserver. In diesem Artikel werden wir den Prozess der Containerisierung von Node.js-Anwendungen von Grund auf durchgehen, Best Practices und typische Anwendungsszenarien betrachten.



Grundlagen von Docker für JavaScript-Entwickler



Bevor wir in die Details eintauchen, lassen Sie uns die wichtigsten Docker-Konzepte in Bezug auf das JavaScript-Ökosystem klären.



  • Image — eine unveränderliche Vorlage, die Code, die Node.js-Laufzeitumgebung, Abhängigkeiten (node_modules) und Konfigurationen enthält. Images werden in einer Registry (z. B. Docker Hub) gespeichert.
  • Container — eine ausgeführte Instanz eines Images. Jeder Container ist von anderen und vom Host-System isoliert.
  • Dockerfile — die Anleitung zum Erstellen des Images. Für Node.js-Anwendungen ist dies die Hauptdatei, die wir erstellen werden.
  • docker-compose — ein Werkzeug zum Definieren und Ausführen von Multi-Container-Anwendungen (z. B. Node.js + MongoDB + Redis).


Erstellen eines Dockerfiles für eine Node.js-Anwendung



Beginnen wir mit einer einfachen Express-Anwendung. Erstellen wir eine Datei Dockerfile im Stammverzeichnis des Projekts:



# Basis-Image Node.js 18 (Alpine — schlanke Version)FROM node:18-alpine

# Arbeitsverzeichnis im Container erstellenWORKDIR /usr/src/app

# package.json und package-lock.json (falls vorhanden) kopierenCOPY package*.json ./

# Produktionsabhängigkeiten installierenRUN npm ci --only=production

# Quellcode der Anwendung kopierenCOPY . .

# Port freigeben, den die Anwendung verwendetEXPOSE 3000

# Befehl zum Starten der AnwendungCMD ["node", "src/index.js"]


Wichtige Nuancen für JavaScript-Projekte:

  • Die Reihenfolge der Anweisungen ist wichtig. Das Kopieren von package.json vor dem Code ermöglicht es Docker, die Schicht mit der Installation der Abhängigkeiten zwischenzuspeichern. Wenn Sie nur den Code ändern, werden die Abhängigkeiten nicht neu installiert – das beschleunigt den Build.
  • Verwenden Sie npm ci anstelle von npm install – das ist schneller und stellt sicher, dass die Versionen der Abhängigkeiten mit der Lock-Datei übereinstimmen.
  • Die Alpine-Version des Node.js-Images (~120 MB statt ~900 MB) reduziert die Größe des endgültigen Images erheblich.


Arbeiten mit docker-compose: Node.js mit einer Datenbank verbinden



Reale Anwendungen kommen selten mit einem einzigen Container aus. Mit docker-compose.yml können Sie Node.js, MongoDB und z. B. Redis mit einem Befehl starten:



version: '3.8'services:  app:    build: .    ports:      - "3000:3000"    environment:      - NODE_ENV=production      - MONGODB_URI=mongodb://mongo:27017/myapp      - REDIS_URL=redis://redis:6379    depends_on:      - mongo      - redis    volumes:      - ./logs:/usr/src/app/logs

mongo: image: mongo:6 volumes: - mongo_data:/data/db ports: - "27017:27017"

redis: image: redis:7-alpine ports: - "6379:6379"

volumes: mongo_data:


Wie es funktioniert:

  • Der Dienst app wird aus unserem Dockerfile erstellt.
  • Die Dienste mongo und redis verwenden vorgefertigte Images aus Docker Hub.
  • Die Umgebungsvariablen MONGODB_URI und REDIS_URL werden an die Anwendung übergeben – beachten Sie, dass wir die Dienstnamen als Hostnamen verwenden (Docker DNS löst sie automatisch in die IP-Adressen der Container auf).
  • Das Volume mongo_d

Blogs

Buchempfehlungen