docker compose.md hinzugefügt
This commit is contained in:
@@ -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).
|
||||
Reference in New Issue
Block a user