docker compose.md hinzugefügt

This commit is contained in:
2026-05-19 08:52:49 +02:00
parent 43191d5d4c
commit 88e608d4ec
+248
View File
@@ -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 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).