Fast jede Selfhosting-Anwendung – ob Passwort-Manager, Foto-Verwaltung oder Mediaserver – wird heute als Docker-Container angeboten. Ein Container enthält die Anwendung samt allem, was sie braucht. Du musst also nichts mühsam zusammenbauen, sondern beschreibst nur, welcher Container wie laufen soll.

Du brauchst:

Schritt 1: Offizielle Docker-Quelle einrichten

Debian bringt zwar ein eigenes Docker-Paket mit, das ist aber oft veraltet. Wir nutzen die offizielle Paketquelle von Docker. Die Befehle nacheinander ausführen:

sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Dann die Paketquelle hinzufügen (ein einziger, langer Befehl):

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Schritt 2: Docker installieren

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Schritt 3: Testen

sudo docker run hello-world

Erscheint "Hello from Docker!", läuft alles.

Schritt 4: Docker ohne sudo nutzen (optional)

sudo usermod -aG docker $USER

Danach einmal ab- und wieder anmelden. Gut zu wissen: Mitglieder der Gruppe docker haben praktisch Admin-Rechte auf dem Server – nur vertrauenswürdige Benutzer hinzufügen.

Schritt 5: Docker Compose verstehen

Statt lange Befehle zu tippen, beschreibst du Container in einer Datei namens docker-compose.yml. Für jede Anwendung legst du einen eigenen Ordner an:

mkdir -p ~/apps/whoami && cd ~/apps/whoami
nano docker-compose.yml

Inhalt – ein winziger Test-Webserver:

services:
  whoami:
    image: traefik/whoami
    restart: unless-stopped
    ports:
      - "8000:80"

Was bedeutet das?

Zeile Bedeutung
image welches fertige Paket von Docker Hub geladen wird
restart: unless-stopped startet nach Absturz oder Neustart automatisch wieder
ports: "8000:80" Port 8000 des Servers zeigt auf Port 80 im Container

Achtung, Einrückung: YAML-Dateien sind pingelig. Immer Leerzeichen verwenden (keine Tabs) und sauber untereinander einrücken.

Schritt 6: Die wichtigsten Compose-Befehle

Immer im Ordner mit der docker-compose.yml ausführen:

docker compose up -d        # starten (im Hintergrund)
docker compose ps           # läuft alles?
docker compose logs -f      # Logs live ansehen (Strg+C beendet)
docker compose pull         # neue Version herunterladen …
docker compose up -d        # … und damit neu starten
docker compose down         # stoppen und entfernen

Starte den Test mit docker compose up -d und öffne im Browser http://192.168.50.30:8000 (deine Server-IP) – der Container antwortet mit ein paar Infos über deine Anfrage.

Ordnung halten

  • Eine Anwendung = ein Ordner unter ~/apps/, darin docker-compose.yml und die Daten der Anwendung
  • Alte, ungenutzte Images gelegentlich aufräumen: docker image prune
  • Daten liegen in den Ordnern, die du per volumes einbindest – die gehören ins Backup

Wie geht es weiter?