
Docker Compose auf dem VPS: Webserver, Datenbank & Reverse Proxy richtig betreiben
Praxisnaher Guide für Docker Compose auf dem VPS: Webserver, Datenbank, Reverse Proxy, TLS, Backups, Updates und Sicherheit richtig planen und betreiben.
Portainer ist eine leistungsstarke, webbasierte Open-Source-Verwaltungsoberfläche für Docker, Docker Swarm, Kubernetes und Podman. Im Jahr 2026 hat sich Portainer als Standard-Tool für Entwickler, DevOps-Engineers und Systemadministratoren etabliert, die Container-basierten Workloads auf einem Virtual Private Server (VPS) betreiben. Die intuitive Web-GUI ersetzt komplexe Kommandozeilen-Befehle und ermöglicht auch Einsteigern einen schnellen Einstieg in die Container-Welt.
Die Software läuft selbst als schlanker Docker-Container und benötigt nur minimale Ressourcen. Auf einem VPS mit 2 vCPUs und 4 GB RAM lässt sich Portainer problemlos parallel zu dutzenden produktiven Anwendungscontainern betreiben. Die Community Edition (CE) ist kostenlos und deckt bereits rund 90 Prozent der typischen Anwendungsfälle ab, während die Business Edition zusätzliche Enterprise-Features wie RBAC, Audit-Logs und Multi-Cluster-Management bietet.
Im Vergleich zur reinen CLI-Verwaltung von Docker bietet Portainer erhebliche Vorteile: Visuelle Übersicht aller laufenden Container, Echtzeit-Metriken zu CPU-, RAM- und Netzwerkauslastung, komfortables Log-Streaming direkt im Browser sowie ein integrierter App-Template-Katalog mit über 600 vorkonfigurierten Anwendungen. Gerade auf produktiven VPS-Instanzen zahlt sich die Zeitersparnis schnell aus.
Ein weiterer wichtiger Aspekt im Jahr 2026 ist die zunehmende Container-Dichte auf modernen VPS-Hosts. Während früher einzelne Anwendungen direkt auf dem Host liefen, werden heute Microservices, Datenbanken, Caches und Worker in separate Container aufgeteilt. Ohne ein Verwaltungstool wie Portainer verliert man schnell den Überblick und verbringt Stunden mit dem Troubleshooting.
Die minimalen Anforderungen an einen VPS für den Betrieb von Portainer sind erstaunlich gering. Portainer selbst benötigt lediglich einen einzigen schlanken Container, der mit etwa 100 MB RAM und minimaler CPU-Last auskommt. Für die zu verwaltenden Workloads sollte der VPS jedoch deutlich leistungsfähiger dimensioniert sein.
Als Faustregel empfiehlt hostazar.com für einen typischen Produktiv-VPS mindestens 4 vCPUs, 8 GB RAM und 80 GB NVMe-SSD-Speicher. Diese Konfiguration erlaubt es, neben Portainer noch 10 bis 20 produktive Container mit moderater Auslastung zu betreiben. Für größere Setups mit Kubernetes oder Docker Swarm empfehlen wir VPS-Tarife mit 8 vCPUs und 16 GB RAM.
Folgende Tabelle zeigt die empfohlenen Mindestanforderungen je nach Einsatzszenario:
| Einsatzszenario | vCPUs | RAM | Storage | Geeignet für |
|---|---|---|---|---|
| Hobby / Entwicklung | 2 | 4 GB | 40 GB | 5-10 Container |
| Small Business | 4 | 8 GB | 80 GB | 10-25 Container |
| Produktiv / KMU | 8 | 16 GB | 160 GB | 25-50 Container |
| Enterprise / Swarm | 16 | 32 GB | 320 GB | 50+ Container |
Als Betriebssystem eignen sich Ubuntu 24.04 LTS, Debian 12 Bookworm, Rocky Linux 9 oder AlmaLinux 9. Diese Distributionen bieten aktuelle Docker-Pakete, lange Support-Zeiträume und eine hervorragende Community-Unterstützung. Wichtig ist, dass die jeweilige Distribution mit aktivierten cgroups v2 und einem modernen Kernel (5.15+) betrieben wird.
Die Installation von Portainer Community Edition auf einem frischen VPS ist in wenigen Minuten erledigt. Voraussetzung ist ein laufender Docker-Daemon. Auf den meisten aktuellen Distributionen installieren Sie Docker mit dem offiziellen Convenience-Script.
Schritt 1: Aktualisieren Sie zunächst das System und installieren Sie grundlegende Pakete:
sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg
Schritt 2: Fügen Sie das offizielle Docker-Repository hinzu und installieren Sie Docker Engine:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /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-buildx-plugin docker-compose-plugin
Schritt 3: Erstellen Sie das persistente Volume für Portainer und starten Sie den Container:
sudo docker volume create portainer_data
sudo docker run -d -p 9443:9443 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Schritt 4: Nach dem Start erreichen Sie das Webinterface unter https://IHRE-VPS-IP:9443. Beim ersten Aufruf werden Sie aufgefordert, ein Admin-Passwort zu setzen. Wählen Sie ein sicheres Passwort mit mindestens 16 Zeichen, da dieses Konto vollen Zugriff auf alle Docker-Ressourcen erhält.
Schritt 5: Verbinden Sie nach der Initialisierung Ihre lokale Docker-Umgebung, indem Sie auf "Get Started" oder "Add Environment" klicken. Portainer erkennt automatisch den lokalen Docker-Socket und bietet an, diesen als "local" Environment zu registrieren.
Portainer bietet eine Vielzahl an Funktionen, die weit über das einfache Starten und Stoppen von Containern hinausgehen. Das Dashboard zeigt eine zentrale Übersicht aller verbundenen Umgebungen mit aktuellen Ressourcenverbräuchen, der Anzahl laufender Container, Images und Volumes.
Im Bereich "Containers" verwalten Sie einzelne Container mit allen relevanten Aktionen: Start, Stop, Restart, Kill, Pause sowie das Anzeigen von Logs in Echtzeit, das Öffnen einer Web-Konsole oder das Bearbeiten von Umgebungsvariablen. Besonders nützlich ist die Möglichkeit, einen neuen Container direkt aus einem Image zu erstellen, ohne einen docker run-Befehl auf der Kommandozeile absetzen zu müssen.
Der integrierte App-Template-Katalog enthält über 600 vorkonfigurierte Anwendungen wie Nextcloud, WordPress, Grafana, Node-RED, Vaultwarden und viele mehr. Mit wenigen Klicks lässt sich eine komplette Anwendung mit angepassten Volumes, Ports und Umgebungsvariablen deployen. Dies ist besonders für Einsteiger ein enormer Mehrwert.
Stacks erlauben das Deployment komplexer Multi-Container-Anwendungen über docker-compose.yml-Dateien. Portainer bietet einen integrierten Web-Editor mit Syntax-Highlighting und Validierung. Alternativ können Sie git-Repositories einbinden, um Stacks direkt aus einem GitHub- oder Gitea-Repository zu deployen – ideal für CI/CD-Workflows.
Das Deployment eines Docker Compose Stacks über Portainer ist eine der häufigsten Aufgaben. Wir zeigen dies am Beispiel eines typischen LAMP-ähnlichen Stacks mit Nginx, PHP-FPM und MariaDB.
Navigieren Sie zunächst in der Portainer-Weboberfläche zu "Stacks" im linken Menü und klicken Sie auf "Add stack". Vergeben Sie einen aussagekräftigen Namen wie "webapp-prod" und fügen Sie im Editor-Feld Ihre Compose-Definition ein:
version: "3.9"
services:
nginx:
image: nginx:1.27-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- web_data:/var/www/html
depends_on:
- php
restart: unless-stopped
php:
image: php:8.3-fpm-alpine
volumes:
- web_data:/var/www/html
restart: unless-stopped
mariadb:
image: mariadb:11
environment:
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASS}
MARIADB_DATABASE: ${DB_NAME}
volumes:
- db_data:/var/lib/mysql
restart: unless-stopped
volumes:
web_data:
db_data:
Im Bereich "Environment variables" können Sie sensible Werte wie Datenbank-Passwörter als Variablen hinterlegen. Diese werden in der Portainer-Datenbank verschlüsselt gespeichert und sind nicht im Klartext sichtbar. Alternativ nutzen Sie die Funktion "Use .env file", um eine externe Konfigurationsdatei einzubinden.
Nach dem Klick auf "Deploy the stack" startet Portainer die definierten Services in der angegebenen Reihenfolge. Der Status jedes Containers ist direkt im UI sichtbar. Fehlerhafte Deployments können mit einem Klick komplett zurückgerollt werden.
Ein großer Vorteil der Stack-Verwaltung in Portainer ist die Versionierung. Jede Änderung an einem Stack erzeugt einen neuen Eintrag in der Update-Historie, sodass Sie bei Problemen schnell auf eine frühere Version zurückkehren können. Dies ist insbesondere in produktiven Umgebungen ein wertvolles Sicherheitsnetz.
Ein Portainer-Instanz auf einem öffentlich erreichbaren VPS ist ein attraktives Ziel für Angreifer, da sie volle Kontrolle über alle laufenden Container bietet. Daher ist eine konsequente Absicherung unerlässlich. Die wichtigste Grundregel lautet: Niemals Portainer ohne TLS und ohne starkes Passwort betreiben.
Standardmäßig lauscht Portainer auf Port 9443 und bietet ein selbstsigniertes TLS-Zertifikat an. In Produktionsumgebungen empfehlen wir dringend, ein gültiges Let's-Encrypt-Zertifikat zu hinterlegen. Portainer akzeptiert Zertifikate in den Formaten PEM, CRT und KEY. Das Zertifikat wird beim Container-Start über die Umgebungsvariablen SSLCERT und SSLKEY eingebunden.
Setzen Sie unbedingt eine Firewall wie UFW oder nftables ein, um den Zugriff auf Port 9443 zu beschränken. Idealerweise erlauben Sie den Zugriff nur aus bestimmten IP-Bereichen oder über ein VPN wie WireGuard:
sudo ufw allow 22/tcp
sudo ufw allow from 192.168.1.0/24 to any port 9443 proto tcp
sudo ufw enable
Aktivieren Sie zusätzlich die Zwei-Faktor-Authentifizierung (2FA) in den Benutzereinstellungen. Portainer unterstützt TOTP-basierte Apps wie Google Authenticator, Authy oder 1Password. In der Business Edition kann 2FA auch global für alle Benutzer erzwungen werden.
Erstellen Sie individuelle Benutzerkonten mit minimalen Berechtigungen. Portainer bietet granulare Rollen wie Administrator, Operator und Viewer. Vermeiden Sie es, mehrere Personen mit dem Administrator-Konto arbeiten zu lassen. Audit-Logs (Business Edition) protokollieren alle sicherheitsrelevanten Aktionen und helfen bei der Compliance.
Portainer liefert von Haus aus grundlegende Metriken zu CPU-, RAM-, Netzwerk- und Disk-Auslastung pro Container. Diese Daten werden in Echtzeit aktualisiert und sind direkt im Container-Detail-View einsehbar. Für tiefergehende Analysen empfiehlt sich die Kombination mit einem dedizierten Monitoring-Stack.
Im Bereich "Container details" sehen Sie unter "Stats" Echtzeitgraphen zur Ressourcenauslastung. Diese Daten stammen direkt aus den cgroup-Metriken des Docker-Daemons. Für eine historische Auswertung reicht dies allerdings nicht aus – hier kommt Prometheus ins Spiel.
Ein typischer Monitoring-Stack in Kombination mit Portainer besteht aus folgenden Komponenten:
| Komponente | Funktion | Image |
|---|---|---|
| Prometheus | Metrik-Sammlung | prom/prometheus:latest |
| Grafana | Visualisierung | grafana/grafana:latest |
| cAdvisor | Container-Metriken | gcr.io/cadvisor/cadvisor:latest |
| Node Exporter | Host-Metriken | prom/node-exporter:latest |
| Alertmanager | Alarmierung | prom/alertmanager:latest |
Dieser Stack lässt sich bequem als Docker Compose Stack in Portainer deployen. Wir empfehlen, diesen in einem separaten Netzwerk vom produktiven Workload zu isolieren. Grafana bietet vorgefertigte Dashboards für Docker und cAdvisor, die per Import in Sekundenschnelle einsatzbereit sind.
Die Kombination aus Portainer als Verwaltungs-UI und Prometheus/Grafana als Monitoring-Lösung ist im Jahr 2026 der de-facto-Standard für VPS-basierte Container-Infrastrukturen. Wer beide Tools kombiniert, erhält eine umfassende Sicht auf alle Workloads und kann Probleme erkennen, bevor sie kritisch werden.
Regelmäßige Backups sind das A und O jedes produktiven VPS-Setups. Portainer selbst speichert seine Konfiguration im Volume portainer_data. Der Verlust dieses Volumes bedeutet den Verlust aller Stacks, Benutzer, Secrets und Konfigurationen – ein Horrorszenario, das sich mit einfachen Mitteln vermeiden lässt.
Die simpelste Backup-Methode ist ein regelmäßiger Cronjob, der das Portainer-Volume als tar-Archiv auf einen externen Speicher kopiert:
#!/bin/bash
BACKUP_DIR="/opt/backups/portainer"
DATE=$(date +%Y%m%d_%H%M%S)
docker run --rm \
-v portainer_data:/source:ro \
-v $BACKUP_DIR:/backup \
alpine tar czf /backup/portainer_$DATE.tar.gz -C /source .
find $BACKUP_DIR -name "portainer_*.tar.gz" -mtime +14 -delete
Ergänzend sollten alle Anwendungs-Volumes in das Backup einbezogen werden. Tools wie borgbackup, duplicity oder restic bieten inkrementelle, verschlüsselte Backups mit Deduplikation. Diese Tools sind ideal, um große Volume-Mengen effizient zu sichern.
Für eine 3-2-1-Backup-Strategie empfehlen wir: Drei Kopien der Daten, auf zwei verschiedenen Medientypen, davon eine Kopie offsite (z. B. in einem Object-Storage wie Hetzner Storage Box, AWS S3 oder Backblaze B2). So sind Sie auch bei einem kompletten VPS-Ausfall oder Ransomware-Angriff abgesichert.
Testen Sie Ihre Backups regelmäßig durch Wiederherstellung in einer separaten Umgebung. Ein nicht getestetes Backup ist kein Backup, sondern nur eine Vermutung. Richten Sie einen monatlichen Restore-Test auf einer Test-VPS-Instanz ein, um die Wiederherstellungsdauer (RTO) und den Datenverlust (RPO) zu verifizieren.
Stacks sind das Herzstück der modernen Container-Orchestrierung in Portainer. Sie erlauben es, komplexe Multi-Container-Anwendungen deklarativ in einer einzigen docker-compose.yml-Datei zu beschreiben. Portainer kümmert sich um das Deployment, das Networking, die Volumes und die Lifecycle-Verwaltung.
Ein typischer Produktiv-Stack für eine Webanwendung könnte aus folgenden Services bestehen: Nginx als Reverse Proxy, die eigentliche Anwendung (z. B. Node.js oder Python), eine PostgreSQL-Datenbank, ein Redis-Cache und ein Worker-Container für Hintergrundjobs. Alle Services teilen sich ein privates Docker-Netzwerk und sind nur über Nginx von außen erreichbar.
Besonders mächtig ist die Möglichkeit, mehrere Stacks miteinander zu verknüpfen. Portainer erstellt für jeden Stack automatisch ein eigenes Netzwerk, das Sie explizit für andere Stacks freigeben können. So kann ein zentraler Datenbank-Stack von mehreren Anwendungs-Stacks genutzt werden, ohne dass die Konfiguration dupliziert werden muss.
Mit der Funktion "Container presets" (Business Edition) lassen sich Standardkonfigurationen für neue Container definieren, etwa Standard-Umgebungsvariablen, Labels oder Ressourcen-Limits. Dies spart Zeit und reduziert Konfigurationsfehler in größeren Umgebungen mit vielen ähnlichen Workloads.
Der Markt für Container-Management-Tools ist 2026 vielfältiger denn je. Portainer ist nicht die einzige Option, und je nach Anforderung können Alternativen besser geeignet sein. Wir vergleichen die populärsten Lösungen.
Yacht ist eine schlanke, in TypeScript geschriebene Alternative mit moderner UI. Es ist ressourcenschonender als Portainer, bietet aber weniger Funktionen und keine Stack-Verwaltung. Für reine Hobby-Projekte ist Yacht eine Überlegung wert.
Docker Desktop enthält mit dem Docker Dashboard ebenfalls eine grafische Verwaltung, ist aber auf den lokalen Entwickler-Workstation-Use-Case beschränkt. Für VPS-Setups ist Docker Desktop nicht geeignet.
OpenLens und Lens IDE richten sich primär an Kubernetes-Anwender. Sie sind deutlich mächtiger, aber auch komplexer. Wer Kubernetes produktiv betreibt, kommt an Lens kaum vorbei – für reines Docker-Swarm-Management ist Portainer jedoch die bessere Wahl.
Rancher ist die Enterprise-Variante von SUSE und richtet sich an Multi-Cluster-Kubernetes-Setups mit hunderten Nodes. Für die meisten VPS-Anwender ist Rancher überdimensioniert. Die folgende Tabelle fasst die wichtigsten Unterschiede zusammen:
| Tool | Zielgruppe | Komplexität | Ressourcen | Lizenz |
|---|---|---|---|---|
| Portainer CE | Devs, Admins, KMU | Niedrig | Niedrig | Open Source |
| Yacht | Hobby, kleine Projekte | Sehr niedrig | Minimal | MIT |
| Lens | Kubernetes-Admins | Mittel | Mittel | Open Source |
| Rancher | Enterprise | Hoch | Hoch | Open Source |
| Kubernetes Dashboard | Kubernetes-User | Mittel | Niedrig | Apache 2.0 |
Für die meisten VPS-Anwender im Jahr 2026 bleibt Portainer die erste Wahl. Die Kombination aus einfacher Bedienung, geringem Ressourcenverbrauch, großem Funktionsumfang und einer aktiven Community macht das Tool zur idealen Wahl zwischen Kommandozeile und vollwertigen Enterprise-Lösungen.
Die Antwort ist eindeutig: Ja, Portainer lohnt sich auf jedem VPS, auf dem Docker-Container betrieben werden. Die Investition von rund 15 Minuten für die initiale Installation zahlt sich bereits ab dem ersten produktiven Deployment durch Zeitersparnis, weniger Fehler und bessere Übersicht aus.
Besonders wertvoll ist Portainer in Kombination mit einem durchdachten Backup-Konzept, einem Monitoring-Stack aus Prometheus und Grafana sowie einer soliden Sicherheitsstrategie. Wer diese vier Säulen kombiniert, betreibt eine professionelle, skalierbare und vor allem wartbare Container-Infrastruktur auf einem VPS.
hostazar.com empfiehlt für Einsteiger die Community Edition, die alle Grundfunktionen kostenlos bereitstellt. Wer wächst und die Business-Features wie RBAC, Audit-Logs und Multi-Cluster-Management benötigt, kann später nahtlos auf die kommerzielle Variante umsteigen, ohne den Datenstand zu verlieren.
Der Einstieg in die Container-Welt war noch nie so einfach wie heute. Mit einem soliden VPS, installiertem Docker und Portainer als Verwaltungs-UI steht Ihrem produktiven Setup nichts mehr im Wege. Viel Erfolg mit Ihren Containern!
Portainer hat sich in den letzten Jahren als führende Weboberfläche für die Container-Verwaltung etabliert und ist auch 2026 das bevorzugte Tool, wenn es darum geht, Docker-Umgebungen komfortabel über ein grafisches Interface zu steuern. Im Kern handelt es sich um eine schlanke, in Go geschriebene Software, die auf dem Docker Socket aufsetzt und Administratoren eine intuitive Benutzeroberfläche bietet, um Container, Images, Volumes und Netzwerke zu verwalten – ohne jede Aktion über die Kommandozeile ausführen zu müssen.
Besonders auf einem eigenen VPS eröffnet Portainer völlig neue Möglichkeiten. Während man bei gemanagten Cloud-Diensten oft an proprietäre Oberflächen gebunden ist, behält man mit Portainer die volle Kontrolle über seine Infrastruktur. Das Open-Source-Projekt wird von einer aktiven Community gepflegt, regelmäßig aktualisiert und bietet sowohl eine kostenlose Community Edition als auch eine kommerzielle Business Edition mit erweiterten Funktionen wie RBAC, Audit-Logs und Multi-Cluster-Management.
Die Architektur von Portainer ist bewusst minimal gehalten. Ein einzelner Container stellt die Weboberfläche bereit und kommuniziert intern mit dem Docker Daemon. Dadurch ist die Installation in unter zwei Minuten erledigt, und die Ressourcenanforderungen sind selbst auf kleinen VPS-Instanzen mit 2 GB RAM absolut vertretbar. Die Software unterstützt neben Docker auch Docker Swarm, Kubernetes (über die integrierte Edge-Agent-Funktion) und Podman, was sie zu einem zukunftssicheren Werkzeug für hybride Container-Setups macht.
Bevor wir mit der Installation beginnen, ist es wichtig, die minimalen und empfohlenen Systemanforderungen zu kennen. Die gute Nachricht: Portainer ist extrem ressourcenschonend. Die offizielle Dokumentation empfiehlt mindestens 1 GB freien RAM und einen modernen Linux-Kernel (ab Version 4.x), wobei auf aktuellen Distributionen wie Ubuntu 22.04, Debian 12 oder AlmaLinux 9 keinerlei Probleme zu erwarten sind.
| Komponente | Minimum | Empfohlen | Hinweis |
|---|---|---|---|
| CPU | 1 vCore | 2 vCores | Mehr Kerne bei vielen parallelen Builds |
| RAM | 1 GB | 2–4 GB | Reine Portainer-Instanz benötigt ~100 MB |
| Speicher | 10 GB SSD | 40 GB NVMe | Für Images und persistente Volumes |
| Docker Engine | 20.10+ | 26.x oder neuer | CE oder EE beide kompatibel |
| Betriebssystem | Ubuntu 20.04 | Ubuntu 24.04 / Debian 12 | Linux-Distributionen vollständig unterstützt |
Bei der Wahl des VPS-Anbieters sollte man darauf achten, dass NVMe-Speicher und KVM-Virtualisierung verfügbar sind. KVM garantiert, dass verschachtelte Virtualisierung problemlos funktioniert – wichtig, falls man später einmal Docker-in-Docker-Setups oder Kubernetes-Cluster aufsetzen möchte. Prominente Anbieter wie Hetzner, Netcup oder Contabo bieten solche Konfigurationen bereits ab wenigen Euro pro Monat an.
Wer Portainer in einer produktiven Umgebung einsetzt, sollte zusätzlich ein Backup-Konzept für die Portainer-Daten einplanen. Die Konfigurationsdaten werden im Volume portainer_data gespeichert und sollten regelmäßig gesichert werden, da bei einem Verlust sämtliche Stacks, Container-Konfigurationen und Benutzerzugänge verloren gehen.
Die Installation von Portainer ist erfreulich unkompliziert. Zunächst stellen wir sicher, dass Docker auf dem VPS installiert ist. Falls noch nicht geschehen, lässt sich dies mit einem einzigen Befehl auf Ubuntu- oder Debian-Systemen nachholen.
Wir aktualisieren die Paketlisten und installieren die benötigten Abhängigkeiten:
sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg
Anschließend fügen wir das offizielle Docker-Repository hinzu und installieren die Docker Engine:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /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-buildx-plugin docker-compose-plugin
Nach erfolgreicher Installation starten wir das Docker-Subsystem und aktivieren es für den automatischen Start:
sudo systemctl enable --now docker
sudo systemctl status docker
Nun erstellen wir das persistente Volume für Portainer und starten den Container. Wichtig: Der Port 9443 ist der Standardport für das Webinterface und sollte in der Firewall freigegeben werden.
docker volume create portainer_data
docker run -d \
-p 8000:8000 \
-p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Nach wenigen Sekunden ist Portainer unter https://<DEINE-VPS-IP>:9443 erreichbar. Beim ersten Aufruf legt man ein Administratorkonto an, das aus Sicherheitsgründen aus mindestens 12 Zeichen bestehen sollte. Direkt nach dem Login kann man zwischen der lokalen Docker-Umgebung und entfernten Agents wählen – wir wählen zunächst „Get Started", um die lokale Umgebung zu verwalten.
Portainer gliedert seine Oberfläche in mehrere logische Bereiche, die jeweils unterschiedliche Aspekte der Container-Verwaltung abdecken. Das Dashboard bietet einen schnellen Überblick über laufende Container, Ressourcenverbrauch und Systemzustand. Dabei werden CPU-, RAM- und Netzwerkauslastung in Echtzeit visualisiert, sodass Engpässe sofort erkennbar sind.
Im Bereich „Containers" lassen sich sämtliche laufenden, gestoppten und pausierten Container einsehen. Pro Container hat man Zugriff auf Logs, Statistiken, Console-Output, Dateibrowser und die Möglichkeit, einzelne Container zu starten, zu stoppen, neu zu starten oder zu klonen. Auch das Anlegen neuer Container erfolgt geführt über ein Formular, in dem Image, Ports, Volumes, Umgebungsvariablen, Netzwerke und Ressourcenlimits komfortabel konfiguriert werden.
Besonders mächtig ist die Stacks-Funktion. Hierbei handelt es sich um docker-compose-konforme Deployments, die als zusammenhängende Anwendung verwaltet werden. Anstatt also manuell mehrere Container zu starten und miteinander zu verknüpfen, hinterlegt man ein docker-compose.yml im Stack und Portainer kümmert sich um die gesamte Orchestrierung. Ein typischer Stack für eine Webanwendung könnte aus Reverse-Proxy, Anwendungscontainer und Datenbank bestehen.
| Funktion | Zweck | Für Einsteiger? |
|---|---|---|
| App Templates | Vorgefertigte Stacks (WordPress, Nextcloud, etc.) | Ja |
| Stacks | docker-compose Deployments | Mittel |
| Services | Docker Swarm Mode Verwaltung | Fortgeschritten |
| Cluster | Kubernetes Edge-Management | Profi |
| Registries | Docker Hub, private Registries | Ja |
Die Sektion „Images" erlaubt das Pullen neuer Images aus konfigurierten Registries, das Löschen nicht benötigter Images sowie das Verwalten von Build-Cache. Wer eigene Images aus einem Git-Repository bauen möchte, kann hierfür den integrierten Build-Endpoint nutzen, der mit Dockerfile- und Buildkit-Syntax kompatibel ist.
Ein öffentlich erreichbares Portainer-Interface ist ein attraktives Angriffsziel. Wer Portainer auf einem VPS betreibt, sollte daher unbedingt einige grundlegende Sicherheitsmaßnahmen umsetzen. An oberster Stelle steht die Verwendung eines Reverse Proxies mit TLS-Verschlüsselung, idealerweise in Kombination mit automatischer Zertifikatsverwaltung über Let's Encrypt.
Traefik, Caddy oder Nginx lassen sich problemlos vor Portainer schalten. Das nachfolgende Beispiel zeigt eine Traefik-Konfiguration mit automatischer TLS-Ausstellung und IP-Whitelist:
http:
routers:
portainer:
rule: "Host(`portainer.deine-domain.de`)"
service: portainer
entryPoints: websecure
tls:
certresolver: letsencrypt
services:
portainer:
loadBalancer:
servers:
- url: "http://portainer:9000"
Neben TLS sollte man das initiale Admin-Konto nach der Erstellung durch reguläre Benutzerkonten mit eingeschränkten Rechten ersetzen. Portainer bietet ein differenziertes Rollenmodell mit Environment Administrator, Operator und Read-Only User. Für produktive Setups empfiehlt es sich, mehrere Umgebungen anzulegen und pro Projekt eigene Zugriffsrechte zu vergeben.
| Sicherheitsmaßnahme | Priorität | Aufwand |
|---|---|---|
| TLS über Reverse Proxy | Hoch | Niedrig |
| 2FA für alle Benutzer | Hoch | Niedrig |
| Fail2Ban / IP-Whitelisting | Hoch | Mittel |
| Regelmäßige Updates | Hoch | Niedrig |
| Backup von portainer_data | Mittel | Mittel |
Die Aktivierung der Zwei-Faktor-Authentifizierung (2FA) ist eine der wirksamsten Maßnahmen gegen Brute-Force-Angriffe. Portainer unterstützt TOTP-basierte 2FA mit Apps wie Google Authenticator, Authy oder 1Password. Für zusätzlichen Schutz lässt sich der Login-Endpoint über auth_settings in der Konfiguration auch komplett deaktivieren, sodass ein neuer Admin nur über das docker exec-Kommando wieder angelegt werden kann.
Wer mehrere zusammenhängende Container betreibt, kommt um das Konzept der Stacks nicht herum. Ein Stack bündelt mehrere Services, die über docker-compose gestartet, gestoppt und aktualisiert werden. Portainer erkennt docker-compose.yml-Dateien automatisch und stellt sie als verwaltbare Einheit dar.
Ein typischer produktiver Stack für ein Webprojekt könnte so aussehen:
version: "3.9"
services:
web:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./html:/usr/share/nginx/html:ro
- ./conf:/etc/nginx/conf.d:ro
depends_on:
- app
restart: unless-stopped
app:
image: ghcr.io/dein-user/deine-app:latest
environment:
- DATABASE_URL=postgresql://app:secret@db:5432/appdb
depends_on:
- db
restart: unless-stopped
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: appdb
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
volumes:
- db_data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
db_data:
Bei der Arbeit mit Stacks empfiehlt es sich, alle Konfigurationen in einem Git-Repository zu versionieren. Portainer kann Stacks direkt aus einem Git-Repository ausrollen und unterstützt sowohl öffentliche als auch private Repositories mit SSH- oder Token-basierter Authentifizierung. Dadurch lassen sich Stacks deklarativ beschreiben und bei jedem git push automatisch aktualisieren – ein großer Schritt in Richtung GitOps.
Eine weitere Best Practice ist die Nutzung von Secrets und Configs statt der direkten Einbettung von Passwörtern in docker-compose.yml. Portainer erlaubt die zentrale Verwaltung von Secrets, die dann verschlüsselt an die Container ausgeliefert werden. So bleiben sensible Daten auch dann geschützt, wenn das compose-File versehentlich in einem öffentlichen Repository landet.
Eine der größten Stärken von Portainer ist die Fähigkeit, mehrere Docker-Hosts zentral zu verwalten. Während man in der Anfangszeit oft ein Dutzend VPS-Instanzen einzeln per SSH konfigurieren musste, kann man heute mit Portainer Edge Agents eine beliebige Anzahl entfernter Hosts über eine einzige Oberfläche orchestrieren. Dies ist besonders für MSPs, Agenturen und Entwicklerteams interessant, die verteilte Infrastruktur betreiben.
Ein Edge Agent ist ein leichtgewichtiger Container, der auf dem Remote-Host ausgeführt wird und eine ausgehende, verschlüsselte Verbindung zum Portainer-Server aufbaut. Dadurch ist es nicht nötig, eingehende Ports auf den Remote-Hosts freizugeben – ein nicht zu unterschätzender Sicherheitsvorteil. Die Registrierung neuer Agents erfolgt über ein einmaliges Pairing-Token.
docker run -d \
-p 9443:9443 \
--name portainer_edge_agent \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_agent_data:/data \
portainer/agent:latest
Nach dem Start des Agents taucht der Remote-Host automatisch in der Portainer-Oberfläche auf und kann einer Umgebung hinzugefügt werden. Administratoren haben dann die Möglichkeit, Stacks auf dem Remote-Host auszurollen, Logs zentral einzusehen und Container zu verwalten – als wäre es der lokale Docker Daemon. Die Latenz ist dabei minimal, da die Kommunikation über einen persistenten Websocket-Tunnel läuft.
| Setup | Verbindungstyp | Firewall-Freigabe | Sicherheit |
|---|---|---|---|
| Lokale Umgebung | Docker Socket | Keine | Sehr hoch |
| Standard Agent | TCP | 9001 eingehend | Hoch |
| Edge Agent | WebSocket (ausgehend) | Keine | Sehr hoch |
| Kubernetes via Edge | WebSocket (ausgehend) | Keine | Sehr hoch |
Für Setups mit Dutzenden oder Hunderten Hosts empfiehlt sich der Einsatz von Edge Groups. Diese ermöglichen die Bündelung mehrerer Agents zu logischen Gruppen, auf denen dann gemeinsam Stacks ausgerollt werden. Ein typisches Szenario wäre eine Gruppe „Webserver-EU" und „Webserver-US", auf denen identische Stacks deployt werden, aber mit unterschiedlichen Konfigurationen für Loadbalancer und Datenbank-Endpunkte.
Auch die beste Container-Infrastruktur ist nur so zuverlässig wie ihr Backup-Konzept. Portainer selbst speichert seine Konfiguration im Volume portainer_data. Dieses Volume sollte regelmäßig gesichert werden, da sonst bei einem Hardware-Defekt des VPS die gesamte Konfiguration verloren geht.
Ein einfaches Backup lässt sich mit dem nachfolgenden Skript automatisieren:
#!/bin/bash
BACKUP_DIR="/var/backups/portainer"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
docker stop portainer
docker run --rm \
--volumes-from portainer \
-v $BACKUP_DIR:/backup \
busybox tar cvf /backup/portainer_$DATE.tar /data
docker start portainer
# Alte Backups löschen (älter als 14 Tage)
find $BACKUP_DIR -name "portainer_*.tar" -mtime +14 -delete
Für eine ganzheitliche Backup-Strategie empfiehlt sich die 3-2-1-Regel: Drei Kopien der Daten, auf zwei verschiedenen Medientypen, mit einer Kopie offsite. Auf einem VPS lässt sich dies mit Offsite-Backups in einen Object Storage wie Hetzner Storage Box, Backblaze B2 oder S3-kompatible Dienste realisieren. Tools wie restic oder rclone automatisieren den verschlüsselten Transfer.
Nicht vergessen sollte man das Backup der persistenten Volumes der produktiven Container. Während Portainer-Konfiguration wiederherstellbar ist, sind Daten in Datenbank-Volumes oft nicht reproduzierbar. Ein dediziertes Backup-Setup mit pg_dump für PostgreSQL, mysqldump für MySQL oder Volume-Snapshots via Restic sollte daher zum Pflichtprogramm gehören.
Portainer wird in einem agilen Releasezyklus aktualisiert, wobei alle paar Wochen eine neue Version erscheint. Sicherheitsupdates werden dabei priorisiert und oft per Minor-Release verteilt. Die Aktualisierung selbst ist denkbar einfach, da Portainer als einzelner Container betrieben wird.
Der Standard-Update-Prozess sieht wie folgt aus:
docker pull portainer/portainer-ce:latest
docker stop portainer
docker rm portainer
docker run -d \
-p 8000:8000 \
-p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Wer seine Updates noch eleganter gestalten möchte, kann auf Watchtower oder ein eigenes kleines Update-Skript zurückgreifen. Watchtower beobachtet laufende Container und aktualisiert sie automatisch, sobald ein neues Image in der Registry verfügbar ist. Für Portainer selbst empfiehlt sich ein kontrolliertes Vorgehen, um bei einem fehlerhaften Update schnell auf die vorherige Version zurückrollen zu können.
Vor jedem Update sollte ein Backup des portainer_data-Volumes erstellt werden. In den Release-Notes, die im Portainer-Blog und auf GitHub veröffentlicht werden, findet man Hinweise auf Breaking Changes, neue Funktionen und Migrationsschritte. Wer einen produktiven Cluster betreibt, sollte Updates zunächst auf einer Testumgebung validieren, bevor sie in der Produktion ausgerollt werden.
Neben Portainer gibt es eine Reihe weiterer Tools, die ebenfalls die Verwaltung von Docker-Containern vereinfachen. Die bekanntesten Alternativen sind Yacht, Dockge, CasaOS und das kommerzielle Rancher. Jedes dieser Tools hat seine eigenen Stärken, richtet sich aber an leicht unterschiedliche Zielgruppen.
| Tool | Open Source | Zielgruppe | Besonderheit |
|---|---|---|---|
| Portainer CE | Ja | Einsteiger bis Profis | Großes Ökosystem, Multi-Host |
| Yacht | Ja | Heim-Anwender | Modernes UI, klein |
| Dockge | Ja | Compose-Fans | docker-compose Fokus |
| CasaOS | Ja | Heimserver | App-Store, sehr einsteigerfreundlich |
| Rancher | Ja | Enterprise | Schwerpunkt Kubernetes |
Wer einen einzelnen VPS betreibt und eine ausgewogene Mischung aus Funktionsvielfalt und Benutzerfreundlichkeit sucht, ist mit Portainer gut beraten. Yacht und CasaOS richten sich eher an Heim-Anwender, die einen Heimserver in Eigenregie betreiben, während Dockge besonders für Nutzer interessant ist, die ohnehin hauptsächlich mit docker-compose arbeiten. Rancher wiederum ist die richtige Wahl, wenn Kubernetes im Mittelpunkt steht – hierfür gibt es mit Portainer allerdings mittlerweile durchaus konkurrenzfähige Lösungen.
Ein oft unterschätzter Vorteil von Portainer ist das ausgereifte Rechte- und Benutzermanagement. Während viele alternative Tools maximal lokale Administrationskonten unterstützen, erlaubt Portainer die Anlage mehrerer Benutzer mit fein granulierten Berechtigungen, LDAP/AD-Anbindung und OAuth-Integration. Dies macht Portainer auch für den Einsatz in kleinen und mittelständischen Unternehmen zur ersten Wahl.
Die Antwort lautet eindeutig: Ja, Portainer ist 2026 das Mittel der Wahl, um Docker-Umgebungen auf einem VPS produktiv, sicher und wartbar zu betreiben. Die Kombination aus einfacher Installation, ausgereifter Weboberfläche, Multi-Host-Fähigkeit und aktivem Open-Source-Ökosystem ist auf dem Markt nahezu einzigartig. Wer einmal mit Portainer gearbeitet hat, möchte die Kommandozeile für Routineaufgaben nicht mehr missen.
Gleichzeitig ersetzt Portainer die Kommandozeile nicht vollständig. Fortgeschrittene Debugging-Sessions, komplexe Netzwerkkonfigurationen oder das Troubleshooting von Performance-Problemen erfordern weiterhin den direkten Zugriff per SSH. Portainer versteht sich daher am besten als Ergänzung zur Kommandozeile – eine visuelle Oberfläche für den schnellen Überblick und die alltäglichen Wartungsaufgaben.
Wer noch keinen VPS hat und Portainer ausprobieren möchte, kann dies in wenigen Minuten mit einer kleinen Instanz tun. Anbieter wie Hetzner, Netcup oder IONOS stellen Server mit Portainer-Vorinstallationen bereit, und auch über die gängigen Cloud-Plattformen lässt sich Portainer in unter zehn Minuten deployen. Die Lernkurve ist flach, der Funktionsumfang groß – ein ideales Werkzeug für alle, die Container-Technologie produktiv einsetzen möchten.
Docker hat die Art und Weise, wie wir Anwendungen entwickeln, deployen und betreiben, grundlegend revolutioniert. Doch mit der wachsenden Zahl von Containern wird das Management auf der Kommandozeile schnell unübersichtlich. Hier kommt Portainer ins Spiel: Die webbasierte Verwaltungsoberfläche macht die Container-Administration auch für weniger Linux-Experten zugänglich und bietet gleichzeitig Power-Usern tiefe Kontrolle über alle Docker-Ressourcen.
In diesem umfassenden Guide zeigen wir Ihnen Schritt für Schritt, wie Sie Portainer auf einem hostazar.com VPS installieren, konfigurieren und produktiv nutzen. Wir decken sowohl die Community Edition (CE) als auch die kommerzielle Business Edition ab, gehen auf Sicherheitsaspekte ein und zeigen typische Workflows aus der Praxis.
Portainer hat sich seit seiner ersten Veröffentlichung 2017 zum De-facto-Standard für Docker-Management-GUIs entwickelt. Mit über 25 Millionen Downloads und einer aktiven Community ist die Lösung ausgereift, stabil und wird kontinuierlich weiterentwickelt. Die Version 2.x bringt umfassende Kubernetes-Unterstützung mit, sodass Sie später bei Bedarf problemlos in die Cloud-native-Welt wechseln können.
Portainer ist eine Open-Source-Container-Management-Plattform, die als leichtgewichtige Weboberfläche auf Docker aufsetzt. Es abstrahiert die Komplexität der Docker-CLI und bietet eine intuitive Benutzeroberfläche für die Verwaltung von Containern, Images, Netzwerken, Volumes und Stacks. Im Kern besteht Portainer aus zwei Komponenten: dem Portainer-Server (einem schlanken Go-basierten Backend) und dem Portainer-Agent, der optional auf entfernten Docker-Hosts läuft.
Die Vorteile liegen auf der Hand: Administratoren müssen nicht mehr jede Container-Aktion über die Kommandozeile ausführen, sondern erledigen die meisten Aufgaben bequem im Browser. Portainer bietet außerdem Multi-User-Management mit rollenbasierter Zugriffskontrolle, was besonders für Teams und Agenturen interessant ist. Sie können mehrere Docker-Umgebungen (lokal, remote, Swarm, Kubernetes) zentral verwalten und behalten jederzeit den Überblick über Ressourcenverbrauch und Logs.
Für wen lohnt sich Portainer besonders? Wenn Sie auf einem vServer 5-10 oder mehr Container betreiben, ist die Kommandozeile ineffizient. Auch für Entwickler, die ihre Stacks visuell verwalten möchten, ist Portainer ein riesiger Produktivitätsgewinn. Und wenn Sie Kunden oder Kollegen Zugriff auf bestimmte Container geben möchten, ohne ihnen Root-Rechte zu erteilen, ist die rollenbasierte Zugriffskontrolle von Portainer Gold wert.
Bevor wir mit der Installation beginnen, sollten wir die Systemvoraussetzungen klären. Portainer selbst ist extrem ressourcenschonend: Der Server-Container benötigt etwa 50-100 MB RAM und vernachlässigbare CPU-Ressourcen. Die Anforderungen an den Host-Server werden also primär durch die zu verwaltenden Container bestimmt, nicht durch Portainer selbst.
Als Mindestvoraussetzung empfehlen wir einen vServer mit 2 vCPUs, 4 GB RAM und 50 GB SSD-Speicher. Für produktive Umgebungen mit vielen Containern sollten Sie 4 vCPUs und 8 GB RAM einplanen. hostazar.com bietet verschiedene VPS-Tarife, die diese Anforderungen erfüllen – vom Einsteiger-Tariff bis hin zu leistungsstarken Dedicated-Resources-Varianten.
| Komponente | Mindestanforderung | Empfohlen (Produktiv) |
|---|---|---|
| CPU | 2 vCPUs | 4+ vCPUs |
| RAM | 2 GB | 8 GB+ |
| Speicher | 20 GB | 100 GB+ SSD |
| Docker | Version 20.10+ | Aktuelle LTS-Version |
| Betriebssystem | Ubuntu 22.04 LTS | Ubuntu 24.04 LTS |
Bevor Sie Portainer installieren, sollten Sie unbedingt ein aktuelles Betriebssystem mit allen Sicherheitsupdates einspielen. Auf einem frisch aufgesetzten Ubuntu 24.04 LTS sind Docker und Portainer in unter 10 Minuten installiert und einsatzbereit. Wir empfehlen, vor der Portainer-Installation ein regelmäßiges Backup-Setup einzurichten – denn Portainer selbst verwaltet keine Backups, sondern nur die Container.
Die Installation von Docker auf einem modernen Linux-System ist erfreulich unkompliziert. Auf Ubuntu 24.04 LTS gehen Sie wie folgt vor: Zunächst aktualisieren Sie das System und installieren die nötigen Voraussetzungen, danach fügen Sie das offizielle Docker-Repository hinzu und installieren die Docker Engine samt CLI und Containerd-Runtime.
# System aktualisieren
sudo apt update && sudo apt upgrade -y
# Voraussetzungen installieren
sudo apt install -y ca-certificates curl gnupg
# Docker GPG-Key hinzufügen
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Docker-Repository einrichten
echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Docker installieren
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# Docker-Dienst starten und aktivieren
sudo systemctl enable --now docker
# Aktuellen Benutzer zur Docker-Gruppe hinzufügen
sudo usermod -aG docker $USER
newgrp docker
# Installation verifizieren
docker --version
docker run hello-world
Nach der Installation empfehlen wir einen Neustart oder zumindest eine neue SSH-Session, damit die Gruppenmitgliedschaft wirksam wird. Der Test-Befehl "docker run hello-world" lädt ein kleines Test-Image herunter und führt es aus – wenn Sie eine "Hello from Docker!"-Nachricht sehen, ist alles bereit für die Portainer-Installation.
Die Portainer-Installation selbst ist ein Einzeiler, da das gesamte Produkt als Docker-Container ausgeliefert wird. Wir verwenden die Community Edition (CE), die für die meisten Anwendungsfälle völlig ausreichend ist. Für die persistente Speicherung von Portainer-Daten wird ein benanntes Volume verwendet, das auf dem Host-System als /var/lib/docker/volumes/portainer_data gemountet wird.
# Portainer-Volume erstellen
docker volume create portainer_data
# Portainer-Container starten
docker run -d \
-p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
# Container-Status prüfen
docker ps
docker logs portainer
Nach dem Start des Containers ist Portainer unter https://ihre-server-ip:9443 erreichbar. Beim ersten Aufruf werden Sie aufgefordert, ein Admin-Passwort zu setzen – wählen Sie hier unbedingt ein starkes Passwort mit mindestens 12 Zeichen, idealerweise generiert durch einen Passwort-Manager. Direkt nach der Anmeldung landen Sie im Portainer-Dashboard und können die lokale Docker-Umgebung verwalten.
Ein wichtiger Sicherheitshinweis: Das Mounten des Docker-Sockets (/var/run/docker.sock) gibt Portainer volle Kontrolle über alle Docker-Ressourcen des Hosts. Das ist gewollt und nötig, sollte aber bedacht werden. Für maximale Sicherheit in Produktionsumgebungen empfehlen wir, den Portainer-Agent auf einem separaten Docker-Host zu installieren und den Socket-Zugriff zu beschränken.
Nach der Anmeldung präsentiert sich Portainer mit einer klar strukturierten Oberfläche. Die linke Seitenleiste bietet Zugriff auf die wichtigsten Bereiche: Home (Übersicht aller Umgebungen), Environments, Containers, Images, Networks, Volumes, Stacks, Users, Settings. Das Home-Dashboard zeigt auf einen Blick CPU- und RAM-Auslastung, Anzahl der Container und warnt vor potenziellen Problemen.
Im Bereich "Containers" finden Sie eine tabellarische Übersicht aller laufenden und gestoppten Container mit Spalten für Name, Status, Image, IP-Adresse, Ports und Erstellungsdatum. Per Klick auf einen Container gelangen Sie zu detaillierten Informationen wie Logs, Ressourcenverbrauch, Netzwerkkonfiguration und können Aktionen wie Start, Stop, Neustart oder Löschen ausführen.
Besonders mächtig ist der "Stacks"-Bereich: Hier können Sie komplette Docker-Compose-Stacks hochladen oder direkt im integrierten Web-Editor verfassen, mit einem Klick deployen und bei Bedarf aktualisieren. Das ist besonders für Multi-Container-Anwendungen wie Nextcloud, WordPress mit Datenbank oder Monitoring-Stacks mit Prometheus und Grafana ein riesiger Vorteil gegenüber der manuellen Kommandozeile.
Das Deployment eines neuen Containers ist in Portainer denkbar einfach: Über "Containers > Add Container" gelangen Sie zu einem Formular, in dem Sie Image, Ports, Volumes, Umgebungsvariablen und viele weitere Optionen konfigurieren können. Alternativ können Sie einen Stack über "Stacks > Add Stack" definieren und dort ein docker-compose.yml einfügen oder direkt im Editor verfassen.
# Beispiel: WordPress-Stack in Portainer
version: '3.8'
services:
wordpress:
image: wordpress:6.6
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: sicheres-passwort
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
depends_on:
- db
db:
image: mariadb:11
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: sicheres-passwort
MYSQL_ROOT_PASSWORD: root-passwort
volumes:
- db_data:/var/lib/mysql
volumes:
wordpress_data:
db_data:
Nach dem Klick auf "Deploy the Stack" lädt Portainer die Images herunter, erstellt die Container, konfiguriert die Volumes und startet den Stack. Der gesamte Vorgang dauert je nach Image-Größen zwischen 30 Sekunden und wenigen Minuten. Im Anschluss finden Sie alle Container unter "Containers" und können sie einzeln oder als Stack verwalten.
Sicherheit sollte bei jeder Docker-Installation oberste Priorität haben, und Portainer bildet da keine Ausnahme. Die wichtigsten Empfehlungen: Verwenden Sie unbedingt HTTPS für den Zugriff auf die Portainer-Weboberfläche. Portainer generiert standardmäßig ein selbstsigniertes SSL-Zertifikat, das zwar funktioniert, aber in Browsern Warnungen auslöst. Für Produktivumgebungen empfehlen wir die Anbindung eines Let's Encrypt-Zertifikats über einen Reverse Proxy wie Nginx Proxy Manager oder Traefik.
Aktivieren Sie die Zwei-Faktor-Authentifizierung (2FA) für alle Portainer-Admin-Accounts. Portainer unterstützt TOTP-basierte 2FA, kompatibel mit Apps wie Google Authenticator, Authy oder 1Password. So stellen Sie sicher, dass ein gestohlenes Passwort allein nicht ausreicht, um in die Verwaltungsoberfläche einzudringen.
| Sicherheitsmaßnahme | Empfehlung |
|---|---|
| SSL/TLS | Let's Encrypt via Reverse Proxy |
| 2FA | Pflicht für alle Admin-Accounts |
| Firewall | Nur Ports 22, 80, 443, 9443 öffnen |
| Updates | Portainer monatlich aktualisieren |
| Backups | Portainer-Volume regelmäßig sichern |
| Netzwerk | Docker-Netzwerke segmentieren |
Ein weiterer wichtiger Punkt ist die regelmäßige Aktualisierung von Portainer selbst. Neue Versionen bringen nicht nur Features, sondern auch Sicherheitspatches. Ein Update ist in Portainer-CE ein einfacher Vorgang: Container stoppen, neues Image pullen, alten Container durch neuen ersetzen. Idealerweise automatisieren Sie diesen Vorgang mit einem kleinen Update-Script oder nutzen Watchtower als Sidecar-Container.
Eine der Stärken von Portainer ist die Fähigkeit, mehrere Docker-Umgebungen zentral zu verwalten. Sie können lokale Docker-Sockets, entfernte Docker-Daemons über TCP, Docker Swarm Cluster und Kubernetes-Cluster in einer einzigen Oberfläche verwalten. Das ist besonders für wachsende Infrastrukturen interessant, in denen Container auf mehreren Servern laufen.
Um einen entfernten Docker-Host anzubinden, haben Sie zwei Möglichkeiten: Entweder Sie öffnen den Docker-Socket über TCP (mit TLS-Verschlüsselung) und verbinden ihn direkt mit Portainer, oder Sie installieren den Portainer-Agent auf dem Remote-Host. Die Agent-Variante ist sicherer und empfohlen, da der Agent die Kommunikation verschlüsselt und keine offenen Ports auf den Worker-Hosts nötig sind.
# Portainer-Agent auf Remote-Host installieren
docker run -d \
-p 9001:9001 \
--name portainer_agent \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
portainer/agent:latest
Nach der Installation des Agents können Sie in Portainer über "Environments > Add Environment" die Verbindung herstellen. Sie wählen "Agent" als Umgebungstyp, geben die IP-Adresse oder den Hostnamen des Remote-Servers ein und Portainer verbindet sich automatisch. Ab sofort verwalten Sie alle Container des Remote-Hosts aus der gleichen Oberfläche wie die lokalen Container.
Portainer speichert seine Konfiguration in einem Docker-Volume, das Sie regelmäßig sichern sollten. Das Volume enthält alle Stacks, Container-Konfigurationen, Benutzer-Accounts und Einstellungen. Ein Verlust dieses Volumes bedeutet, dass Sie alle Konfigurationen manuell wiederherstellen müssen – was bei komplexen Setups Tage dauern kann.
# Portainer-Volume sichern
docker run --rm \
-v portainer_data:/source:ro \
-v $(pwd):/backup \
alpine tar czf /backup/portainer-backup-$(date +%F).tar.gz -C /source .
# Backup wiederherstellen
docker run --rm \
-v portainer_data:/target \
-v $(pwd):/backup \
alpine sh -c "tar xzf /backup/portainer-backup-2026-01-15.tar.gz -C /target"
# Portainer-Container neu starten
docker restart portainer
Wir empfehlen, das Backup in eine automatisierte Backup-Routine einzubinden, die das Portainer-Volume zusammen mit den Daten-Volumes Ihrer Anwendungen sichert. Bei hostazar.com können Sie zusätzlich Snapshots des gesamten VPS erstellen, die als zusätzliche Sicherheitsebene dienen. Eine 3-2-1-Backup-Strategie mit Off-Side-Kopien in S3 oder einem anderen Standort ist empfehlenswert.
Die Community Edition von Portainer ist für die meisten Anwendungsfälle völlig ausreichend. Sie bietet alle Kernfunktionen, ist Open Source (ZPL-Lizenz) und kann ohne Lizenzkosten produktiv eingesetzt werden. Es gibt jedoch Szenarien, in denen die kommerzielle Business Edition (BE) sinnvoll ist: Unternehmen mit Compliance-Anforderungen, große Teams mit vielen Nutzern oder Setups, die erweiterte Sicherheitsfunktionen benötigen.
Die Business Edition bietet unter anderem RBAC (Role-Based Access Control) mit feiner granulierten Berechtigungen, Audit-Logs für Compliance-Nachweise, SAML/SSO-Integration für zentrale Benutzerverwaltung, gehärtete Images mit regelmäßigen Sicherheitsaudits, priorisierten Support und erweiterte Kubernetes-Funktionen. Die Preise beginnen bei 99 USD pro Node

Praxisnaher Guide für Docker Compose auf dem VPS: Webserver, Datenbank, Reverse Proxy, TLS, Backups, Updates und Sicherheit richtig planen und betreiben.