Docker für Selbsthoster: Die beste Entscheidung für deinen Server

Back

Ein Leitfaden für alle, die ihre Dienste endlich einfach verwalten wollen

Ihr habt einen Server. Vielleicht einen Raspberry Pi, einen alten PC oder eine leistungsstarke Maschine im Keller. Und ihr wollt Dienste darauf betreiben – Nextcloud, Pi-hole, Jellyfin, was auch immer. Aber immer wieder stößt ihr auf das gleiche Problem: Abhängigkeiten, Konflikte, komplizierte Installationen.

Die Lösung heißt Docker. Und wer einmal damit angefangen hat, will nie wieder zurück.


Was ist Docker überhaupt?

Stellt euch vor, jeder eurer Dienste lebt in seiner eigenen abgeschotteten Wohnung. Eigene Möbel, eigene Versionen, eigene Abhängigkeiten. Und alle Wohnungen teilen sich nur die Grundversorgung – in diesem Fall den Linux-Kernel des Host-Systems.

Das ist Docker. Container statt virtuelle Maschinen. Leicht, schnell, isoliert.

Ein Container ist kein vollständiges Betriebssystem. Er teilt sich den Kernel mit dem Host, hat aber eigene Dateien, eigene Prozesse und eigene Netzwerk-Ports. Das macht ihn extrem schlank. Ein Container startet in Sekunden, nicht Minuten. Er verbraucht nur wenig zusätzlichen Speicher. Und er lässt sich genauso einfach löschen, wenn man ihn nicht mehr braucht.


Warum Docker für Selbsthoster die beste Wahl ist

1. Keine Abhängigkeitshölle mehr

Kennt ihr das? Dienst A braucht PHP 7.4, Dienst B braucht PHP 8.1. Geht nicht? Mit Docker geht's doch. Jeder Container bringt seine eigene Umgebung mit. Nextcloud bekommt seinen eigenen PHP-Interpreter, sein eigenes Apache, seine eigenen Bibliotheken. Pi-hole läuft völlig separat daneben. Keine Konflikte, keine Kompatibilitätsprobleme, kein Drama.

2. Installation in Minuten

Ohne Docker müsst ihr herunterladen, entpacken, den Webserver konfigurieren, eine Datenbank einrichten, Berechtigungen setzen, testen, debuggen.

Mit Docker sieht das so aus:

bash

docker run -d -p 8080:80 nextcloud

Das war's. Der Dienst läuft.

Natürlich braucht es für produktive Setups ein bisschen mehr – Volumes für persistente Daten, Umgebungsvariablen für Passwörter, vielleicht ein Reverse Proxy. Aber der Kern bleibt: Was früher Stunden dauerte, ist heute in Minuten erledigt.

3. Updates ohne Angst

Jeder Selbsthoster kennt das mulmige Gefühl vor einem Update. Funktioniert danach alles? Oder muss ich stundenlang debuggen?

Mit Docker ist das anders. Ihr zieht das neue Image, stoppt den alten Container, startet den neuen. Wenn etwas nicht läuft, startet ihr einfach den alten Container neu. Rollback in Sekunden, ohne Datenverlust, ohne Systemstress.

4. Aufräumen ohne Spuren

Einen Dienst getestet und nicht überzeugt? Container löschen, Image löschen – weg. Keine verwaisten Konfigurationsdateien in /etc, keine übriggebliebenen Bibliotheken, keine Einträge in Cron-Tabellen. Das System bleibt sauber.

5. Portabilität

Ihr habt euer Setup auf einem Raspberry Pi laufen und wollt auf einen richtigen Server umziehen? Docker macht's möglich. Sichert die Volumes, kopiert die docker-compose.yml auf den neuen Rechner, startet – und alles läuft genau gleich. Kein Neuinstallieren, kein Nachkonfigurieren.


Die Grundlagen: Images, Container, Volumes

Images – Die Baupläne

Ein Docker-Image ist wie eine ISO-Datei oder ein Bauplan. Es enthält alles, was ein Dienst braucht: Betriebssystem-Basis, Software, Konfiguration. Images werden aus einer Datei namens Dockerfile gebaut. Aber ihr müsst nicht selbst bauen – auf Docker Hub gibt es tausende fertige Images für fast jeden Dienst.

Container – Die laufenden Instanzen

Startet ihr ein Image, entsteht ein Container. Das ist die laufende Instanz eures Dienstes. Ihr könnt mehrere Container aus dem gleichen Image starten – zum Beispiel mehrere Nextcloud-Instanzen für verschiedene Zwecke.

Volumes – Die persistenten Daten

Container sind flüchtig. Wenn ihr einen Container löscht, sind alle darin gespeicherten Daten weg. Deshalb gibt es Volumes: Bereiche auf eurer Festplatte, die ihr in den Container einhängt. Die Datenbankdateien von MariaDB, die Uploads von Nextcloud, die Konfiguration von Pi-hole – alles kommt in Volumes. So überleben eure Daten jeden Container-Neustart.

bash

docker run -d -p 8080:80 -v nextcloud_data:/var/www/html nextcloud

Hier wird das Volume nextcloud_data in den Container eingehängt. Alles, was Nextcloud unter /var/www/html speichert, landet in diesem Volume und bleibt erhalten, selbst wenn der Container gelöscht wird.


Docker Compose: Mehrere Dienste perfekt orchestriert

Einzelne Container sind schön und gut. Aber wer mehrere Dienste betreibt, wird schnell Docker Compose lieben. Mit einer einzigen YAML-Datei definiert ihr alle eure Container, ihre Netzwerke, ihre Volumes, ihre Abhängigkeiten.

Eine typische docker-compose.yml für Nextcloud mit MariaDB:

yaml

version: '3'

services:
  nextcloud:
    image: nextcloud:latest
    container_name: nextcloud
    ports:
      - 8080:80
    volumes:
      - nextcloud_data:/var/www/html
    environment:
      - MYSQL_HOST=db
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=geheimes_passwort
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: mariadb:latest
    container_name: nextcloud_db
    volumes:
      - db_data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root_password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=geheimes_passwort
    restart: unless-stopped

volumes:
  nextcloud_data:
  db_data:

Ein Befehl startet alles:

bash

docker-compose up -d

Ein Befehl stoppt alles:

bash

docker-compose down

Und wenn ihr Updates macht, könnt ihr mit einem Befehl alle neuen Images ziehen und die Container neu starten. Das ist Effizienz.


Die wichtigsten Docker-Befehle für den Alltag

Befehl Was es tut
docker ps Zeigt laufende Container
docker ps -a Zeigt alle Container (auch gestoppte)
docker images Zeigt heruntergeladene Images
docker pull image:tag Lädt ein Image herunter
docker run image Startet einen Container aus einem Image
docker stop container Stoppt einen Container sauber
docker start container Startet einen gestoppten Container
docker restart container Startet einen Container neu
docker rm container Löscht einen Container
docker rmi image Löscht ein Image
docker logs container Zeigt die Logs eines Containers
docker exec -it container bash Öffnet eine Shell im Container
docker-compose up -d Startet alle Dienste aus der Compose-Datei
docker-compose down Stoppt alle Dienste
docker-compose pull Lädt neue Images für alle Dienste
docker-compose logs Zeigt Logs aller Dienste

Typische Docker-Setups für Selbsthoster

Pi-hole – Werbeblocker fürs ganze Netz

yaml

version: '3'

services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "8053:80/tcp"
    environment:
      TZ: 'Europe/Berlin'
      WEBPASSWORD: 'admin_password'
    volumes:
      - './etc-pihole:/etc/pihole'
      - './etc-dnsmasq.d:/etc/dnsmasq.d'
    restart: unless-stopped

Jellyfin – Der eigene Medienserver

yaml

version: '3'

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    ports:
      - "8096:8096"
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /pfad/zu/medien:/media
    restart: unless-stopped

Portainer – Docker grafisch verwalten

yaml

version: '3'

services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    ports:
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    restart: unless-stopped

volumes:
  portainer_data:

Portainer gibt euch eine Weboberfläche für eure Docker-Umgebung. Ideal für alle, die nicht ständig im Terminal arbeiten wollen.


Best Practices für den produktiven Einsatz

1. Immer mit Volumes arbeiten

Nichts ist ärgerlicher als ein verlorener Container mitsamt aller Daten. Gewöhnt euch an, für jeden Dienst Volumes anzulegen. Datenbanken, Uploads, Konfigurationen – alles muss persistent sein.

2. Restart-Policies setzen

Mit restart: unless-stopped stellt ihr sicher, dass eure Dienste nach einem Neustart des Servers automatisch wieder hochkommen. Und dass sie bei einem Crash neu starten.

3. Netzwerke isolieren

Docker kann interne Netzwerke anlegen, in denen Container miteinander kommunizieren können, ohne nach außen sichtbar zu sein. Das ist nicht nur sicherer, sondern auch sauberer.

yaml

networks:
  intern:
    driver: bridge

Dann weist ihr jedem Container sein Netzwerk zu. Der Datenbank-Container muss nur im internen Netzwerk sein, nicht nach außen.

4. Umgebungsvariablen für Geheimnisse

Passwörter und API-Keys gehören nicht in die docker-compose.yml, wenn diese Datei vielleicht irgendwann öffentlich wird. Nutzt .env-Dateien oder echte Secrets-Verwaltung.

yaml

environment:
  - MYSQL_PASSWORD=${MYSQL_PASSWORD}

In einer .env-Datei neben der docker-compose.yml steht dann:

text

MYSQL_PASSWORD=geheimes_passwort

5. Regelmäßige Updates

Container sind nicht automatisch sicher. Holt euch regelmäßig neue Images und startet die Container neu. Ein Skript, das einmal pro Woche docker-compose pull && docker-compose up -d ausführt, ist schnell geschrieben.

6. Logs im Auge behalten

Container produzieren Logs. Mit docker logs container seht ihr sie euch an. Mit einem zentralen Logging-System könnt ihr alle Logs sammeln und durchsuchen.


Häufige Fehler und wie ihr sie vermeidet

Fehler 1: :latest blind vertrauen

:latest ist praktisch, aber nicht immer stabil. Wenn ein Update etwas kaputtmacht, steht ihr da. Besser: Feste Versionen verwenden und gezielt updaten.

Fehler 2: Container als root laufen lassen

Viele Images laufen standardmäßig als root. Das ist ein Sicherheitsrisiko. Sucht nach Images, die einen Nicht-root-User verwenden, oder konfiguriert es selbst.

Fehler 3: Keine Ressourcenlimits

Ein durchgehender Container kann die ganze CPU fressen oder den ganzen RAM. Setzt Limits:

yaml

services:
  nextcloud:
    ...
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G

Fehler 4: Port-Konflikte ignorieren

Zwei Dienste können nicht den gleichen Port auf dem Host nutzen. Plant eure Ports oder nutzt einen Reverse Proxy, der die Verteilung übernimmt.

Fehler 5: Docker-Socket weitergeben

Manche Container (wie Portainer) brauchen Zugriff auf den Docker-Socket, um andere Container zu verwalten. Das ist praktisch, aber auch gefährlich. Wer den Socket hat, kann den ganzen Host kontrollieren. Gebt ihn nur weiter, wenn es wirklich nötig ist.


Docker oder Podman? Ein kurzer Ausflug

In letzter Zeit hört man viel von Podman. Die Alternative zu Docker verspricht mehr Sicherheit durch rootlose Container und bessere Integration in Systemd.

Für die meisten Selbsthoster ist Docker aber völlig ausreichend. Die Community ist riesig, die Dokumentation exzellent, und fast jedes Tutorial nutzt Docker. Wenn ihr nicht gerade aus Sicherheitsgründen auf rootlose Container angewiesen seid, bleibt bei Docker.


Fazit: Docker ist die Superkraft für Selbsthoster

Wer Docker einmal verstanden hat, will nicht mehr zurück. Die Installation neuer Dienste wird zum Kinderspiel, Updates verlieren ihren Schrecken, und das System bleibt sauber und wartbar.

Natürlich gibt es eine Lernkurve. Aber sie ist nicht so steil, wie viele denken. Und wer einmal die ersten Schritte gemacht hat, wird schnell merken: Docker ist die beste Entscheidung, die man als Selbsthoster treffen kann.

Unser Tipp: Fangt klein an. Installiert einen Dienst mit Docker, der euch interessiert – Pi-hole zum Beispiel, oder eine Test-Instanz von Nextcloud. Spielt damit, versteht die Konzepte. Und dann wandelt nach und nach alle eure Dienste auf Docker um.

Ihr werdet euch fragen, warum ihr nicht früher damit angefangen habt.

More blog articles

  Du suchst nach einem neuen Server oder Webhosting und wirst von günstigen Lockangeboten überschüttet? Vorsicht – was auf den ersten Blick wie ein Schnäppchen aussieht, kann langfristig zu einer teuren Überraschung werden. Wir zeigen d...

Was ist eigentlich... Webspace? Einfach erklärt (nicht nur für Oma!) Hast du schon mal von Webspace gehört und gedacht: "Was soll das sein?" Keine Sorge, du bist nicht allein. Viele Leute wissen nicht, was das ist - dabei nutzen sie es jeden Tag....

Du hast bereits erste Erfahrungen mit Minecraft Servern gesammelt und möchtest jetzt deinen eigenen, professionellen Server aufsetzen? Egal ob du mit Mods, Plugins oder im klassischen Vanilla-Stil spielen willst – dieser Guide führt dich durch die wichtigsten...