Docker Compose ist ein Tool zur Definition und Verwaltung von Multi-Container-Docker-Anwendungen. Mit Docker Compose können Sie Anwendungen, die aus mehreren Containern bestehen, in einer einzigen YAML-Datei definieren und diese mit einfachen Befehlen starten, stoppen und verwalten.
Docker Compose kann einfach installiert werden, wenn Docker bereits auf dem System läuft.
Befehl:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Befehl:
docker-compose --version
Ausgabe:
docker-compose version 1.29.2, build 5becea4c
Die docker-compose.yml
-Datei definiert die Dienste,
Netzwerke und Volumes, die für die Anwendung benötigt werden.
Beispiel: Einfache
docker-compose.yml
-Datei
version: '3.1'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
Erklärung: Diese Datei definiert zwei Dienste:
web
und db
. Der web
-Dienst
verwendet das Nginx-Image und mappt den Host-Port 8080 auf den
Container-Port 80. Der db
-Dienst verwendet das MySQL-Image
und setzt das Root-Passwort auf example
.
Befehl:
docker-compose up -d
Erklärung: Dieser Befehl startet alle in der
docker-compose.yml
-Datei definierten Dienste im
Hintergrund.
Befehl:
docker-compose down
Erklärung: Dieser Befehl stoppt alle laufenden Dienste und entfernt die zugehörigen Container.
Befehl:
docker-compose ps
Ausgabe:
Name Command State Ports
----------------------------------------------------------------------------
myapp_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
myapp_web_1 nginx -g daemon off; Up 0.0.0.0:8080->80/tcp
Befehl:
docker-compose logs
Erklärung: Dieser Befehl zeigt die Logs aller Dienste an.
Datei: docker-compose.yml
version: '3.8'
services:
web:
build: ./web
ports:
- "8080:80"
volumes:
- ./web:/usr/share/nginx/html
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: example
POSTGRES_PASSWORD: example
POSTGRES_DB: exampledb
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Erklärung: Diese Datei definiert zwei Dienste:
web
und db
. Der web
-Dienst wird
aus einem Dockerfile im Verzeichnis ./web
erstellt und
verwendet Bind Mounts für die Webinhalte. Der db
-Dienst
verwendet das PostgreSQL-Image und definiert Umgebungsvariablen für die
Datenbankkonfiguration. Ein Volume db-data
wird erstellt,
um die Datenbankdaten zu persistieren.
Docker Compose ermöglicht es, Abhängigkeiten zwischen Diensten zu definieren, sodass Dienste in der richtigen Reihenfolge gestartet werden.
Beispiel:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
Erklärung: In diesem Beispiel wird der
web
-Dienst erst gestartet, nachdem der
db
-Dienst gestartet wurde.
Docker Compose ermöglicht das einfache Skalieren von Diensten, um mehrere Instanzen eines Dienstes auszuführen.
Befehl:
docker-compose up -d --scale web=3
Erklärung: Dieser Befehl startet drei Instanzen des
web
-Dienstes.
Docker Compose bietet eine leistungsstarke und benutzerfreundliche Möglichkeit, Multi-Container-Anwendungen zu definieren und zu verwalten. Durch die Verwendung einer einfachen YAML-Datei können Entwickler und Administratoren komplexe Anwendungsumgebungen mit mehreren Diensten effizient starten, stoppen und verwalten. Im nächsten Kapitel werden Best Practices für den Einsatz von Docker in der Produktion behandelt.