Nytrix Nytrix
Start Produkte Standorte Über uns Blog FAQ Anmelden
Nytrix Nytrix
Anmelden
vServer

Docker Compose für Einsteiger — Multi-Container-Setups sauber aufsetzen

Aktualisiert 24.05.2026 7 Min. Lesezeit

Warum Docker Compose?

Sobald eine Anwendung aus mehr als einem Container besteht — etwa eine Web-App plus Datenbank plus Cache — wird das manuelle Starten mit docker run schnell unübersichtlich. Du musst dir Ports, Volumes, Umgebungsvariablen und die Reihenfolge merken und jeden Container einzeln hochfahren. Genau hier setzt Docker Compose an: Du beschreibst den gesamten Stack einmal in einer Datei namens docker-compose.yml und steuerst ihn danach mit einem einzigen Befehl.

Compose ist Teil von Docker und wird in aktuellen Versionen als Plugin mitgeliefert. Du rufst es über docker compose (mit Leerzeichen) auf. Ältere Installationen nutzen noch das separate docker-compose mit Bindestrich — funktional sind beide nahezu identisch.

Der Aufbau der docker-compose.yml

Die Datei ist in YAML geschrieben. YAML ist einrückungssensitiv, das heißt die Verschachtelung wird ausschließlich über Leerzeichen (keine Tabs) ausgedrückt. Halte dich konsequent an zwei Leerzeichen pro Ebene, dann ersparst du dir die meisten Fehlermeldungen. Eine minimale Datei besteht aus einem Block services, in dem jeder Dienst als eigener Eintrag steht.

services: web: image: nginx:latest ports: - "8080:80"

Dieses Beispiel definiert einen einzelnen Dienst web, der das offizielle Nginx-Image verwendet und Port 80 im Container auf Port 8080 des Hosts veröffentlicht. Mehr braucht es für den Anfang nicht.

services, volumes und networks

Die drei wichtigsten Top-Level-Blöcke sind schnell erklärt:

Ein praktischer Beispiel-Stack

Schauen wir uns einen realistischen Stack aus drei Diensten an: ein Webserver, eine PostgreSQL-Datenbank und ein Adminer als Datenbank-Oberfläche. Lege dafür eine Datei docker-compose.yml in einem leeren Ordner an.

services: web: image: nginx:latest ports: - "8080:80" depends_on: - db networks: - app db: image: postgres:16 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - dbdata:/var/lib/postgresql/data networks: - app adminer: image: adminer:latest ports: - "8081:8080" networks: - app volumes: dbdata: networks: app:

Ein paar Dinge sind hier bewusst gewählt. Das Datenbank-Passwort steht nicht im Klartext in der Datei, sondern wird über ${DB_PASSWORD} aus einer separaten .env-Datei im selben Ordner gezogen — dort schreibst du eine Zeile wie DB_PASSWORD=einsicheresPasswort. So landen Geheimnisse nicht versehentlich in einem Git-Repository. Das benannte Volume dbdata sorgt dafür, dass deine Datenbankinhalte erhalten bleiben, und depends_on startet die Datenbank vor dem Webserver.

Starten, stoppen, nachsehen — up und down

Wechsle in den Ordner mit deiner docker-compose.yml und starte den kompletten Stack im Hintergrund:

docker compose up -d

Das Flag -d (detached) sorgt dafür, dass die Container im Hintergrund laufen und dein Terminal frei bleibt. Die wichtigsten weiteren Befehle:

Wenn du die YAML-Datei änderst, führst du einfach erneut docker compose up -d aus. Compose erkennt, welche Container sich geändert haben, und ersetzt nur diese.

Images aktualisieren

Container-Images bekommen regelmäßig Updates, etwa für Sicherheitslücken. Den aktuellen Stand holst du dir mit:

docker compose pull docker compose up -d

Der erste Befehl lädt neuere Versionen der in der Datei genannten Images herunter, der zweite startet die betroffenen Container mit dem frischen Image neu. Anschließend lohnt sich ein docker image prune, um alte, nicht mehr genutzte Images aufzuräumen und Speicherplatz freizugeben. Ein Tipp aus der Praxis: Verwende statt latest möglichst konkrete Versions-Tags wie postgres:16. So weißt du immer, welche Version läuft, und ein Update passiert kontrolliert und nicht unbemerkt.

Docker in einem LXC-Container mit Nesting

Wer Docker nicht auf einem klassischen KVM-Server, sondern in einem LXC-Container betreiben will, braucht zwei Voraussetzungen: Nesting und keyctl müssen aktiviert sein. Nesting erlaubt es, innerhalb des LXC-Containers weitere Container (eben Docker) laufen zu lassen; keyctl wird von einigen Container-Laufzeiten für die Schlüsselverwaltung benötigt. Fehlt eines davon, scheitern viele Images schon beim Start mit kryptischen Berechtigungsfehlern.

Bei den vServern von Nytrix auf LXC-Basis sind nesting und keyctl bereits aktiviert, sodass Docker und Docker Compose ohne zusätzliche Konfiguration laufen. Du installierst Docker dann ganz normal nach der offiziellen Anleitung für deine Distribution. Ein Punkt bleibt zu beachten: Der ausgehende SMTP-Port 25 ist standardmäßig gesperrt — wenn ein Container Mails versenden soll, nutze einen externen Mail-Dienst über einen anderen Port.

Mit Nytrix umsetzen

Für einen eigenen Docker-Stack brauchst du Root-Zugriff und etwas Leistung. Die vServer von Nytrix bringen genau das mit: vollen Root-Zugriff per SSH, SSD- bzw. NVMe-Speicher und 5 TB Traffic pro Monat inklusive. Docker läuft auf den LXC-Tarifen dank aktiviertem Nesting und keyctl sofort, und CPU sowie RAM lassen sich per Hot-Plug nachrüsten, wenn dein Stack wächst.

Zum Ausprobieren genügt der No-IP-Tarif für 1,99 EUR mit 4 vCore, 4 GB RAM und 40 GB Speicher; er nutzt eine geteilte Subdomain und Caddy mit automatischem HTTPS. Wer eine eigene IPv4 braucht, startet mit BASIC-4 für 9,99 EUR, BASIC-6 für 17,00 EUR oder BASIC-8 für 25,50 EUR. Als Betriebssystem kannst du Debian 12 oder Ubuntu 24.04 neu installieren, und über die KVM-Konsole kommst du auch dann auf den Server, wenn ein Dienst mal hakt. Für Datensicherungen gibt es das Smart Backup als einmalige Option für 2,50 EUR — oder du schreibst dein eigenes Backup-Skript und legst die Sicherungen auf einem FTP Storage ab. Bei Nytrix gilt Prepaid ohne Mindestlaufzeit: Du lädst Guthaben auf, buchst und kannst jederzeit wieder kündigen. Weitere Anleitungen findest du im Blog.

#Docker Compose #Container #vServer #LXC #DevOps

Bereit zum Loslegen?

Im Nytrix-Dashboard findest du alle Produkte zum direkt Bestellen — prepaid, ohne Mindestlaufzeit.

Zur Startseite