5.1 Netzwerke konfigurieren
Lass uns nochmal genauer anschauen, wie man Netzwerke und Volumes für unsere Multi-Container-Anwendung einrichtet. Das sorgt für eine ordentliche Kommunikation zwischen den Services und eine dauerhafte Speicherung der Daten.
Docker-Netzwerke ermöglichen den Containern, miteinander zu kommunizieren. In unserer Anwendung werden wir ein bridge
-Netzwerk verwenden, um die Verbindung zwischen Frontend, Backend und der Datenbank herzustellen.
Ein Netzwerk erstellen
Wir haben das Netzwerk task-network
in der Datei docker-compose.yml
definiert:
networks:
task-network:
driver: bridge
Wo:
- task-network: der Name des Netzwerks, das für die Kommunikation der Container verwendet wird.
- driver:
bridge
: Netzwerktyp. Dasbridge
-Netzwerk ist der Standardtyp für die Kommunikation von Containern auf demselben Host.
Services mit dem Netzwerk verbinden
Wir haben alle Services in der Datei docker-compose.yml
mit diesem Netzwerk verbunden. Lasst uns sicherstellen, dass jeder Service korrekt verbunden ist:
Beispiel für das Frontend:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
Beispiel für das Backend:
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
Beispiel für die Datenbank:
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
5.2 Volumes konfigurieren
Docker-Volumes ermöglichen es, Containerdaten auf dem Hostsystem zu speichern, um eine langfristige Speicherung sicherzustellen. In unserer Anwendung werden wir ein Volume verwenden, um die Daten der PostgreSQL-Datenbank zu speichern.
Ein Volume erstellen
Wir haben das Volume db-data
bereits in der Datei compose.yaml
definiert:
volumes:
db-data:
Wo:
-
db-data
: der Name des Volumes, das zur Speicherung der PostgreSQL-Datenbankdaten verwendet wird.
Ein Volume mit dem Datenbankservice verbinden
Wir haben das Volume db-data
mit dem Datenbankservice in der Datei docker-compose.yml
verbunden. Stellen wir sicher, dass dies korrekt gemacht wurde:
Beispiel für die Datenbank:
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:
-
volumes
: definiert, welche Volumes mit dem Container verbunden werden. -
db-data:/var/lib/postgresql/data
: verbindet das Volumedb-data
mit dem Verzeichnis/var/lib/postgresql/data
im Container. Dieses Verzeichnis wird von PostgreSQL zur Speicherung von Daten verwendet.
5.3 Vollständige Datei compose.yaml
Zur Klarheit und Vollständigkeit geben wir die vollständige Datei compose.yaml
an, die Netzwerkeinstellungen und Volumes beinhaltet:
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:
Überprüfung der Netzwerk- und Volume-Konfigurationen
Nach der Konfiguration der Netzwerke und Volumes stelle sicher, dass alles korrekt eingestellt ist und funktioniert:
- 1. Container starten:
Terminal
docker compose up
- 2. Netzwerk prüfen:
- Verwende den Befehl
docker network ls
, um sicherzustellen, dass das Netzwerktask-network
erstellt wurde. - Verwende den Befehl
docker network inspect task-network
, um zu überprüfen, dass alle Container mit diesem Netzwerk verbunden sind.
- Verwende den Befehl
- 3. Volumes prüfen:
- Verwende den Befehl
docker volume ls
, um sicherzustellen, dass das Volumedb-data
erstellt wurde. - Verwende den Befehl
docker volume inspect db-data
, um die Details des Volumes zu überprüfen.
- Verwende den Befehl
GO TO FULL VERSION