Docker Compose – Grundlagen

Dienste deklarativ

Sobald mehr als ein Container im Spiel ist, beschreibt man die Umgebung deklarativ in einer Datei – statt jeden Container einzeln von Hand zu starten. Das übernimmt Docker Compose.

Die compose.yaml

Compose liest standardmäßig eine compose.yaml (oder docker-compose.yml) im aktuellen Verzeichnis. Darin werden Services definiert:

services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: mariadb:11
    environment:
      MARIADB_ROOT_PASSWORD: secret
      MARIADB_DATABASE: app

Hinweis: Der früher übliche version:-Eintrag ist mit Compose v2 überflüssig und gilt als veraltet – einfach weglassen.

Starten und stoppen

docker compose up -d      # alle Dienste im Hintergrund starten
docker compose ps         # Status ansehen
docker compose logs -f    # Logs aller Dienste verfolgen
docker compose down       # alles stoppen und aufräumen

Beachte: In Compose v2 heißt der Befehl docker compose (mit Leerzeichen) – das alte docker-compose (mit Bindestrich) ist der abgelöste v1-Client.

Ein Dienst, ein Name

Jeder Service ist unter seinem Namen im internen Netzwerk erreichbar. Der web-Container erreicht die Datenbank also einfach unter dem Hostnamen db – ohne IP-Adressen, ohne Handarbeit.

# Einen Befehl in einem Service ausführen
docker compose exec db mariadb -u root -p

Damit ist die Orchestrierung geklärt. Als Nächstes ein realistisches Setup aus mehreren Diensten.