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.