Anleitung: Webserver mit Docker auf dem Raspberry Pi 5 betreiben

Mit Docker kannst du auf einem Raspberry Pi 5 mehrere Webserver parallel betreiben. Jeder Webserver läuft dabei in einem eigenen Container. So kannst du zum Beispiel Apache und nginx gleichzeitig testen, ohne dein System unnötig zu verbasteln.

Ziel dieser Anleitung: Du richtest auf einem Raspberry Pi 5 mehrere Docker-Webserver ein und hostest für jeden Webserver eine eigene Testseite.

1. Voraussetzungen

Für diese Anleitung wird ein Raspberry Pi 5 mit installiertem Raspberry Pi OS oder einem vergleichbaren Linux-System verwendet.

Wichtig: Wenn Docker noch nicht installiert ist, muss Docker zuerst eingerichtet werden. Danach kann mit dieser Anleitung fortgefahren werden.

2. IP-Adresse des Raspberry Pi prüfen

Damit du die Testseiten später im Browser öffnen kannst, brauchst du die IP-Adresse des Raspberry Pi.

hostname -I

Beispielausgabe:

192.168.10.20

In dieser Anleitung wird als Beispiel folgende IP-Adresse verwendet:

192.168.10.20
Hinweis: Ersetze die Beispiel-IP-Adresse durch die tatsächliche IP-Adresse deines Raspberry Pi.

3. Projektordner für die Webserver anlegen

Damit jede Testseite sauber getrennt bleibt, wird für jeden Webserver ein eigener Ordner erstellt.

mkdir -p ~/docker-webserver/apache/html
mkdir -p ~/docker-webserver/nginx/html

Danach in den Projektordner wechseln:

cd ~/docker-webserver

4. Eigene Testseite für Apache erstellen

Nun wird eine einfache HTML-Testseite für den Apache-Webserver erstellt.

nano ~/docker-webserver/apache/html/index.html

Folgenden Inhalt einfügen:

<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <title>Apache Testseite</title>
</head>
<body>
  <h1>Apache läuft auf dem Raspberry Pi 5</h1>
  <p>Diese Testseite wird aus einem Docker-Container mit Apache ausgeliefert.</p>
</body>
</html>

In nano speichern mit:

5. Eigene Testseite für nginx erstellen

Jetzt wird eine zweite HTML-Testseite für nginx erstellt.

nano ~/docker-webserver/nginx/html/index.html

Folgenden Inhalt einfügen:

<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <title>nginx Testseite</title>
</head>
<body>
  <h1>nginx läuft auf dem Raspberry Pi 5</h1>
  <p>Diese Testseite wird aus einem Docker-Container mit nginx ausgeliefert.</p>
</body>
</html>

Auch hier speichern mit:

6. Apache-Webserver mit Docker starten

Der Apache-Container wird mit dem offiziellen Image httpd gestartet.

docker run -d \
  --name apache-testserver \
  -p 8081:80 \
  -v ~/docker-webserver/apache/html:/usr/local/apache2/htdocs:ro \
  httpd:latest

Erklärung der wichtigsten Einträge:

Eintrag Bedeutung
--name apache-testserver Name des Containers
-p 8081:80 Port 8081 auf dem Raspberry Pi zeigt auf Port 80 im Container
-v ...:/usr/local/apache2/htdocs:ro Der lokale HTML-Ordner wird in den Apache-Webserver eingebunden
httpd:latest Docker-Image für Apache

7. nginx-Webserver mit Docker starten

Der nginx-Container wird mit dem offiziellen Image nginx gestartet.

docker run -d \
  --name nginx-testserver \
  -p 8082:80 \
  -v ~/docker-webserver/nginx/html:/usr/share/nginx/html:ro \
  nginx:latest

Erklärung der wichtigsten Einträge:

Eintrag Bedeutung
--name nginx-testserver Name des Containers
-p 8082:80 Port 8082 auf dem Raspberry Pi zeigt auf Port 80 im Container
-v ...:/usr/share/nginx/html:ro Der lokale HTML-Ordner wird in den nginx-Webserver eingebunden
nginx:latest Docker-Image für nginx
Wichtig: Jeder Webserver braucht auf dem Raspberry Pi einen eigenen externen Port. Zwei Container können nicht gleichzeitig denselben Host-Port verwenden.

8. Testseiten im Browser öffnen

Öffne nun auf einem PC im gleichen Netzwerk einen Browser und rufe die Testseiten auf.

Webserver Adresse
Apache http://192.168.10.20:8081
nginx http://192.168.10.20:8082

Wenn alles funktioniert, wird bei Apache die Apache-Testseite und bei nginx die nginx-Testseite angezeigt.

Ergebnis: Auf dem Raspberry Pi 5 laufen jetzt zwei getrennte Webserver als Docker-Container, jeweils mit eigener Testseite.

9. Laufende Container anzeigen

Mit folgendem Befehl kannst du prüfen, ob die Container laufen:

docker ps

Beispielausgabe:

CONTAINER ID   IMAGE          PORTS                  NAMES
abc123         httpd:latest   0.0.0.0:8081->80/tcp   apache-testserver
def456         nginx:latest   0.0.0.0:8082->80/tcp   nginx-testserver

10. Testseite nachträglich ändern

Da die HTML-Dateien vom Raspberry Pi in die Container eingebunden werden, kannst du die Testseiten jederzeit direkt auf dem Raspberry Pi bearbeiten.

Apache-Testseite bearbeiten

nano ~/docker-webserver/apache/html/index.html

nginx-Testseite bearbeiten

nano ~/docker-webserver/nginx/html/index.html

Nach dem Speichern reicht es normalerweise, die Webseite im Browser neu zu laden.

Tipp: Falls der Browser noch die alte Seite anzeigt, lade die Seite mit Strg + F5 neu.

11. Container stoppen und wieder starten

Apache stoppen:

docker stop apache-testserver

Apache wieder starten:

docker start apache-testserver

nginx stoppen:

docker stop nginx-testserver

nginx wieder starten:

docker start nginx-testserver

12. Container entfernen

Wenn du die Testserver nicht mehr brauchst, kannst du sie stoppen und entfernen.

docker stop apache-testserver nginx-testserver
docker rm apache-testserver nginx-testserver
Achtung: Dabei werden nur die Container entfernt. Die HTML-Dateien in ~/docker-webserver bleiben erhalten.

13. Übersicht der verwendeten Ports

Dienst Container-Port Port auf dem Raspberry Pi Aufruf im Browser
Apache 80 8081 http://192.168.10.20:8081
nginx 80 8082 http://192.168.10.20:8082

14. Häufige Fehler

Prüfen, ob ein Port bereits belegt ist

sudo ss -tulpen | grep 8081
sudo ss -tulpen | grep 8082

Container-Logs anzeigen

Apache-Logs:

docker logs apache-testserver

nginx-Logs:

docker logs nginx-testserver

15. Fazit

Mit Docker lassen sich auf dem Raspberry Pi 5 sehr einfach mehrere Webserver parallel betreiben. Apache und nginx laufen dabei getrennt voneinander in eigenen Containern. Durch unterschiedliche Ports kann jeder Webserver eine eigene Testseite ausliefern. Das ist ideal zum Lernen, Testen und Vergleichen verschiedener Webserver.