Blocco A · Fondamenta Docker — Modulo 5 di 16
Docker Compose
lo stack completo in un file
Obiettivi di oggi
- Descrivere web + api + db in
compose.yaml
- Un comando per tutto:
docker compose up -d --build
- Reverse proxy Nginx davanti all'API: un solo punto esposto
Da 5 comandi a 1 file
services:
web: # Nginx: statici + proxy /api/
build: ./web
ports: ["8080:80"]
depends_on: [api]
api: # Flask: NESSUNA porta pubblicata
build: ./api
environment:
DATABASE_URL: postgresql://...@db:5432/pratiche
depends_on: [db]
db:
image: postgres:16
volumes: [dbdata:/var/lib/postgresql/data]
volumes:
dbdata:
Perché è una svolta
- Il file È la documentazione dell'architettura — e sta nel repo, versionato
- Chiunque (collega, fornitore, te tra 6 mesi) ricrea TUTTO con un comando
- Rete e DNS impliciti: i servizi si vedono per nome, solo
web è esposto
Il pattern reverse proxy
location /api/ { proxy_pass http://api:5000; }
- Il browser parla solo con
web: statici + inoltro delle API
- API e DB irraggiungibili da fuori: superficie minima
- Stesso schema che il reverse proxy di frontiera dell'Ente userà verso gli host
Laboratorio (2h)
- Scrivi
nginx.conf, Dockerfile del web, compose.yaml
up -d --build → il Portale mostra le pratiche VERE e il form salva
- Ciclo di vita: ps, logs -f, down/up — i dati restano
Riepilogo e prossimo passo
- Stack completo, riproducibile, documentato da un file
- Ma: credenziali nel file, avvio non deterministico (depends_on ≠ pronto)…
- Modulo 6: healthcheck, .env, ambienti dev e prod