Docker auf einem VPS einrichten - was nach der Installation sofort zu tun ist

Docker auf einem VPS einrichten - was nach der Installation sofort zu tun ist

Docker ist installiert — aber ein frischer VPS mit Docker ist noch kein produktionsreifes Setup. Hier sind die Schritte, die unmittelbar nach der Installation folgen sollten.

1. Benutzer zur docker-Gruppe hinzufügen

sudo usermod -aG docker $USER
newgrp docker

Damit entfällt sudo vor jedem Docker-Befehl. Die Sicherheitsimplikationen (docker-Gruppe = effektiv Root) sind auf einem Single-User-VPS vertretbar — auf Mehrbenutzer-Systemen ist das eine andere Abwägung.

2. Daemon konfigurieren: Log-Rotation

Ohne Konfiguration schreibt Docker Logs unbegrenzt. Auf einem VPS mit begrenztem Speicher kann das die Festplatte füllen.

/etc/docker/daemon.json anlegen oder anpassen:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

Danach Docker neu starten:

sudo systemctl restart docker

3. Das Docker-UFW-Problem verstehen und lösen

Docker manipuliert iptables direkt und umgeht dabei UFW vollständig. Ein Port, der über docker run -p 80:80 geöffnet wird, ist von außen erreichbar — egal was UFW-Regeln sagen.

Lösung: Docker anweisen, keine iptables-Regeln zu setzen, und stattdessen die Ports manuell in UFW freigeben.

In /etc/docker/daemon.json ergänzen:

{
  "iptables": false
}

Dann in UFW die benötigten Ports explizit öffnen:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Alternativ: Container nur auf 127.0.0.1 binden und Traffic über einen Reverse Proxy (nginx, Caddy) leiten — so muss Docker gar keine Ports direkt nach außen öffnen:

docker run -p 127.0.0.1:8080:80 myapp

4. Fail2ban einrichten

Docker-Container, die Dienste wie SSH oder Webapps exponieren, sind Angriffszielen ausgesetzt. Fail2ban schützt vor Brute-Force-Angriffen:

sudo apt-get install fail2ban
sudo systemctl enable --now fail2ban

Die Standardkonfiguration schützt SSH bereits. Für andere Dienste eigene Jails anlegen.

5. Ersten Test durchführen

docker run --rm hello-world
docker run -d --name test-nginx -p 127.0.0.1:8080:80 nginx
curl http://localhost:8080
docker stop test-nginx && docker rm test-nginx

6. Docker beim Systemstart aktivieren

sudo systemctl enable docker

Der Daemon startet nach Reboots automatisch. Container mit restart: always oder --restart=always starten ebenfalls automatisch.