Docker Compose
Überblick / Definition¶
Docker Compose ist ein Werkzeug zur Definition und Ausführung von Multi-Container-Anwendungen.
Anstatt einzelne Container manuell zu starten, wird eine gesamte Anwendung (z. B. Webserver + Datenbank) in einer YAML-Datei (docker-compose.yml) beschrieben und mit einem einzigen Befehl gestartet.
Kernkonzept: Was löst Docker Compose?¶
Ohne Docker Compose:
- mehrere
docker runBefehle notwendig - Reihenfolge und Abhängigkeiten müssen manuell beachtet werden
- Netzwerke und Konfiguration müssen separat erstellt werden
Mit Docker Compose:
- zentrale Konfigurationsdatei
- automatischer Start aller Services
- integriertes Netzwerk
- Abhängigkeiten werden berücksichtigt
Aufbau einer docker-compose.yml¶
Eine Compose-Datei besteht typischerweise aus:
- services → Container (z. B. Web, DB)
- networks → Kommunikation zwischen Containern
- volumes → persistente Daten
Beispiel¶
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
Erklärung¶
| Element | Bedeutung |
|---|---|
services |
definiert alle Container |
web |
Name des Containers |
image |
welches Image verwendet wird |
ports |
Port-Mapping (Host:Container) |
environment |
Umgebungsvariablen |
👉 Beide Container laufen im selben Netzwerk und können sich gegenseitig erreichen.
Ablauf mit Docker Compose¶
Typischer Workflow:
docker-compose up
flowchart LR
A["docker-compose.yml"] --> B["docker-compose up"]
B --> C["Netzwerk wird erstellt"]
C --> D["Container werden gestartet"]
D --> E["Services laufen zusammen"]
Vorteile von Docker Compose¶
- einfache Verwaltung komplexer Anwendungen
- einheitliche Konfiguration
- schnelle Reproduzierbarkeit
- geeignet für Entwicklung und Testing
- einfache Skalierung:
docker-compose up --scale web=3
Dockerfile – Grundlage eines Images¶
Ein Dockerfile beschreibt, wie ein Docker-Image gebaut wird.
👉 Unterschied:
- Dockerfile → erstellt ein Image
- Docker Compose → startet mehrere Container
Aufbau eines Dockerfiles¶
Ein Dockerfile besteht aus Befehlen, die schrittweise ein Image aufbauen.
Beispiel¶
# Basis-Image
FROM python:3.8-slim
# Arbeitsverzeichnis setzen
WORKDIR /app
# Dateien kopieren
COPY . /app
# Abhängigkeiten installieren
RUN pip install -r requirements.txt
# Startbefehl
CMD ["python", "app.py"]
Wichtige Dockerfile-Befehle¶
| Befehl | Bedeutung |
|---|---|
FROM |
Basis-Image |
WORKDIR |
Arbeitsverzeichnis |
COPY |
Dateien ins Image kopieren |
RUN |
Befehle beim Build ausführen |
CMD |
Startbefehl des Containers |
Zusammenspiel: Dockerfile + Docker Compose¶
flowchart TD
A["Dockerfile"] --> B["Image"]
B --> C["Docker Compose"]
C --> D["Container"]
- Dockerfile erstellt das Image
- Docker Compose nutzt dieses Image, um Container zu starten
Praktisches Beispiel¶
Eine typische Webanwendung:
- Frontend → Webserver (nginx)
- Backend → App (z. B. Python)
- Datenbank → MySQL
👉 Alle drei werden in einer Compose-Datei definiert und gemeinsam gestartet.
Prüfungsrelevanz¶
Wichtig für die Prüfung:
- Unterschied:
- Dockerfile = Image bauen
- Docker Compose = Container orchestrieren
- Aufbau einer
docker-compose.yml - Bedeutung von:
servicesportsenvironment- Grundbefehl:
docker-compose up
Häufige Fehler¶
❌ Docker Compose erstellt Images automatisch
→ nur, wenn build: definiert ist
❌ Container sind automatisch verbunden
→ nur innerhalb des gleichen Compose-Projekts
❌ Dockerfile und Compose sind das Gleiche
→ falsch, unterschiedliche Aufgaben
Zusammenfassung¶
- Dockerfile definiert, wie ein Image gebaut wird
- Docker Compose definiert, wie mehrere Container zusammenarbeiten
👉 Gemeinsam ermöglichen sie:
- reproduzierbare Umgebungen
- einfache Entwicklung komplexer Systeme
- schnelle Bereitstellung von Anwendungen