Initial commit
This commit is contained in:
@@ -1,15 +1,32 @@
|
||||
# Docker lädt ein fertiges Image mit Linux Alpine und Node.js Version 20.
|
||||
# Alpine ist eine sehr kleine Linux-Distribution — kleineres Image, schnellere Downloads.
|
||||
FROM node:20-alpine
|
||||
|
||||
# Docker erstellt Verzeichnis /app falls noch nicht vorhanden.
|
||||
# Alle folgenden Befehle laufen in diesem Verzeichnis.
|
||||
WORKDIR /app
|
||||
|
||||
# Zuerst nur package.json kopieren — noch nicht den ganzen Code.
|
||||
# Warum: Docker cached jeden Schritt. Wenn sich nur der Code ändert aber nicht die
|
||||
# Dependencies, muss npm ci nicht nochmal laufen — Build wird schneller (Layer Caching).
|
||||
COPY package*.json ./
|
||||
|
||||
# npm ci installiert exakt die Versionen aus package-lock.json — reproduzierbarer Build.
|
||||
# --omit=dev: Keine Entwicklungs-Dependencies in Produktion — kleineres und sichereres Image.
|
||||
RUN npm ci --omit=dev
|
||||
|
||||
# Jetzt erst den restlichen Code kopieren — nach npm ci damit der Cache optimal genutzt wird.
|
||||
COPY . .
|
||||
|
||||
# NODE_ENV=production aktiviert Optimierungen in Express (z.B. bessere Performance, weniger Logs).
|
||||
# PORT=4000 definiert auf welchem Port der Server lauscht.
|
||||
ENV NODE_ENV=production
|
||||
ENV PORT=4000
|
||||
|
||||
# Dokumentiert welchen Port der Container verwendet — öffnet ihn aber nicht wirklich.
|
||||
# Das passiert in docker-compose.yml.
|
||||
EXPOSE 4000
|
||||
|
||||
# Startbefehl wenn der Container läuft.
|
||||
# Array-Form statt String damit Node.js direkt als Prozess gestartet wird — kein Shell-Prozess dazwischen.
|
||||
CMD ["node", "index.js"]
|
||||
|
||||
Reference in New Issue
Block a user