React-Projekt in Docker & Multi-Stage Builds
Produktiv betriebene React-Anwendungen werden meist “gebaut” und danach in einem separaten schlanken Webserver-Image (z. B. nginx) ausgeliefert.
Mit sogenannten Multi-Stage Builds im Dockerfile lässt sich dieser Ablauf effizient und optimal abbilden.
Was ist ein Multi-Stage Build?
Abschnitt betitelt „Was ist ein Multi-Stage Build?“Ein Multi-Stage Build ermöglicht es, mehrere “FROM”-Abschnitte im selben Dockerfile zu nutzen. Zuerst wird das React-Projekt gebaut, anschliessend wird das Produktions-Build in ein kompaktes Webserver-Image übernommen.
So werden im finalen Image keine Build-Tools oder Quelltexte mehr benötigt.
Beispiel: Dockerfile für React + nginx
Abschnitt betitelt „Beispiel: Dockerfile für React + nginx“# 1. Build-Stage: Projekt bauenFROM node:20 as buildWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .RUN npm run build
# 2. Production-Stage: Webserver (nginx)FROM nginx:alpineCOPY --from=build /app/build /usr/share/nginx/htmlEXPOSE 80CMD ["nginx", "-g", "daemon off;"]Erklärung:
- Die erste Stage (
build) kümmert sich nur um das Erzeugen des optimierten Build-Ordners. - Die zweite Stage erhält ausschliesslich die gebauten Dateien und nutzt nginx als schlanken Webserver. Gerne! Hier die Erklärung:
CMD ["nginx", "-g", "daemon off;"]startet nginx im Vordergrund, damit Docker den Container betreibt, solange nginx läuft. Wird nginx beendet, stoppt der Container automatisch.
Merksatz:
daemon off; = Nginx läuft im Vordergrund als Hauptprozess, wie Docker es verlangt.
Vorteile dieses Ansatzes
Abschnitt betitelt „Vorteile dieses Ansatzes“- Kleine Images (nur statische Dateien + nginx)
- Schnelle Builds und Deployments
- Keine sensiblen Entwicklungsdateien mehr im Endimage
Aufgabe
Abschnitt betitelt „Aufgabe“Im nächsten Kapitel folgt, wie statische Seiten mit nginx im Container bereitgestellt und individuell angepasst werden können.