# Docker Compose per lo sviluppo: servizi, volumi e healthcheck

Un `compose.yaml` per database e applicazione: healthcheck, volumi che restano, override di team e il comando che cancella i dati senza chiedere.

> Pagina: https://ui.eneawork.it/blog/come-usare-docker-compose-dev
> Markdown: https://ui.eneawork.it/blog/come-usare-docker-compose-dev.md

*2026-11-01*

Risposta breve: scrivi un compose.yaml con i servizi che il progetto richiede, avvia docker compose up -d e segui l'output con docker compose logs -f. Il file resta nel repository e vale per tutto il team.

Le dimensioni delle immagini sono state lette dall'API dei tag di Docker Hub il 1 novembre 2026: postgres:17-alpine pesa 117.192.593 byte (111,8 MiB) e node:22-alpine 61.337.515 byte (58,5 MiB); l'ultima release di docker/compose è v5.6.1, letta da api.github.com. Il catalogo EneUI misura 111.985 componenti, 1.556 blocchi e 12.808 icone da 1.472 librerie, misurati da /api/stats il 1 novembre 2026.

## Un compose.yaml che parte

services: db: image: postgres:17-alpine environment: POSTGRES_PASSWORD: dev ports: - "5432:5432" volumes: - db-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s retries: 10 app: build: . ports: - "3000:3000" environment: DATABASE_URL: postgres://postgres:dev@db:5432/postgres depends_on: db: condition: service_healthy volumes: db-data:

Due servizi bastano nella maggior parte dei progetti: database e applicazione. Il volume nominato db-data conserva i dati tra un riavvio e l'altro, e depends_on con condition: service_healthy aspetta che Postgres risponda, non solo che il container parta.

## I comandi che si usano ogni giorno

docker compose up -d docker compose ps docker compose logs -f app docker compose exec db psql -U postgres -c '\dt' docker compose down

ps mostra stato e porte, logs -f segue un servizio, exec entra in un container già avviato. down ferma e rimuove i container, ma lascia i volumi: i dati restano.

## Dati locali: quando cancellarli davvero

docker compose down -v docker compose exec db psql -U postgres -c 'select count(*) from users;'

down -v elimina anche i volumi. È il comando giusto per ripartire da un database vuoto e quello sbagliato da lanciare per abitudine: non chiede conferma e non ha undo. Controlla prima con docker volume ls.

## Override per il team

Un compose.override.yaml viene unito in automatico al file base: mount del codice, porte esposte, comando di watch. Tieni l'override fuori dal repository se contiene percorsi personali.

## Limite dichiarato

Su Windows i bind mount passano da WSL2 e costano: un node_modules montato dall'host rallenta l'avvio in modo evidente. La documentazione Docker suggerisce un volume nominato o una cache di build per le dipendenze, non il bind mount.

## Dove continuare

Nel catalogo trovi il system monitor, la card con metrica di avanzamento e i blocchi di dashboard. Per il resto leggi la struttura di un monorepo Next.js, gli indici PostgreSQL utili e il confronto Next.js o Vite.

## FAQ

### Docker Compose è ancora gratuito?

Sì. Il plugin Docker Compose è parte di Docker Desktop e della CLI Docker, con licenza Apache 2.0: nessuna parte del file compose richiede un piano a pagamento.

### Qual è la differenza tra compose.yaml e docker-compose.yml?

Nessuna funzionale: compose.yaml è il nome raccomandato dalla documentazione, docker-compose.yml resta supportato per compatibilità. Scegline uno e non tenere entrambi.

### Perché l'app parte prima che il database sia pronto?

Perché depends_on da solo aspetta solo il container avviato, non il servizio disponibile. Aggiungi condition: service_healthy e un healthcheck con pg_isready, oppure gestisci il retry nel codice.

### Come faccio a vedere i dati del database?

Con docker compose exec db psql -U postgres, che apre una sessione dentro il container già avviato. In alternativa esponi la porta 5432 e collega un client dal sistema host.

### Posso usare Docker Compose in produzione?

Puoi, ma non è il caso d'uso per cui è pensato: manca il controllo su più nodi, il rolling update e il failover. Per lo sviluppo locale è lo strumento giusto; per la produzione serve un orchestratore.
