Docker bündelt eine Anwendung mit allem, was sie zum Ausführen benötigt. Auf einem VPS bedeutet dies, dass Sie n8n, eine PostgreSQL-Datenbank, einen Discord-Bot oder ein Überwachungstool mit einem einzigen Befehl installieren können, ohne dass es zu Versionskonflikten zwischen den Komponenten kommt, und diese von einem Server auf einen anderen verschieben können, ohne etwas neu installieren zu müssen. Docker Compose beschreibt das gesamte Setup in einer einzigen, leicht lesbaren Datei.
1. Warum Docker auf einem VPS?
- Isolierung : Jede Anwendung verfügt über eigene Bibliotheken. Die Aktualisierung einer davon beeinträchtigt die andere nicht.
- Reproduzierbarkeit : die Datei
compose.yamlbeschreibt den gesamten Bereitstellungsprozess. Dieselbe Datei funktioniert auch auf einem anderen Server. - Katalog : Die meisten freien Softwareprogramme veröffentlichen ein offizielles, einsatzbereites Image.
Der Nachteil: etwas mehr Speicherbedarf und einige Netzwerkfallen, die weiter unten beschrieben werden. Für einen VPS, auf dem mehrere Dienste laufen, fällt die Bilanz insgesamt sehr positiv aus.
2. Installieren Sie die Docker Engine aus dem offiziellen Repository
Die Pakete docker.io Distributionen hinken oft um mehrere Versionen hinterher und enthalten nicht immer Compose. Installieren Sie die offizielle Version von Docker. Entfernen Sie zunächst etwaige alte Pakete:
for p in docker.io docker-doc docker-compose podman-docker containerd runc; do
apt remove -y $p 2>/dev/null
done
Fügen Sie anschließend das Docker-Repository hinzu und führen Sie dann die Installation durch:
apt update && apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
. /etc/os-release
curl -fsSL https://download.docker.com/linux/$ID/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/$ID $VERSION_CODENAME stable" \
> /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Die Variable $ID ist ubuntu oder debian Je nach Ihrem System: Der gleiche Befehl funktioniert auf beiden.
3. Überprüfen Sie die Installation
docker run --rm hello-world
docker compose version
Der erste Befehl lädt ein Testbild herunter und zeigt eine Begrüßungsmeldung an. Beachten Sie die Syntax docker compose, mit einem Leerzeichen: Dies ist die aktuelle Version, die in Docker integriert ist. Der alte Befehl docker-compose mit einem Bindestrich wird nicht mehr beibehalten.
4. Nutzer und Rechte
Um Docker ohne sudo, fügen Sie Ihren Benutzer der Gruppe hinzu docker, und melden Sie sich anschließend erneut an:
usermod -aG docker alex
docker Dies entspricht den Root-Rechten auf dem Server: Ein Mitglied kann jeden beliebigen Ordner des Systems in einem Container einbinden. Fügen Sie dort ausschließlich vertrauenswürdige Konten hinzu.5. Erstes Projekt mit Docker Compose
Jedes Projekt befindet sich in einem eigenen Ordner mit einer Datei compose.yaml. Beispiel: Das Überwachungstool „Uptime Kuma“, das überprüft, ob Ihre Websites erreichbar sind.
mkdir -p /opt/uptime-kuma && cd /opt/uptime-kuma
cat > compose.yaml <<'EOF'
services:
kuma:
image: louislam/uptime-kuma:1
restart: unless-stopped
volumes:
- ./data:/app/data
ports:
- "127.0.0.1:3001:3001"
EOF
docker compose up -d
Drei Punkte aus dieser Datei stellen bewährte Vorgehensweisen dar, die überall übernommen werden sollten:
- Eine präzise Bilddarstellung (
:1) anstatt:latest, damit ein umfangreiches Update nicht installiert wird, ohne dass Sie dies selbst beschlossen haben. - Ein Band (
./data) für die Daten: Ein Container kann jederzeit gelöscht und neu erstellt werden; lediglich das Volume bleibt bestehen. - Ein Port, der mit … verbunden ist
127.0.0.1: Die Anwendung ist nur über den Server erreichbar und wird von Nginx ordnungsgemäß über HTTPS bereitgestellt.
"3001:3001" ist über das Internet zugänglich, auch wenn UFW dies nicht zulässt. Verlinken Sie auf 127.0.0.1 alles, was nicht für die Öffentlichkeit bestimmt ist. Einzelheiten finden Sie in UFW konfigurieren.6. Eine Anwendung über HTTPS bereitstellen
Am einfachsten ist es, den auf dem Server installierten Nginx als einzigen Einstiegspunkt zu verwenden, mit einem Block pro Anwendung:
server {
server_name status.monsite.fr;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
listen 80;
}
Die beiden Zeilen Upgrade und Connection sind für Anwendungen erforderlich, die WebSockets nutzen, wie beispielsweise Uptime Kuma oder n8n. Beziehen Sie anschließend das Zertifikat mit Certbot: siehe Nginx und HTTPS. Ein vollständiges Beispiel mit Datenbank finden Sie unter n8n auf einem VPS mit Docker installieren.
7. Die Größe der Protokolle begrenzen
Standardmäßig speichert Docker die Protokolle der Container ohne Größenbeschränkung. Ein „geschwätziger“ Container kann den Speicherplatz innerhalb weniger Wochen vollständig belegen. Legen Sie ein Gesamtlimit fest:
cat > /etc/docker/daemon.json <<'EOF'
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
EOF
systemctl restart docker
Die Beschränkung gilt für Container, die nach dieser Änderung erstellt wurden. Erstellen Sie bestehende Container neu mit docker compose up -d --force-recreate.
8. Die Container aktualisieren
cd /opt/uptime-kuma
docker compose pull
docker compose up -d
docker image prune -f
„Compose“ erstellt nur die Container neu, deren Image sich geändert hat; der letzte Befehl löscht die alten, nicht mehr benötigten Images. Lesen Sie die Versionshinweise, bevor Sie zu einer neuen Hauptversion wechseln, insbesondere bei Datenbanken.
9. Speichern
Sichern Sie den Projektordner, der die Compose-Datei und die Volumes enthält. Verwenden Sie bei einer Datenbank keine Rohkopie der Dateien, während diese läuft: Exportieren Sie sie zunächst aus dem Container.
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > /var/backups/n8n.sql.gz
Passen Sie den Namen des Dienstes, des Benutzers und der Datenbank an Ihr Projekt an und übertragen Sie anschließend alle Daten vom Server: siehe Sicherungen mit Borg.
10. Nützliche Befehle
docker compose ps # état des services du projet
docker compose logs -f --tail 100 # journaux en direct
docker compose restart kuma # redémarrer un service
docker compose down # arrêter et supprimer les conteneurs (pas les volumes)
docker stats # consommation CPU et mémoire en direct
docker system df # espace disque utilisé par Docker
Häufig gestellte Fragen
Benötigt Docker viel Arbeitsspeicher?
Docker selbst benötigt nur wenig Speicherplatz, in der Größenordnung von einigen Dutzend Megabyte. Entscheidend ist die Gesamtgröße der Anwendungen. Auf einem VPS mit 2 GB lassen sich zwei oder drei ressourcenschonende Dienste problemlos ausführen; planen Sie 4 GB oder mehr ein, wenn Sie eine Datenbank und Tools wie n8n hinzufügen.
docker-compose oder docker compose?
docker-compose, mit einem Leerzeichen. Es handelt sich um die Version 2, die als Erweiterung in Docker integriert ist. Das alte, in Python geschriebene Programm „docker-compose“ wird nicht mehr weiterentwickelt. Die Dateien bleiben kompatibel.
Funktioniert Docker auf allen VPS?
Auf einem VPS, der auf vollständiger KVM-Virtualisierung basiert, ja, ohne Einschränkungen, da Sie über einen eigenen Linux-Kernel verfügen. Leichte Container-Lösungen wie OpenVZ bereiten hingegen häufig Probleme.
Wie stellt man eine Verbindung zwischen zwei Behältern her?
Die in derselben Compose-Datei deklarierten Dienste nutzen ein internes Netzwerk gemeinsam und werden über ihren Dienstnamen erreicht, beispielsweise postgres:5432. Dazu muss kein Port veröffentlicht werden, was aus Sicherheitsgründen vorzuziehen ist.










