::: info
Docker Compose permette di definire e gestire applicazioni multi-container. Seguire uno standard di stesura garantisce la portabilità del codice tra ambienti diversi (Sviluppo vs Produzione) e facilita il debugging tramite l'astrazione di reti e volumi.
:::
Un file Compose professionale deve essere autocontenuto e ben commentato. Ecco il template di riferimento che adotteremo per ogni nuovo tool nel laboratorio.
# docker-compose.yaml standard
services:
app-name:
image: vendor/image-name:latest
container_name: app-core
restart: unless-stopped
# 1. Network Isolation
networks:
- backend_net
- proxy_net
# 2. Environment Management
env_file: .env
environment:
- NODE_ENV=${ENVIRONMENT}
# 3. Persistence
volumes:
- ./data:/app/data
- /etc/localtime:/etc/localtime:ro
# 4. Resource Hardening
deploy:
resources:
limits:
cpus: '0.50'
memory: 512M
# 5. Healthcheck (Automated Recovery)
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
networks:
backend_net:
internal: true # Rete isolata senza accesso a internet
proxy_net:
external: true # Rete condivisa con il Reverse Proxy
.env)Mai inserire password, chiavi API o percorsi specifici direttamente nel file YAML.
.env nella stessa cartella.Distinguiamo tra due tipi di mount:
db_data:/var/lib/mysql)../config:/app/config). Ideali per file di configurazione che devi modificare a mano./etc/localtime:ro per sincronizzare il fuso orario del container con il server host.Non usare la rete di default.
internal: true. Il database non deve mai essere raggiungibile dall'esterno del cluster Docker.| Azione | Comando | Note |
|---|---|---|
| Deploy | docker compose up -d |
Avvio in modalità detached (background). |
| Update | docker compose pull && docker compose up -d |
Aggiorna le immagini e riavvia solo se necessario. |
| Logs | docker compose logs -f --tail=100 |
Debugging in tempo reale. |
| Cleanup | docker compose down --volumes |
Rimuove tutto, inclusi i dati (usare con cautela!). |
:latest in produzione. Usa tag specifici (es. :1.2.4) per evitare che un aggiornamento automatico rompa la compatibilità.unless-stopped per i servizi server. Evita always se non vuoi che un container in crash continuo saturi i log al riavvio del server.cpus e memory, un memory leak in un container potrebbe causare l'intervento dell'OOM (Out Of Memory) Killer del kernel Linux, abbattendo l'intero host.Tags: #Docker #DockerCompose #InfrastructureAsCode #DevOps #BestPractices*