Zum Inhalt springen
Tutorials 4 Min. Lesezeit

Docker auf dem VPS: Installation und erster Container

Eine Konfigurationsdatei, ein Befehl – so einfach ist Self-Hosting mit Docker geworden. Installation aus dem offiziellen Repository, der erste Container mit Compose und die Firewall-Falle, die viele übersehen.

Lars Kiefer

Lars Kiefer

Docker hat das Self-Hosting radikal vereinfacht: Was früher einen Abend Installationsarbeit kostete, startet heute mit einer Konfigurationsdatei und einem Befehl. Die Installation selbst ist in zehn Minuten erledigt – vorausgesetzt, du nutzt das offizielle Repository und kennst eine tückische Falle, über die selbst erfahrene Admins stolpern: Docker ignoriert deine Firewall.

Voraussetzungen

Du brauchst einen Server mit Root-Zugriff und Debian oder Ubuntu; 2 GB RAM genügen für die ersten Dienste. Wichtig ist die Virtualisierung: Auf einem echten KVM-Server läuft Docker nativ und ohne Einschränkungen – auf Container-basierten vServern (LXC/OpenVZ) dagegen oft nur mit Verrenkungen oder gar nicht.

Schritt 1: Docker aus dem offiziellen Repository installieren

Die Docker-Pakete der Distributionen hängen häufig Monate zurück. Installiere deshalb aus dem offiziellen Docker-Repository – das liefert aktuelle Versionen und saubere Updates über apt. Die folgenden Befehle richten es unter Debian ein (für Ubuntu ersetzt du in beiden URLs debian durch ubuntu):

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
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
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Ob alles läuft, zeigt der Testcontainer:

sudo docker run hello-world

Erscheint „Hello from Docker!", ist die Installation komplett – inklusive Docker Compose, das heute als Plugin (docker compose, ohne Bindestrich) mitkommt.

Schritt 2: Docker ohne sudo nutzen (optional)

Damit du nicht vor jeden Befehl sudo setzen musst, kannst du deinen Benutzer in die Docker-Gruppe aufnehmen und dich einmal neu anmelden:

sudo usermod -aG docker $USER

Sei dir dabei über eine Konsequenz im Klaren: Mitglieder der Docker-Gruppe können über Container faktisch Root-Rechte erlangen. Auf einem Server, den du allein administrierst, ist das üblich und vertretbar – Gruppenmitgliedschaften für weitere Nutzer solltest du dagegen wie Root-Zugänge behandeln.

Schritt 3: Der erste echte Dienst mit Docker Compose

Statt lange docker run-Befehle zu tippen, beschreibst du Dienste in einer compose.yaml – nachvollziehbar, versionierbar, mit einem Befehl startbar. Als praktisches erstes Projekt bietet sich Uptime Kuma an, ein selbst gehostetes Monitoring mit Weboberfläche. Lege dafür einen Ordner mit dieser Datei an:

services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    restart: unless-stopped
    ports:
      - "127.0.0.1:3001:3001"
    volumes:
      - ./data:/app/data

Dann im selben Ordner:

docker compose up -d

Docker lädt das Image und startet den Dienst im Hintergrund; docker compose logs -f zeigt, was passiert. Dank restart: unless-stopped überlebt der Container auch einen Server-Reboot. Warum der Port oben bewusst an 127.0.0.1 gebunden ist, klärt der nächste Abschnitt – er ist der wichtigste dieses Beitrags.

Die Falle: Docker umgeht deine Firewall

Wer seinen Server mit UFW abgesichert hat, erwartet: Was nicht freigegeben ist, ist zu. Docker bricht diese Erwartung. Ein veröffentlichter Port (ports: "3001:3001") wird von Docker direkt in die iptables-Regeln geschrieben – an UFW vorbei. Der Dienst ist dann aus dem Internet erreichbar, obwohl deine Firewall ihn scheinbar blockt. So landen ungewollt Datenbanken und Admin-Panels im öffentlichen Netz.

Die robuste Lösung ist das Muster von oben: Ports nur an 127.0.0.1 binden. Damit lauscht der Container ausschließlich lokal, und du entscheidest, was nach außen geht – sauber über einen Reverse Proxy mit TLS oder für den Eigenbedarf über einen SSH-Tunnel:

ssh -L 3001:127.0.0.1:3001 benutzer@server-ip

Anschließend erreichst du die Oberfläche lokal unter http://localhost:3001 – verschlüsselt durch SSH, unsichtbar für den Rest des Internets.

Faustregel: Veröffentliche Container-Ports grundsätzlich als 127.0.0.1:PORT:PORT. Öffentlich wird ein Dienst erst durch deine bewusste Entscheidung – nicht durch einen Docker-Default.

Updates und Aufräumen

Container aktualisierst du in zwei Befehlen: docker compose pull holt neue Images, docker compose up -d startet die Dienste damit neu. Alte Images bleiben dabei liegen und füllen mit der Zeit die Platte – docker system prune räumt Ungenutztes auf (prüfe vorher mit docker system df, was weg kann). Ein gelegentlicher Blick auf df -h gehört beim Container-Hosting zur Routine.

Fazit

Offizielles Repository, Compose statt langer Einzelbefehle und Ports konsequent an 127.0.0.1 – mit diesen drei Gewohnheiten ist dein Docker-Setup sauber, wartbar und sicher. Nach dem ersten Dienst wächst so ein Server erfahrungsgemäß schnell; wie viel CPU und RAM ein Multi-Container-Setup braucht, kalkuliert der Ratgeber zur Server-Dimensionierung. Und wenn es mehr werden soll: Die AMD-EPYC-Server liefern mit vielen Kernen und NVMe genau das Profil, von dem parallele Container profitieren.

Themen: #Linux #Docker #Container #Self-Hosting
Lars Kiefer

Geschrieben von

Lars Kiefer

Überzeuge dich selbst.

Teste deinen Server 24 Stunden kostenlos – automatisch eingerichtet, mit vollem Zugang zum Control Panel. Danach endet er von selbst.