Übung 4
Automatisches Aktualisieren einer Webseite
Ziel
Sie sollen eine Node.js-Anwendung erstellen, die eine einfache Webseite bereitstellt. Sie werden den lokalen Source-Code in einen Docker-Container mounten.
Schritte
1. Erstellen Sie einen lokalen Ordner für die Node.js-Anwendung:
- Erstellen Sie einen neuen Ordner mit dem Namen
my_node_appauf Ihrem Host-System, der die Node.js-Anwendung enthalten wird.
2. Initialisieren Sie ein neues Node.js-Projekt:
- Erstellen Sie in dem Ordner eine Datei
package.jsonmit folgendem Inhalt:
package.json
{
"name": "my_node_app",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "commonjs",
"dependencies": {
"express": "^5.2.1"
}
}
3. Erstellen Sie die Server-Datei:
- Erstellen Sie eine Datei namens
server.jsmit folgendem Inhalt:
server.js
const express = require("express");
const path = require("path");
const app = express();
const PORT = 3000;
// Statische Dateien bereitstellen
app.use(express.static(path.join(__dirname, "public")));
// Routen definieren
app.get("/", (req, res) => {
res.sendFile(path.join(__dirname, "public", "index.html"));
});
// Server starten
app.listen(PORT, () => {
console.log(`Server läuft auf http://localhost:${PORT}`);
});
4. Erstellen Sie den Ordner für statische Dateien:
Erstellen Sie im Ordner my_node_app einen Unterordner namens public und in
diesem Ordner wiederum eine HTML-Datei namens index.html mit folgendem Inhalt:
my_node_app/public/index.html
<!DOCTYPE html>
<html>
<head>
<title>Meine Node.js App</title>
</head>
<body>
<h1>Willkommen zu meiner Node.js App!!</h1>
</body>
</html>
5. Optional: App auf Host starten:
- Sofern Sie
nodeundnpminstalliert habt, könnt ihr mit folgenden Befehlen die Applikation auf dem Host starten. - Fall nicht, kein Problem, wir starten später die Applikation im Docker Kontext!
npm install
npm run start
Nach dem Start sollte die Webseite mit http://localhost:3000 aufrufbar sein.
6. Erstellen Sie ein Dockerfile:
- Erstellen Sie eine Datei namens
Dockerfileim Verzeichnismy_node_appmit folgendem Inhalt:
# Verwenden Sie das offizielle Node.js-Image
FROM node:18
# Setzen Sie das Arbeitsverzeichnis
WORKDIR /usr/src/app
# Kopieren Sie die package.json und package-lock.json
COPY package\*.json ./
# Installieren Sie die Abhängigkeiten
RUN npm install
# Kopieren Sie den Rest des Codes
COPY . .
# Exponieren Sie die Ports
EXPOSE 3000
# Starten Sie die Anwendung
CMD ["npm", "start"]
7. Bauen Sie das Docker-Image:
- Führen Sie den folgenden Befehl im Ordner
my_node_appaus, um das Docker-Image zu erstellen:
docker buildx build -t my_node_app .
8. Starten Sie den Docker-Container mit dem gemounteten Source-Code:
- Starten Sie den Container und mounten Sie den lokalen Ordner in den Container. Verwenden Sie den folgenden Befehl:
docker run -it --rm --name my_node_app_container -p 3000:3000 -p 3001:3001 -v .:/usr/src/app my_node_app
tipp
Wenn Sie einem Container einen expliziten Namen geben, starten Sie ihn doch mit
--rm. Ohne dies müssen Sie immer manuell den Container wieder löschen nach
einem Stoppen.
9. Überprüfen Sie die Anwendung im Browser:
- Öffnen Sie einen Webbrowser und gehen Sie zu http://localhost:3000. Sie sollten die Nachricht "Willkommen zu meiner Node.js App!" sehen.
10. Ändern Sie die HTML-Datei und beobachten Sie die Aktualisierung:
- Öffnen Sie die Datei
public/index.htmlin einem Texteditor und ändern Sie den Inhalt, z.B.:
<!DOCTYPE html>
<html>
<head>
<title>Meine Node.js App</title>
</head>
<body>
<h1>Willkommen zu meiner aktualisierten Node.js App!</h1>
</body>
</html>
- Speichern Sie die Datei und laden Sie die Seite neu.
- Nun sollten die Änderungen übernommen worden Sein.
info
- Für die die Node nicht auf dem Host installiert hatten zeigt dies eindrücklich, dass durch Docker die Programmiersprachen und Co. nicht Lokal vorhanden sein müssen.
11. Beenden Sie den Docker-Container:
- Um den Container zu stoppen, drücken Sie
Ctrl + Cim Terminal, in dem der Container läuft. Alternativ können Sie den Container auch mit folgendem Befehl stoppen:
docker stop my_node_app_container
12. Container und Image aufräumen:
- Wenn Sie mit der Übung fertig sind und die Ressourcen freigeben möchten, können Sie den Container und das Image entfernen:
docker rm my_node_app_container
docker rmi my_node_app