5.0 KiB
5.0 KiB
Hier ist ein kompaktes Docker Compose Cheat Sheet, das du direkt in der Shell bzw. in deiner Doku nutzen kannst. devhints
Grundstruktur docker-compose.yml
version: "3.8"
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
environment:
- NGINX_HOST=localhost
depends_on:
- redis
redis:
image: redis:7-alpine
restart: unless-stopped
Wichtige Felder: dev
- services: Definition der Container.
- image: Fertiges Image verwenden.
- build: Image per Dockerfile bauen.
- ports: Port-Mapping host:container.
- volumes: Volumes oder Bind-Mounts.
- environment / env_file: Umgebungsvariablen.
- depends_on: Startreihenfolge / Health-Abhängigkeiten.
- restart: Neustart-Policy (no, always, on-failure, unless-stopped).
Wichtige CLI‑Kommandos
Neuere Docker Versionen verwenden docker compose statt docker-compose (beides meist verfügbar). blog.devops
# Projekt starten (Foreground)
docker compose up
# Projekt starten (Detached)
docker compose up -d
# Neu bauen und starten
docker compose up --build -d
# Alles stoppen und Ressourcen entfernen
docker compose down
# Nur Container stoppen (aber nicht löschen)
docker compose stop
# Gestoppte Container wieder starten
docker compose start
# Logs aller Services
docker compose logs
# Live-Logs, nur bestimmter Service
docker compose logs -f web
# Aktuelle Container im Projekt
docker compose ps
# Neu bauen ohne zu starten
docker compose build
# Shell in laufendem Container
docker compose exec web /bin/sh
# oder
docker compose exec web bash
# Einmaligen Befehl in neuem Container ausführen
docker compose run --rm web echo "test"
Typische Compose-Optionen (services)
Image bauen oder verwenden
services:
app:
# Aus Dockerfile im aktuellen Verzeichnis
build: .
# oder detaillierter:
build:
context: ./app
dockerfile: Dockerfile.dev
target: dev
worker:
# Fertiges Image
image: ubuntu:22.04
Ports
services:
web:
ports:
- "8080:80" # host:container
expose:
- "3000" # nur für andere Services, nicht nach außen
Volumes / Bind‑Mounts
services:
db:
image: postgres:16
volumes:
- db_data:/var/lib/postgresql/data # Named Volume
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro # Bind-Mount
volumes:
db_data:
Environment / env_file
services:
app:
environment:
APP_ENV: production
DEBUG: "false"
# oder alternative Schreibweise
# environment:
# - APP_ENV=production
# - DEBUG=false
env_file:
- .env
- app.env
depends_on inkl. Health
services:
db:
image: postgres:16
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
start_period: 20s
app:
image: my/app
depends_on:
db:
condition: service_healthy
restart‑Policy
services:
worker:
image: my/worker
restart: unless-stopped # oder: "no", "always", "on-failure"
command / entrypoint
services:
app:
image: my/app
command: ["bundle", "exec", "thin", "-p", "3000"]
# oder
# command: bundle exec thin -p 3000
entrypoint: ["/app/start.sh"]
Nützliche Projekt‑Kommandos
# Konfiguration prüfen (inkl. Merge von mehreren Files)
docker compose config
# Nur bestimmte Services starten
docker compose up -d web db
# Nur einen Service neu bauen
docker compose build web
# Volumes beim down mit löschen
docker compose down -v
# Nur Images, die von compose gebaut wurden, löschen
docker compose down --rmi local
# Service skalieren (V2 Syntax)
docker compose up -d --scale worker=3
Kurzer Überblick als Tabelle
| Bereich | Beispiel / Zweck |
|---|---|
| Start | docker compose up -d |
| Stop | docker compose down |
| Logs | docker compose logs -f web |
| Shell | docker compose exec web /bin/sh |
| Build | docker compose build |
| Konfig check | docker compose config |
| Ports | ports: ["8080:80"] |
| Volumes | volumes: ["./code:/app"] |
| Env | environment: { APP_ENV: prod } |
| Abhängigkeit | depends_on: ["db"] |
Wenn du willst, kann ich dir daraus eine druckbare A4‑Cheat‑Sheet‑Version im Markdown- oder PDF‑Stil bauen, zugeschnitten auf deine typischen Stacks (z.B. PostgreSQL + Redis + Traefik).