Files
cheat-sheets/docker compose.md
2026-05-19 08:52:49 +02:00

5.0 KiB
Raw Permalink Blame History

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 CLIKommandos

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 / BindMounts

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

restartPolicy

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 ProjektKommandos

# 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

Wenn du willst, kann ich dir daraus eine druckbare A4CheatSheetVersion im Markdown- oder PDFStil bauen, zugeschnitten auf deine typischen Stacks (z.B. PostgreSQL + Redis + Traefik).