Compose Spec Deep Dive: Profiles, Extensions und Anchors richtig nutzen

Die Compose Specification ist das Herzstück moderner Docker-Orchestrierung auf Einzelservern. Sie erlaubt es, komplexe Multi-Container-Anwendungen konsistent zu definieren, zu versionieren und flexibel zu deployen. Durch die Nutzung von Features wie Profiles, Extensions und YAML Anchors lassen sich Stacks nicht nur übersichtlicher, sondern auch wiederverwendbar und wartbar gestalten.

1. Grundlagen der Compose Spec

Die Compose Specification beschreibt die Struktur von docker-compose.yml-Dateien und definiert Services, Netzwerke, Volumes, Secrets und Konfigurationen. Sie basiert auf YAML und ermöglicht die deklarative Beschreibung der gewünschten Containerlandschaft.

Wichtige Elemente

  • services: Definieren die Container mit Images, Ports, Volumes und Umgebungsvariablen.
  • networks: Legen die Netzwerke fest, die Container verbinden.
  • volumes: Persistente Speicher für Container.
  • configs und secrets: Verwaltung sensibler Daten.

2. Profiles: Dienste selektiv starten

Profiles erlauben es, bestimmte Services nur in definierten Kontexten zu starten, zum Beispiel dev, staging oder prod. Damit lassen sich Umgebungen sauber trennen und Ressourcen sparen.

Profile-Beispiel

services:
  app:
    image: myapp:latest
    profiles:
      - dev
  db:
    image: postgres:15
    profiles:
      - dev
      - prod

Mit dem Startbefehl können gezielt Profile aktiviert werden:

docker-compose --profile dev up -d

Vorteile

  • Selektives Starten von Services
  • Reduzierte Ressourcennutzung in Entwicklungsumgebungen
  • Klare Trennung zwischen verschiedenen Deployment-Umgebungen

3. YAML Anchors und Aliases

Anchors (&) und Aliases (*) in YAML ermöglichen die Wiederverwendung von Konfigurationen innerhalb der Compose-Datei. Dadurch wird Redundanz reduziert und die Datei bleibt wartbar.

Anchor & Alias Beispiel

x-app-base: &app-base
  image: myapp:latest
  environment:
    - NODE_ENV=production
  restart: unless-stopped

services:
app1:
<<: *app-base
ports:
- "8080:8080"
app2:
<<: *app-base
ports:
- "8081:8080"

Hier definiert x-app-base eine Basis-Konfiguration, die von mehreren Services wiederverwendet wird.

Vorteile

  • Weniger Fehlerquellen durch Duplizierung
  • Zentrale Anpassung von Service-Grundkonfigurationen
  • Bessere Lesbarkeit und Übersicht

4. Extensions: Komplexe Services modular gestalten

Compose Extensions (x-*) ermöglichen die Definition modularer Bausteine, die mehrfach verwendet oder mit Services kombiniert werden können. Sie eignen sich besonders für komplexe Stacks mit wiederkehrenden Konfigurationen.

Extensions Beispiel

x-logging: &logging
  logging:
    driver: "json-file"
    options:
      max-size: "10m"
      max-file: "3"

services:
app:
image: myapp:latest
<<: *logging
worker:
image: worker:latest
<<: *logging

Hier wird eine Logging-Konfiguration als Extension definiert und auf mehrere Services angewendet.

Vorteile

  • Zentrale Verwaltung wiederkehrender Einstellungen
  • Einheitliche Konfiguration für Logging, Netzwerke oder Volumes
  • Erleichtert Wartung und Updates über mehrere Services

5. Kombination von Profiles, Anchors und Extensions

Durch die Kombination aller Features lassen sich Compose Stacks maximal flexibel gestalten. Beispielsweise kann ein Basis-Service per Anchor definiert, mit Logging-Extension erweitert und nur in bestimmten Profiles gestartet werden.

Kombiniertes Beispiel

x-app-base: &app-base
  image: myapp:latest
  environment:
    - NODE_ENV=production
  restart: unless-stopped

x-logging: &logging
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"

services:
app:
<<: [*app-base, *logging]
ports:
- "8080:8080"
profiles:
- dev
- prod

6. Best Practices

  • Nutze Anchors für Basis-Konfigurationen, um Redundanz zu vermeiden.
  • Profiles konsequent für Environment-Trennung einsetzen.
  • Extensions für wiederkehrende Konfigurationen wie Logging, Healthchecks oder Volumes verwenden.
  • Dokumentiere alle Profile und Extensions, damit das Team sie korrekt nutzen kann.
  • Regelmäßig docker-compose config ausführen, um die endgültige Konfiguration zu prüfen.

7. Fehlervermeidung

  • Keine Anchors oder Extensions in externen Dateien verwenden, die nicht geladen werden.
  • Profiles prüfen: Ein Service ohne aktives Profil wird nicht gestartet.
  • Bei komplexen Merges von Anchors und Extensions immer docker-compose config zur Validierung nutzen.

8. Fazit

Mit einem tiefen Verständnis der Compose Spec und den Features Profiles, Anchors und Extensions lassen sich Docker Compose Stacks modular, wiederverwendbar und wartbar gestalten. Teams profitieren von klar strukturierten Stacks, weniger Fehlern und einfacheren Deployments. In produktiven Umgebungen trägt dies maßgeblich zur Stabilität und Übersicht bei.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles