Docker Compose Grundlagen Anleitung
Docker Compose Grundlagen
Docker Compose ermöglicht das Definieren und Ausführen von Multi-Container-Anwendungen. Mit einer YAML-Datei konfigurieren Sie alle Services, Netzwerke und Volumes.
Installation
# Docker Compose Plugin (empfohlen)
sudo apt install docker-compose-plugin -y
# Version prüfen
docker compose version
Grundlegende Syntax
# docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
restart: unless-stopped
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: geheim
MYSQL_DATABASE: myapp
volumes:
- db_data:/var/lib/mysql
restart: unless-stopped
volumes:
db_data:
Wichtige Befehle
# Container starten
docker compose up -d
# Container stoppen
docker compose down
# Logs anzeigen
docker compose logs -f
# Container neustarten
docker compose restart
# Status anzeigen
docker compose ps
# Container und Volumes löschen
docker compose down -v
Praktische Beispiele
WordPress mit MySQL
version: '3.8'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: geheim123
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
depends_on:
- db
restart: unless-stopped
db:
image: mysql:8
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: geheim123
MYSQL_ROOT_PASSWORD: rootgeheim
volumes:
- db_data:/var/lib/mysql
restart: unless-stopped
volumes:
wordpress_data:
db_data:
Node.js mit MongoDB und Redis
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
NODE_ENV: production
MONGO_URI: mongodb://mongo:27017/myapp
REDIS_HOST: redis
depends_on:
- mongo
- redis
restart: unless-stopped
mongo:
image: mongo:6
volumes:
- mongo_data:/data/db
restart: unless-stopped
redis:
image: redis:alpine
restart: unless-stopped
volumes:
mongo_data:
Mit Dockerfile bauen
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
Netzwerke
version: '3.8'
services:
frontend:
image: nginx
networks:
- frontend
backend:
image: node
networks:
- frontend
- backend
db:
image: postgres
networks:
- backend
networks:
frontend:
backend:
Umgebungsvariablen
# .env Datei
MYSQL_ROOT_PASSWORD=supersecret
APP_PORT=8080
# docker-compose.yml
services:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
ports:
- "${APP_PORT}:80"
Health Checks
services:
web:
image: nginx
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
Ressourcen-Limits
services:
app:
image: myapp
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
memory: 256M
Nützliche Tipps
# Nur bestimmten Service starten
docker compose up -d db
# Container neu bauen
docker compose up -d --build
# Alte Container entfernen
docker compose down --remove-orphans
# Shell in Container
docker compose exec web bash
Weitere Hilfe
- 📖 Docker Compose Dokumentation
- 📧 E-Mail: support@enjyn.de