Eigene Entwicklungsumgebung für WebApps auf einem Linux-Server einrichten – Teil 2 – Erstes Docker-basiertes Projekt

Einen einfachen Python-Webserver erstellen

Docker ermöglicht es, Anwendungen in isolierten Containern auszuführen, ohne sämtliche Abhängigkeiten (wie hier z.B. Python) direkt auf dem Betriebssystem installieren zu müssen.

In diesem Tutorial erstellen wir unter Debian einen minimalen Webserver mit Python, verpacken ihn in einen Docker-Container und starten ihn über Docker Compose.

Das Beispiel soll vor allem demonstrieren, wie einfach sich ein eigenes Docker-Projekt aufbauen lässt.

1. Voraussetzungen

Auf dem Debian-System müssen Docker und das Docker-Compose-Plugin installiert sein. Siehe hierzu Teil 1 dieses Beitrages.

Die Installation lässt sich mit folgenden Befehlen überprüfen:

docker --version
docker compose version

Falls Docker noch nicht installiert ist, hilft die offizielle Docker-Dokumentation weiter.

2. Projektverzeichnis erstellen

Zunächst erstellen wir ein neues Verzeichnis für unser Projekt. Wir verwalten alle unsere Docker Projekte im Ordner ~/Projekte, den wir in Teil 1 dieses Artikels bereits angelegt haben.

cd ~/Projekte
mkdir python-webserver
cd python-webserver

Unser Projekt wird aus drei Dateien bestehen:

python-webserver/
├── app.py
├── Dockerfile
└── compose.yaml

3. Einfachen Python-Webserver erstellen

Wir erstellen die Datei app.py:

gedit app.py

Anschließend fügen wir folgenden Python-Code ein:

from http.server import BaseHTTPRequestHandler, HTTPServer

class Webserver(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html; charset=utf-8")
        self.end_headers()

        html = "<h1>Hallo aus Docker!</h1>"
        html += "<p>Mein erster Python-Webserver läuft.</p>"

        self.wfile.write(html.encode("utf-8"))

server = HTTPServer(("0.0.0.0", 8000), Webserver)

print("Webserver läuft auf Port 8000", flush=True)
server.serve_forever()

Der Webserver lauscht auf Port 8000 und liefert beim Aufruf eine einfache HTML-Seite zurück.

Zusätzliche Python-Bibliotheken benötigen wir nicht.

4. Dockerfile erstellen

Als Nächstes erstellen wir das Dockerfile:

gedit Dockerfile

Inhalt einfügen:

FROM python:3.13-slim

WORKDIR /app

COPY app.py .

EXPOSE 8000

CMD ["python", "-u", "app.py"]

Was passiert hier?

  • FROM: Verwendet ein schlankes Python-Image mit Python Version 3.13
  • WORKDIR: Legt das Arbeitsverzeichnis innerhalb des Containers fest.
  • COPY: Kopiert unsere Python-Datei in den Container.
  • EXPOSE: Dokumentiert den verwendeten Port.
  • CMD: Startet den Python-Webserver.

Damit ist unser Docker-Image bereits vollständig definiert.

5. Docker Compose konfigurieren

Damit wir unseren Container komfortabel starten und verwalten können, erstellen wir eine Compose-Datei:

gedit compose.yaml

Inhalt einfügen:

services:
  webserver:
    build: .
    container_name: python-webserver
    ports:
      - "8000:8000"
    restart: unless-stopped

Docker Compose übernimmt damit den Bau und Start unseres Containers.

Die Portweiterleitung 8000:8000 sorgt dafür, dass der Webserver über Port 8000 des Debian-Systems erreichbar ist.

6. Docker-Container starten

Jetzt starten wir unser Projekt:

docker compose up -d --build

Docker lädt bei Bedarf das Python-Image herunter, erstellt unseren Container und startet den Webserver im Hintergrund.

Ob der Container läuft, überprüfen wir mit:

docker compose ps

Die Logausgabe lässt sich ebenfalls anzeigen:

docker compose logs -f

7. Webserver im Browser aufrufen

Unser Webserver ist jetzt erreichbar.

Auf dem Debian-System öffnen wir:

http://localhost:8000

Von einem anderen Rechner im Netzwerk verwenden wir stattdessen die IP-Adresse des Debian-Servers:

http://SERVER-IP:8000

Im Browser erscheint:

Hallo aus Docker!

Mein erster Python-Webserver läuft.

Damit haben wir unseren ersten eigenen Docker-Webserver erfolgreich gestartet!

8. Container stoppen und neu starten

Zum Stoppen des Projekts verwenden wir:

docker compose down

Um den Container erneut zu starten:

docker compose up -d

Wenn wir Änderungen an unserer Python-Datei vornehmen, müssen wir das Docker-Image neu erstellen:

docker compose up -d --build

Fazit

Mit nur 3 Dateien haben wir unter Debian einen funktionsfähigen Python-Webserver als Docker-Projekt erstellt.

Dabei haben wir die wichtigsten Grundlagen kennengelernt:

  • Eine einfache Python-Anwendung erstellen
  • Ein Dockerfile definieren
  • Docker Compose konfigurieren
  • Container erstellen, starten und verwalten
  • Einen Webserver über das Netzwerk erreichbar machen

Dieses Beispiel eignet sich ideal als Ausgangspunkt für weitere Docker-Projekte.

Der verwendete Python-Webserver ist bewusst minimal gehalten und ausschließlich für den Docker-Demonstrationszweck gedacht. Für öffentlich erreichbare Anwendungen sollte ein geeigneter produktiver Webserver eingesetzt werden.

Auch hat dieser minimalistische Webserver nichts mit dem Hosting von WebApps zu tun, die wir später mit Hilfe von KI erstellen werden.