Docker Compose Templates
Docker Compose Templates
Fertige docker-compose.yml Dateien zum Kopieren und Anpassen.
🌐 Nginx Webserver
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./html:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ssl:/etc/nginx/ssl:ro
📝 WordPress + MySQL
version: '3.8'
services:
wordpress:
image: wordpress:latest
container_name: wordpress
restart: unless-stopped
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: ÄNDERN_SIE_DIESES_PASSWORT
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
depends_on:
- mysql
mysql:
image: mysql:8
container_name: wordpress-db
restart: unless-stopped
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: ÄNDERN_SIE_DIESES_PASSWORT
MYSQL_ROOT_PASSWORD: ROOT_PASSWORT_ÄNDERN
volumes:
- mysql_data:/var/lib/mysql
volumes:
wordpress_data:
mysql_data:
☁️ Nextcloud + MariaDB + Redis
version: '3.8'
services:
nextcloud:
image: nextcloud:latest
container_name: nextcloud
restart: unless-stopped
ports:
- "8080:80"
environment:
MYSQL_HOST: mariadb
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: ÄNDERN_SIE_DIESES_PASSWORT
REDIS_HOST: redis
NEXTCLOUD_ADMIN_USER: admin
NEXTCLOUD_ADMIN_PASSWORD: ADMIN_PASSWORT_ÄNDERN
NEXTCLOUD_TRUSTED_DOMAINS: "localhost cloud.example.com"
volumes:
- nextcloud_data:/var/www/html
- nextcloud_config:/var/www/html/config
depends_on:
- mariadb
- redis
mariadb:
image: mariadb:10
container_name: nextcloud-db
restart: unless-stopped
environment:
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: ÄNDERN_SIE_DIESES_PASSWORT
MYSQL_ROOT_PASSWORD: ROOT_PASSWORT_ÄNDERN
volumes:
- mariadb_data:/var/lib/mysql
redis:
image: redis:alpine
container_name: nextcloud-redis
restart: unless-stopped
volumes:
nextcloud_data:
nextcloud_config:
mariadb_data:
🐋 Portainer (Docker-Verwaltung)
version: '3.8'
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
volumes:
portainer_data:
🐘 PostgreSQL + pgAdmin
version: '3.8'
services:
postgres:
image: postgres:15-alpine
container_name: postgres
restart: unless-stopped
environment:
POSTGRES_DB: app
POSTGRES_USER: app_user
POSTGRES_PASSWORD: PASSWORT_ÄNDERN
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
pgadmin:
image: dpage/pgadmin4:latest
container_name: pgadmin
restart: unless-stopped
environment:
PGADMIN_DEFAULT_EMAIL: admin@example.com
PGADMIN_DEFAULT_PASSWORD: PASSWORT_ÄNDERN
ports:
- "5050:80"
depends_on:
- postgres
volumes:
postgres_data:
🔴 Redis + Redis Commander
version: '3.8'
services:
redis:
image: redis:alpine
container_name: redis
restart: unless-stopped
command: redis-server --requirepass PASSWORT_ÄNDERN
volumes:
- redis_data:/data
ports:
- "6379:6379"
redis-commander:
image: rediscommander/redis-commander:latest
container_name: redis-commander
restart: unless-stopped
environment:
REDIS_HOSTS: local:redis:6379:0:PASSWORT_ÄNDERN
ports:
- "8081:8081"
depends_on:
- redis
volumes:
redis_data:
🐬 MySQL + phpMyAdmin
version: '3.8'
services:
mysql:
image: mysql:8
container_name: mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ROOT_PASSWORT_ÄNDERN
MYSQL_DATABASE: app
MYSQL_USER: app_user
MYSQL_PASSWORD: USER_PASSWORT_ÄNDERN
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
restart: unless-stopped
environment:
PMA_HOST: mysql
PMA_USER: root
PMA_PASSWORD: ROOT_PASSWORT_ÄNDERN
ports:
- "8080:80"
depends_on:
- mysql
volumes:
mysql_data:
🍃 MongoDB + Mongo Express
version: '3.8'
services:
mongodb:
image: mongo:latest
container_name: mongodb
restart: unless-stopped
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: ROOT_PASSWORT_ÄNDERN
volumes:
- mongo_data:/data/db
ports:
- "27017:27017"
mongo-express:
image: mongo-express:latest
container_name: mongo-express
restart: unless-stopped
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: ROOT_PASSWORT_ÄNDERN
ME_CONFIG_MONGODB_URL: mongodb://root:ROOT_PASSWORT_ÄNDERN@mongodb:27017/
ports:
- "8081:8081"
depends_on:
- mongodb
volumes:
mongo_data:
🐍 Python Flask App
version: '3.8'
services:
flask:
build: .
container_name: flask-app
restart: unless-stopped
ports:
- "5000:5000"
volumes:
- ./app:/app
environment:
FLASK_ENV: development
FLASK_DEBUG: 1
Dazugehöriges Dockerfile:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
⚛️ Node.js Express App
version: '3.8'
services:
node:
build: .
container_name: node-app
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- ./src:/app/src
- /app/node_modules
environment:
NODE_ENV: development
Dazugehöriges Dockerfile:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
📧 Mailhog (E-Mail Testing)
version: '3.8'
services:
mailhog:
image: mailhog/mailhog:latest
container_name: mailhog
restart: unless-stopped
ports:
- "1025:1025" # SMTP
- "8025:8025" # Web-Interface
💡 Tipps
- Passwörter ändern! Alle
ÄNDERN_SIE_DIESES_PASSWORTersetzen - Volumes nutzen für persistente Daten
- Netzwerke trennen für mehr Sicherheit
.envDatei für sensible Daten:
# docker-compose.yml
environment:
MYSQL_PASSWORD: ${DB_PASSWORD}
# .env
DB_PASSWORD=mein_sicheres_passwort
- Starten:
docker-compose up -d
docker-compose logs -f