4.1 Initialisierung
In diesem Schritt konfigurieren wir die Datei compose.yaml
, um alle Services unserer Multi-Container-Anwendung zu starten. Die Datei compose.yaml
wird Konfigurationen für das Frontend, Backend und die Datenbank sowie die Definition von Netzwerken und Volumes enthalten.
Definition der Docker Compose-Version
Wir beginnen mit der Angabe der Docker Compose-Version. In diesem Beispiel wird Version 3 verwendet:
version: '3'
4.2 Definition der Services
Service 1: Frontend (ReactJS)
Wir definieren einen Service für das Frontend, der aus dem Verzeichnis frontend erstellt wird und unter Port 3000 verfügbar ist:
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
Service 2: Backend (Flask)
Wir definieren einen Service für das Backend, das aus dem Verzeichnis backend erstellt wird. Dieser Service hängt vom Datenbankservice ab und wird unter Port 5000 verfügbar sein:
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
Wo:
- depends_on: gibt an, dass der Backend-Service vom Datenbankservice abhängt. Das bedeutet, dass die Datenbank gestartet wird, bevor das Backend gestartet wird.
- environment: konfiguriert Umgebungsvariablen für die Verbindung zur Datenbank.
Service 3: Database (PostgreSQL)
Wir definieren einen Service für die Datenbank und verwenden das offizielle Image postgres:13. Wir konfigurieren Umgebungsvariablen, um die Datenbank und die Benutzerdaten zu erstellen:
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
Wo:
-
environment
: konfiguriert Umgebungsvariablen, um die Datenbank und den Benutzer beim Starten des Containers zu erstellen. -
volumes
: bindet das Volume db-data für die dauerhafte Speicherung der Daten.
4.3 Einrichtung von Netzwerken und Volumes
Wir definieren die Netzwerke und Volumes, die von unseren Services verwendet werden:
networks:
task-network:
driver: bridge
volumes:
db-data:
Wo:
- networks: definiert das Netzwerk
task-network
mit dem Treibertypbridge
, das für die Kommunikation zwischen Containern verwendet wird. - volumes: definiert das Volume
db-data
zur Speicherung von Daten der Datenbank.
4.4 Komplette Datei docker-compose.yml
Jetzt fassen wir alle Teile in einer Datei docker-compose.yml
zusammen:
version: '3'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
networks:
task-network:
driver: bridge
volumes:
db-data:
Erklärung zu den Einstellungen
-
build
: gibt den Pfad zum Verzeichnis mitDockerfile
für das Erstellen des Images an. -
ports
: öffnet Ports auf dem Host für den Zugriff auf Dienste. -
depends_on
: gibt an, dass der Dienst von einem anderen abhängt, um die Startreihenfolge sicherzustellen. -
environment
: konfiguriert Umgebungsvariablen für Dienste. -
networks
: definiert ein Netzwerk für die Kommunikation zwischen Containern. -
volumes
: definiert Volumes für die dauerhafte Speicherung von Daten.
4.5 Anwendung starten
Jetzt, da die Datei compose.yaml
konfiguriert ist, können wir alle Dienste mit einem Befehl starten:
docker compose up
Dieser Befehl erstellt und startet Container für das Frontend, Backend und die Datenbank mit den in compose.yaml
definierten Einstellungen.
Überprüfung des Starts
Nach dem Starten der Container stelle sicher, dass alle Dienste korrekt funktionieren:
- Frontend: Öffne einen Browser und gehe zu http://localhost:3000, um das Frontend zu überprüfen.
- Backend: Öffne einen Browser und gehe zu http://localhost:5000, um das Backend zu überprüfen.
- Datenbank: Stelle sicher, dass der Datenbank-Container läuft und über die Netzanbindung mit dem Backend zugänglich ist.
GO TO FULL VERSION