diff --git a/docker compose.md b/docker compose.md new file mode 100644 index 0000000..1d263ce --- /dev/null +++ b/docker compose.md @@ -0,0 +1,248 @@ +Hier ist ein kompaktes Docker Compose Cheat Sheet, das du direkt in der Shell bzw. in deiner Doku nutzen kannst. [devhints](https://devhints.io/docker-compose) + +*** + +## Grundstruktur docker-compose.yml + +```yaml +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](https://dev.to/maiobarbero/docker-compose-cheat-sheet-2kgi) + +- 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](https://blog.devops.dev/docker-compose-cheat-sheet-b47495fe3762) + +```bash +# 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 + +```yaml +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 + +```yaml +services: + web: + ports: + - "8080:80" # host:container + expose: + - "3000" # nur für andere Services, nicht nach außen +``` + + + +### Volumes / Bind‑Mounts + +```yaml +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 + +```yaml +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 + +```yaml +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 + +```yaml +services: + worker: + image: my/worker + restart: unless-stopped # oder: "no", "always", "on-failure" +``` + + + +### command / entrypoint + +```yaml +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 + +```bash +# 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"]` | + + [devhints](https://devhints.io/docker-compose) + +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). \ No newline at end of file