4.1 Inizializzazione
In questo step configureremo il file compose.yaml
per avviare tutti i servizi della nostra applicazione multiconteiner. Il file compose.yaml
includerà le impostazioni per il frontend, il backend e il database, così come la definizione delle reti e dei volumi.
Definizione della versione di Docker Compose
Iniziamo specificando la versione di Docker Compose. In questo esempio viene utilizzata la versione 3:
version: '3'
4.2 Definizione dei servizi
Servizio 1: Frontend (ReactJS)
Definiamo un servizio per il frontend, che sarà costruito dalla directory frontend e sarà disponibile sulla porta 3000:
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
Servizio 2: Backend (Flask)
Definiamo un servizio per il backend, che sarà costruito dalla directory backend. Dipende dal servizio di database e sarà disponibile sulla porta 5000:
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
Dove:
- depends_on: indica che il servizio backend dipende dal servizio database. Questo significa che il database sarà avviato prima del backend.
- environment: configura le variabili d'ambiente per connettersi al database.
Servizio 3: Database (PostgreSQL)
Definiamo un servizio per il database, utilizzando l'immagine ufficiale postgres:13. Configuriamo le variabili d'ambiente per creare un database e le credenziali dell'utente:
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
Dove:
-
environment
: configura le variabili d'ambiente per creare il database e l'utente al momento dell'avvio del container. -
volumes
: collega il volume db-data per la memorizzazione permanente dei dati.
4.3 Configurazione di reti e volumi
Definiamo le reti e i volumi che verranno utilizzati dai nostri servizi:
networks:
task-network:
driver: bridge
volumes:
db-data:
Dove:
- networks: definisce la rete
task-network
con tipo di driverbridge
, che verrà utilizzata per la comunicazione tra i container. - volumes: definisce il volume
db-data
per la memorizzazione dei dati del database.
4.4 File completo docker-compose.yml
Ora uniamo tutte le parti in un unico file docker-compose.yml
:
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:
Spiegazione delle impostazioni
-
build
: indica il percorso alla directory con ilDockerfile
per costruire l'immagine. -
ports
: apre le porte sull'host per accedere ai servizi. -
depends_on
: specifica che il servizio dipende da un altro per garantire l'ordine di avvio. -
environment
: configura le variabili d'ambiente per i servizi. -
networks
: definisce la rete per la comunicazione tra i container. -
volumes
: definisce i volumi per l'archiviazione persistente dei dati.
4.5 Avvio dell'applicazione
Ora che il file compose.yaml
è configurato, possiamo avviare tutti i servizi con un solo comando:
docker compose up
Questo comando creerà e avvierà i container per il frontend, il backend e il database, utilizzando le impostazioni definite in compose.yaml
.
Verifica dell'avvio
Dopo l'avvio dei container, assicurati che tutti i servizi funzionino correttamente:
- Frontend: apri il browser e vai all'indirizzo http://localhost:3000 per verificare il funzionamento del frontend.
- Backend: apri il browser e vai all'indirizzo http://localhost:5000 per verificare il funzionamento del backend.
- Database: assicurati che il container del database sia avviato e accessibile tramite interazione di rete con il backend.
GO TO FULL VERSION