Zurück zur Übersicht
Selfhosting Artikel 04 von 08

Docker als Fundament

Container, Compose und Volumes als Basis für eigene Dienste. Die ausführliche Vertiefung findest du in der Docker-Reihe.

Hier nutzt du Docker und Compose als wartbares Fundament für eigene Dienste und lokale KI-Setups. Vor Docker war Selfhosting deutlich mühsamer. Jede Anwendung hatte eigene Abhängigkeiten, die sich gegenseitig in die Quere kommen konnten. Updates waren riskant. Neue Dienste einrichten dauerte Stunden.

Docker hat das grundlegend verändert. Heute starte ich einen neuen Dienst mit einem einzigen Befehl und weiß dass er sich nicht mit anderen Diensten beißt.

Was ein Container ist

Ein Container ist eine abgeschlossene Umgebung die alles mitbringt was eine Anwendung zum Laufen braucht: den Code, die Laufzeitumgebung, Bibliotheken und Konfiguration. Er läuft isoliert vom Rest des Systems.

Der Unterschied zu einer virtuellen Maschine: Container teilen sich den Kernel des Host-Systems und sind dadurch viel leichter und schneller. Ein Container startet in Sekunden und braucht nur die Ressourcen die die Anwendung selbst braucht.

Analogie

Stell dir einen Container wie eine Transportbox vor. Alles was die Anwendung braucht ist darin verpackt. Du kannst die Box auf jedem System öffnen und der Inhalt verhält sich immer gleich, egal ob auf deinem Laptop, einem vServer oder einem anderen Rechner.

Docker installieren

Auf Ubuntu und Linux Mint installierst du Docker am saubersten über das offizielle Skript:

curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER

Nach dem zweiten Befehl musst du dich ab- und wieder anmelden. Danach kannst du Docker ohne sudo verwenden.

Die wichtigsten Docker-Befehle

docker ps Zeigt alle laufenden Container. Mit docker ps -a auch gestoppte Container anzeigen.
docker logs name Zeigt die Log-Ausgabe eines Containers. Mit -f live verfolgen.
docker stop name Stoppt einen laufenden Container sauber.
docker start name Startet einen gestoppten Container wieder.
docker restart name Startet einen Container neu. Nützlich nach Konfigurationsänderungen.
docker rm name Löscht einen gestoppten Container. Die Daten in gemounteten Volumes bleiben erhalten.
docker pull image:tag Lädt ein Image herunter ohne es zu starten.

Docker Compose: mehrere Container verwalten

Für komplexere Setups mit mehreren Containern die zusammenarbeiten gibt es Docker Compose. Statt langen docker run Befehlen schreibt man eine compose.yml Datei.

Beispiel für n8n:

services: n8n: image: n8nio/n8n restart: always ports: - "5678:5678" volumes: - n8n_data:/home/node/.n8n environment: - N8N_HOST=localhost volumes: n8n_data:

Mit docker compose up -d im selben Ordner startet der Dienst. Mit docker compose down stoppt er. Das -d steht für "detached", also im Hintergrund.

Daten persistent speichern

Container sind von Natur aus flüchtig: wenn du einen Container löschst, sind die Daten darin weg. Damit Daten erhalten bleiben, verwendet man Volumes oder Bind Mounts.

-v /home/norbert/daten:/app/data # Bind Mount: Ordner auf Host einbinden -v mein_volume:/app/data # Named Volume: Docker verwaltet den Speicherort

Bind Mounts sind einfacher zu verstehen: du siehst die Daten direkt im Dateisystem. Named Volumes liegen unter /var/lib/docker/volumes/ und werden von Docker verwaltet.

Mein Tipp

Lege für jeden Dienst einen eigenen Ordner an und speichere die compose.yml darin. So hast du alle Konfigurationen an einem Ort, kannst Updates mit docker compose pull && docker compose up -d einspielen und weißt immer wo welche Einstellungen stehen.

Der nächste sinnvolle Schritt

Wenn du diesen Teil verstanden hast, passen diese Seiten als Nächstes:

Häufige Fragen

Warum Docker fürs Selfhosting?

Docker trennt Dienste sauber, macht Setups wiederholbar und reduziert Installationschaos auf dem Host.

Was gehört in eine Compose-Datei?

Dienste, Images, Ports, Volumes, Netzwerke und Umgebungsvariablen, die dein Setup nachvollziehbar machen.

Warum sind Volumes kritisch?

Dort liegen Daten, Konfigurationen und Uploads. Ohne saubere Volumes werden Updates und Backups riskant.