EMZETT.
Login

Docker Compose: Mehrere Container gemeinsam starten

Kurz: Docker Compose beschreibt in einer Datei mehrere Container, Netze und Volumes und startet sie mit einem Befehl; ideal für Web-App mit Datenbank in Entwicklung und kleinen Servern.

Genauer: Eine Anwendung besteht oft aus mehreren Teilen: Web-App, Datenbank, Cache, Reverse-Proxy. Mit einzelnen docker run-Befehlen wird das unübersichtlich. Docker Compose fasst alles in einer compose.yaml zusammen.

Im Detail

Beispiel

services:
  web:
    build: .
    ports:
      - "127.0.0.1:3000:3000"
    environment:
      DATABASE_URL: postgres://app:geheim@db:5432/app
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres:16
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: geheim
      POSTGRES_DB: app
    volumes:
      - dbdaten:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app"]
      interval: 5s
volumes:
  dbdaten:

Die Dienste erreichen sich über ihren Namen (db). Compose legt ein gemeinsames Netzwerk an.

Wichtige Befehle

docker compose up -d          # starten (im Hintergrund)
docker compose logs -f web    # Logs verfolgen
docker compose ps             # Status
docker compose exec db psql -U app   # Befehl im Container
docker compose down           # stoppen und entfernen
docker compose down -v        # zusätzlich Volumes löschen (Daten weg!)
docker compose up --build     # neu bauen

Ältere Syntax: docker-compose (mit Bindestrich).

Konfiguration und Sicherheit

  • Geheimnisse nicht ins Repository schreiben: .env-Datei (in .gitignore), env_file: oder Docker Secrets.
  • Ports nur dort veröffentlichen, wo nötig; interne Dienste (Datenbank) nicht nach außen öffnen (127.0.0.1: oder gar keine Portfreigabe).
  • Volumes für persistente Daten; Backups einplanen.
  • Versionen festlegen (postgres:16 statt latest).
  • Healthchecks und restart: unless-stopped für Stabilität.
  • Mit Profilen und Override-Dateien (compose.override.yaml) trennt man Entwicklung und Produktion.

Grenzen

Compose läuft auf einem Rechner. Für viele Server, automatische Skalierung und Ausfallsicherheit nutzt man Kubernetes oder Docker Swarm. Für Heimserver und kleine Projekte ist Compose meist ideal. Lerne zuerst Docker-Grundlagen, dann Compose.

Siehe auch: Docker, Docker Volumes und Netzwerke, Kubernetes-Grundlagen, Docker: port is already allocated, env-Dateien