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

248 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 CLIKommandos
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 / BindMounts
```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
```
### restartPolicy
```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 ProjektKommandos
```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 A4CheatSheetVersion im Markdown- oder PDFStil bauen, zugeschnitten auf deine typischen Stacks (z.B. PostgreSQL + Redis + Traefik).