Linux27. August 2026 19 Aufrufe

Docker auf einem Linux-VPS installieren (2026)

Docker auf einem Linux-VPS installieren (2026)

Voraussetzungen

Bevor Sie beginnen, sollten die folgenden Punkte erfüllt sein:

  • Per Schlüssel abgesicherter SSH-Zugang: SSH-Schlüssel-Anleitung
  • Konfigurierte UFW-Firewall: UFW-Anleitung (lesen Sie auch den Abschnitt Docker und UFW weiter unten, bevor Sie Ports freigeben)
  • Ein Non-Root-Benutzer mit sudo-Rechten oder direkter Root-Zugang
  • Betriebssystem: Debian 13 (Trixie) oder Ubuntu 24.04 LTS

Schritt 1: Das offizielle Docker-Repository hinzufügen

Installieren Sie nicht das von Debian/Ubuntu bereitgestellte Paket docker.io: Es hinkt den offiziellen Versionen hinterher. Verwenden Sie das Repository von Docker Inc., um docker-ce zu erhalten, die aktiv gepflegte Version.

Unter Debian 13

Quelle: docs.docker.com/engine/install/debian/

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

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Unter Ubuntu 24.04

Quelle: docs.docker.com/engine/install/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/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Schritt 2: Docker Engine und Docker Compose installieren

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

Dieser Befehl installiert gleichzeitig:

  • docker-ce: die Docker Engine
  • docker-ce-cli: die Kommandozeilenschnittstelle
  • containerd.io: die Container-Laufzeitumgebung
  • docker-buildx-plugin: das Plugin für plattformübergreifende Builds
  • docker-compose-plugin: Docker Compose v2 (Befehl docker compose, ohne Bindestrich)

Überprüfen Sie die Installation:

docker --version
docker compose version

Wichtiger Hinweis zu Docker Compose: Das v2-Plugin heißt docker compose (zwei Wörter, ohne Bindestrich). Das alte Standalone-Binary docker-compose (mit Bindestrich) ist die Version v1, seit Juli 2023 veraltet und wird hier nicht installiert. Quelle: docs.docker.com/compose/migrate/

Aktivieren Sie Docker beim Systemstart:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

Quelle: docs.docker.com/engine/install/linux-postinstall/

Schritt 3: Non-Root-Zugriff konfigurieren

Den Benutzer zur docker-Gruppe hinzufügen

Standardmäßig erfordern Docker-Befehle sudo. Um sie ohne sudo auszuführen, fügen Sie den Benutzer zur docker-Gruppe hinzu:

sudo usermod -aG docker $USER
newgrp docker

Der Befehl newgrp docker übernimmt die Änderung in der aktuellen Sitzung, ohne dass Sie sich abmelden müssen. Quelle: docs.docker.com/engine/install/linux-postinstall/

Sicherheitshinweis zur docker-Gruppe

Schritt 4: Erster Testcontainer

Überprüfen Sie mit dem offiziellen hello-world-Image, dass die Installation funktioniert:

docker run hello-world

Docker lädt das Image von Docker Hub herunter, falls es lokal nicht vorhanden ist, startet einen Container, zeigt eine Bestätigungsmeldung an und beendet sich. Eine Ausgabe mit "Hello from Docker!" bestätigt, dass die Installation einsatzbereit ist.

Docker und UFW: die Falle, die Sie kennen sollten

Was konkret passiert

Wenn Sie einen Container mit docker run -p 8080:80 nginx starten, wird Port 8080 auf allen Netzwerkschnittstellen des VPS geöffnet, einschließlich der öffentlichen IP, selbst wenn UFW diesen Port nicht erlaubt. Quelle: docs.docker.com/engine/network/packet-filtering-firewalls/

Die bewährte Praxis: an 127.0.0.1 binden

Um einen Port nur lokal freizugeben (erreichbar vom VPS aus, aber nicht aus dem Internet), binden Sie ihn an die Loopback-Schnittstelle:

# Befehl docker run
docker run -p 127.0.0.1:8080:80 nginx

# In einer compose.yml
ports:
  - "127.0.0.1:8080:80"

Port 8080 ist dann nur vom VPS selbst aus erreichbar (zum Beispiel über einen Nginx-Reverse-Proxy) und nicht von außen.

Für Ports, die öffentlich bleiben müssen

Verwenden Sie die iptables-Kette DOCKER-USER, um den Datenverkehr zu filtern, bevor Docker ihn verarbeitet. Fügen Sie eine Regel in /etc/ufw/after.rules hinzu oder konfigurieren Sie iptables direkt. Die offizielle Dokumentation beschreibt diesen Ansatz im Detail: Restrict connections to the Docker host.

Praktische Empfehlung

Für einen VPS, der Webdienste über Docker hostet:

  • Binden Sie standardmäßig alle Container an 127.0.0.1
  • Setzen Sie einen Nginx-Reverse-Proxy davor (die Ports 80 und 443 werden von Nginx verwaltet, nicht direkt von Docker)
  • Öffnen Sie in UFW nur die Ports 80 und 443 (UFW-Anleitung)
  • Exponieren Sie niemals Datenbank-Ports (3306, 5432, 6379) direkt auf der öffentlichen IP

Wartung der Container

Ungenutzte Ressourcen bereinigen

Docker sammelt Images, gestoppte Container, verwaiste Volumes und Netzwerke an. Bereinigen Sie regelmäßig:

# Alle gestoppten Container, ungenutzten Images und verwaisten Netzwerke entfernen
docker system prune

# Auch ungenutzte Volumes einbeziehen (Achtung: endgültige Löschung)
docker system prune --volumes

Die Logs eines Containers einsehen

# Logs des Containers anzeigen
docker logs container_name

# Verfolgung in Echtzeit
docker logs -f container_name

# Anzahl der angezeigten Zeilen begrenzen
docker logs --tail 100 container_name

Docker Engine aktualisieren

sudo apt update
sudo apt upgrade docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

Ein Docker-Image aktualisieren

# Die neueste Version des Images herunterladen
docker pull image_name:tag

# Den Container mit dem neuen Image neu erstellen
docker compose pull
docker compose up -d

Welche VPS-Konfiguration für Docker?

Einsatzzweck Empfohlener RAM OuiHeberg-Angebot
1 bis 3 leichte Container (Website, Bot, API) 4 GB VPS Linux 04G: 7,00 € inkl. MwSt./Monat
Kompletter Stack (App + Datenbank + Cache) 8 GB Die Linux-VPS-Reihe ansehen
Mehrere Projekte oder ressourcenintensive Dienste 16 GB+ Die Linux-VPS-Reihe ansehen

Diese Schätzungen gehen von Containern im Standard-Produktivbetrieb aus. Der Bedarf variiert je nach verwendeten Images und gleichzeitigem Datenverkehr.

Häufige Fragen

Was ist der Unterschied zwischen docker.io und docker-ce?

docker.io ist das Docker-Paket aus den Debian/Ubuntu-Repositories. Es hinkt den offiziellen Versionen oft hinterher und erhält Updates nicht so schnell. docker-ce (Community Edition) ist das Paket, das direkt von Docker Inc. über das offizielle Repository gepflegt wird. Diese Anleitung verwendet docker-ce.

Ist Docker Compose v2 mit alten docker-compose.yml-Dateien kompatibel?

Ja. Das Format der Dateien compose.yml (oder docker-compose.yml) ist zwischen v1 und v2 kompatibel. Der einzige sichtbare Unterschied ist der Befehl: docker compose (v2, Plugin) ersetzt docker-compose (v1, Standalone-Binary). Die Syntax der Dateien bleibt für die große Mehrheit der Anwendungsfälle identisch.

Wie überprüfen Sie nach einem Neustart des VPS, ob Docker läuft?

sudo systemctl status docker

Wenn Docker mit systemctl enable docker.service konfiguriert wurde, startet es automatisch. Prüfen Sie auch, ob die Container in der compose.yml mit der passenden Neustart-Richtlinie konfiguriert sind: restart: unless-stopped oder restart: always.

Kann Docker ohne Root-Zugriff verwendet werden?

Ja, über den Rootless-Modus. Docker kann vollständig ohne Root-Privilegien laufen, was die Angriffsfläche reduziert. Die Einrichtung ist aufwendiger und hier dokumentiert: docs.docker.com/engine/security/rootless/

Wie schützen Sie den Docker-Daemon zusätzlich?

Ein erster Schritt ist die Konfiguration von Fail2ban zum Schutz des SSH-Zugangs zum VPS: siehe die Fail2ban-Anleitung. Für Docker selbst gilt: Exponieren Sie niemals den Docker-Socket (/var/run/docker.sock) gegenüber nicht vertrauenswürdigen Containern und aktivieren Sie die Docker-TCP-API nicht ohne beidseitiges TLS.

Docker ist installiert? Gehen Sie vor dem Produktivbetrieb die Absicherung Ihres VPS von A bis Z durch.