Docker Compose Anleitung
Docker Compose ist ein Tool, mit dem du mehrere Container über eine deklarative YAML-Datei als Dienst-Stack startest. Diese Anleitung zeigt Installation (Docker- und Compose-Varianten), eine einfache docker-compose.yml für WordPress, wie du einen Container mit bash startest, Rootless-Einsatz sowie sicheres Aufräumen (prune) — Schritt für Schritt.
Voraussetzungen
- Linux-Distribution mit aktuellem Kernel (Varianten können Befehle/Package-Namen ändern). Diese Anleitung funktioniert auf vielen Systemen, aber nicht garantiert 1:1 auf jeder Distribution.
- Lokaler Nutzer mit sudo-Rechten für Installation oder bereits konfiguriertes Rootless-Docker/Podman.
- Mindestens 2 GB RAM für WordPress-Beispiel.
- Backup wichtiger Daten vor destruktiven Aktionen.
Schritt 1: Docker & Docker Compose installieren
Für moderne Docker-Installationen enthält Docker Compose v2 als Plugin. Beispiel (Debian/Ubuntu):
# Paketliste aktualisieren und nötige Pakete
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
# Docker GPG-Key und Repo hinzufügen
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) 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-compose-plugin
Prüfe Versionen:
docker --version
docker compose version
Alternative: Podman (rootless) ist eine gute Wahl, wenn du Rootless-Container möchtest; CLI- und compose-Tools verhalten sich ähnlich, aber nicht in allen Details identisch.
Schritt 2: Docker ohne Root (rootless) / Rechte
Um Docker-Befehle ohne sudo zu verwenden: entweder Nutzer zur docker-Gruppe hinzufügen oder Rootless-Setup verwenden.
Nutzer zur docker-Gruppe hinzufügen (Achtung: Gruppenzugriff gilt als erhöhte Berechtigung; Risiko bewusst sein):
sudo usermod -aG docker $USER
# Danach neu einloggen oder `newgrp docker`
Rootless Docker (sicherer): siehe offizielle Anleitung https://docs.docker.com/engine/security/rootless/ — Verhalten kann je Distribution variieren.
Schritt 3: Einfaches Compose-File + WordPress-Hosting
Lege ein Verzeichnis an und erstelle docker-compose.yml:
mkdir wordpress-stack && cd wordpress-stack
cat > docker-compose.yml <<'YML'
version: "3.8"
services:
db:
image: mariadb:10.6
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: example_root_pw
MYSQL_DATABASE: wordpress
MYSQL_USER: wp
MYSQL_PASSWORD: wp_password
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:6.2-php8.1-apache
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wp
WORDPRESS_DB_PASSWORD: wp_password
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
YML
Starte die Dienste:
docker compose up -d
Prüfe Logs:
docker compose logs -f wordpress
Zugriff im Browser: http://localhost:8080
Schritt 4: Ein Container mit bash starten / run bash command
Um interaktiv in einen Container zu gelangen oder einen Einmalbefehl aus composer auszuführen:
- Von laufendem Container bash:
docker exec -it <container_name_or_id> bash
# Falls kein bash vorhanden, versuche sh
docker exec -it <container_name_or_id> sh
- Einen Dienst aus docker-compose mit bash starten:
docker compose run --rm wordpress bash
Das erzeugt einen temporären Container und verbindet dich mit einer Shell.
Schritt 5: Aufräumen (Prune) — WARNUNG vor jedem destruktiven Befehl
Warnung: Die folgenden prune-Befehle löschen unbenutzte Container, Images, Volumes und Netzwerke. Erstelle ein Backup wichtiger Daten (z. B. Volumes exportieren) bevor du fortfährst.
- Alle gestoppten Container entfernen:
docker container prune
- Alle nicht referenzierten Images entfernen:
docker image prune -a
- Alle nicht genutzten Volumes entfernen (Datenverlust möglich) — extra Warnung: Warnung: Entfernt unbenutzte Volumes, dabei gehen gespeicherte Daten verloren. Backup deine Volumes bevor du fortfährst.
docker volume prune
- Komplettes System aufräumen: Warnung: Dieser Befehl kann wichtige Daten löschen. Backup vorher.
docker system prune --all --volumes
Tipp: Vor prune prüfen, welche Volumes/Images vorhanden sind:
docker volume ls
docker images
docker ps -a
Häufige Fehler & Troubleshooting
- Permission denied beim Zugriff auf Docker-Socket: Prüfe membership in docker-Gruppe oder verwende sudo. Achte auf Sicherheits-Implikationen.
- Port already in use: Prüfe mit
ss -tuln | grep :8080oder passe Port in docker-compose.yml an. - Compose-File syntaxfehler:
docker compose configvalidiert das File und zeigt Fehler. - Podman vs Docker: Podman ist rootless-freundlich, aber nicht jedes Docker-Compose-Feature ist 1:1 kompatibel; teste deine Files.
Beachte: Unterschiedliche Distributionen, Kernel-Versionen und Hardware können Verhalten verändern. Nutze offizielle Docs für tiefergehende Probleme und sichere Backups vor destruktiven Aktionen.
Kommst du an dieser Stelle nicht weiter oder funktioniert ein Schritt bei dir anders als beschrieben? Schreib uns einfach kurz, woran es hakt – schreib uns eine E-Mail, wir schauen es uns gemeinsam an.
Passende Themen
- Docker Compose installieren Windows
- Docker installieren mint
- Docker installieren mint
- Podman vs Docker Unterschied
Häufige Fragen
Soll ich Docker oder Podman verwenden?
Beide haben ihre Berechtigung. Podman läuft standardmäßig rootless (potenziell sicherer), Docker hat das größere Ökosystem. Wir benennen die Unterschiede ehrlich statt einer Pauschalempfehlung.
Ist docker system prune gefährlich?
Es kann ungenutzte Container, Images und Volumes löschen - inklusive Daten, die noch gebraucht werden. Vor dem Ausführen immer prüfen, was betroffen ist, und wichtige Daten sichern.
Warum bekomme ich bei Docker eine Permission-Denied-Fehlermeldung?
Meist fehlt der eigene Nutzer in der docker-Gruppe. Das lässt sich beheben, sollte aber mit Bedacht gemacht werden, da Mitglieder dieser Gruppe root-ähnliche Rechte erhalten.