Containerisierung von TypeScript-Anwendungen mit Docker: Der vollständige Leitfaden

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

Warum die Containerisierung von TypeScript-Anwendungen ein Muss für moderne Entwickler ist

\n

Stellen Sie sich folgende Situation vor: Sie haben eine coole TypeScript-Anwendung auf Ihrem MacBook geschrieben, alles funktioniert einwandfrei. Sie laden den Code auf einen Server unter Ubuntu hoch – und erhalten eine Menge Fehler. Kommt Ihnen bekannt vor? Das Problem liegt in den unterschiedlichen Umgebungen: Node.js-Versionen, Systembibliotheken, Umgebungsvariablen. Docker löst dieses Problem ein für alle Mal. Die Containerisierung von TypeScript-Anwendungen ermöglicht es, den Code zusammen mit allen Abhängigkeiten in einen isolierten Container zu packen, der auf jedem Server, in der Cloud oder auf dem lokalen Rechner eines Kollegen identisch läuft.

\n

In diesem Artikel werden wir uns ansehen, wie man eine TypeScript-Anwendung mit Docker richtig containerisiert. Sie lernen nicht nur die grundlegenden Schritte, sondern auch fortgeschrittene Techniken: Multi-Stage-Builds, Optimierung der Image-Größe, Caching von Abhängigkeiten und die Arbeit mit Umgebungsvariablen. Los geht's!

\n\n

Was ist Docker und warum braucht ein TypeScript-Entwickler es?

\n

Docker ist eine Plattform zum Erstellen, Bereitstellen und Ausführen von Anwendungen in Containern. Ein Container ist eine leichte, eigenständige Umgebung, die alles enthält, was Ihre TypeScript-Anwendung zum Ausführen benötigt: Code, Laufzeitumgebung (Node.js), Systemwerkzeuge, Bibliotheken und Einstellungen.

\n

Die Vorteile für TypeScript-Projekte liegen auf der Hand:

\n
    \n
  • Reproduzierbarkeit der Umgebung – kein "bei mir funktioniert es" und "in der Produktion ist es abgestürzt" mehr.
  • \n
  • Isolation – jede Anwendung läuft in ihrem eigenen Container, ohne andere Dienste zu stören.
  • \n
  • Skalierbarkeit – starten Sie ganz einfach 10 Instanzen Ihres TypeScript-Servers mit Docker Compose oder Kubernetes.
  • \n
  • Einfaches Deployment – ein Image kann auf jeder Plattform ausgeführt werden: AWS, Google Cloud, DigitalOcean oder lokal.
  • \n
\n\n

Voraussetzungen

\n

Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes installiert haben:

\n
    \n
  • Docker – laden Sie es von der offiziellen Website herunter (funktioniert unter Windows, macOS, Linux).
  • \n
  • Node.js Version 18 oder höher (für die Kompilierung von TypeScript).
  • \n
  • TypeScript – global oder lokal im Projekt installiert.
  • \n
\n

Als Beispiel verwenden wir eine einfache Express-Anwendung in TypeScript. Der Ansatz ist jedoch universell: Sie können jedes TypeScript-Projekt containerisieren – von einem Telegram-Bot bis zu einem NestJS-Server.

\n\n

Projektstruktur

\n

Erstellen wir zunächst eine minimale Struktur für die TypeScript-Anwendung:

\n
my-typescript-app/\n├── src/\n│   └── index.ts\n├── package.json\n├── tsconfig.json\n└── Dockerfile
\n

Die Datei src/index.ts enthält einen einfachen HTTP-Server:

\n
import express from 'express';\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n  res.send('Hello from TypeScript + Docker!');\n});\n\napp.listen(PORT, () => {\n  console.log(`Server is running on port ${PORT}`);\n});
\n

Die Datei tsconfig.json mit den Basiseinstellungen:

\n
{\n  "compilerOptions": {\n    "target": "ES2020",\n    "module": "commonjs",\n    "outDir": "./dist",\n    "rootDir": "./src",\n    "strict": true,\n    "esModuleInterop": true\n  }\n}
\n\n

Das erste Dockerfile für eine TypeScript-Anwendung schreiben

\n

Der einfachste Weg ist ein einstufiger Build. Aber wir gehen gleich den richtigen Weg und erstellen einen Multi-Stage-Build. Dadurch kann das endgültige Image um ein Vielfaches verkleinert werden.

\n
# Stage 1: Build\nFROM node:18-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm install\nCOPY . .\nRUN npm run build\n\n# Stage 2: Production\nFROM node:18-alpine\nWORKDIR /app\nCOPY --from=builder /app/dist ./dist\nCOPY --from=builder /app/package*.json ./\nRUN npm install --production\nEXPOSE 3000\nCMD ["node", "dist/index.js"]
\n

Lassen Sie uns jede Phase durchgehen:

\n
    \n
  • bu

Blogs

Buchempfehlungen