← Zurück

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

  1. Passwörter ändern! Alle ÄNDERN_SIE_DIESES_PASSWORT ersetzen
  2. Volumes nutzen für persistente Daten
  3. Netzwerke trennen für mehr Sicherheit
  4. .env Datei für sensible Daten:
# docker-compose.yml
environment:
  MYSQL_PASSWORD: ${DB_PASSWORD}
# .env
DB_PASSWORD=mein_sicheres_passwort
  1. Starten:
docker-compose up -d
docker-compose logs -f