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).