Files
laboratori-cloud/labs/lab-03-compute/reference/healthcheck-syntax.md
Luca Sacchi Ricciardi 23a9ffe443 feat(lab-03): complete Phase 4 - Compute & EC2 lab
Phase Plans (5 files):
- 04-RESEARCH.md: Domain research on Docker limits, healthchecks, EC2 parallels
- 04-VALIDATION.md: Success criteria and validation strategy
- 04-01-PLAN.md: Test infrastructure (RED phase)
- 04-02-PLAN.md: Diátxis documentation
- 04-03-PLAN.md: Infrastructure implementation (GREEN phase)

Test Scripts (6 files, 1300+ lines):
- 01-resource-limits-test.sh: Validate INF-03 compliance
- 02-healthcheck-test.sh: Validate healthcheck configuration
- 03-enforcement-test.sh: Verify resource limits with docker stats
- 04-verify-infrastructure.sh: Infrastructure verification
- 99-final-verification.sh: End-to-end student verification
- run-all-tests.sh: Test orchestration with fail-fast
- quick-test.sh: Fast validation (<30s)

Documentation (11 files, 2500+ lines):
Tutorials (3):
- 01-set-resource-limits.md: EC2 instance types, Docker limits syntax
- 02-implement-healthchecks.md: ELB health check parallels
- 03-dependencies-with-health.md: depends_on with service_healthy

How-to Guides (4):
- check-resource-usage.md: docker stats monitoring
- test-limits-enforcement.md: Stress testing CPU/memory
- custom-healthcheck.md: HTTP, TCP, database healthchecks
- instance-type-mapping.md: Docker limits → EC2 mapping

Reference (3):
- compose-resources-syntax.md: Complete deploy.resources reference
- healthcheck-syntax.md: All healthcheck parameters
- ec2-instance-mapping.md: Instance type mapping table

Explanation (1):
- compute-ec2-parallels.md: Container=EC2, Limits=Instance Type, Healthcheck=ELB

Infrastructure:
- docker-compose.yml: 5 services (web, app, worker, db, stress-test)
  All services: INF-03 compliant (cpus + memory limits)
  All services: healthcheck configured
  EC2 parallels: t2.nano, t2.micro, t2.small, t2.medium, m5.large
- Dockerfile: Alpine 3.19 + stress tools + non-root user

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 15:16:58 +02:00

194 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Reference: Docker Compose Healthcheck Syntax
Riferimento completo per la configurazione degli healthchecks.
## Sezione healthcheck
### Struttura Completa
```yaml
services:
service_name:
healthcheck:
test: ["CMD", "command", "arg1", "arg2"]
interval: 30s
timeout: 30s
retries: 3
start_period: 0s
```
## Parametri
### test (Required)
Comando da eseguire per verificare la salute.
**Formato CMD:**
```yaml
test: ["CMD", "wget", "--spider", "-q", "http://localhost/health"]
```
**Formato CMD-SHELL:**
```yaml
test: ["CMD-SHELL", "curl -f http://localhost/ || exit 1"]
```
**Formato NONE:**
```yaml
test: ["NONE"]
```
Disabilita healthcheck ereditato dall'immagine.
### interval
Frequenza di esecuzione del test.
```yaml
interval: 5s # Ogni 5 secondi
interval: 10s # Ogni 10 secondi
interval: 30s # Ogni 30 secondi (default)
interval: 1m # Ogni minuto
```
**Validità:**
- Minimo: `1s` (1 secondo)
- Massimo: Nessuno
- Default: `30s`
### timeout
Tempo massimo per completare il test.
```yaml
timeout: 2s # 2 secondi
timeout: 5s # 5 secondi (default)
timeout: 30s # 30 secondi
```
**Nota:** Se il test supera il timeout, conta come fallimento.
### retries
Numero di fallimenti consecutivi prima di marcare unhealthy.
```yaml
retries: 1 # 1 fallimento = unhealthy
retries: 3 # 3 fallimenti = unhealthy (default)
retries: 5 # 5 fallimenti = unhealthy
```
**Calcolo del tempo unhealthy:**
```
tempo_totale = (interval + timeout) × retries
```
Esempio con `interval: 10s, timeout: 5s, retries: 3`:
- Check 1: 0s - 5s
- Check 2: 10s - 15s
- Check 3: 20s - 25s
- Unhealthy dopo: 25s
### start_period
Grace period prima di contare retries verso unhealthy.
```yaml
start_period: 0s # Nessun grace period (default)
start_period: 5s # 5 secondi di grace
start_period: 10s # 10 secondi di grace
start_period: 30s # 30 secondi di grace
```
**Comportamento:**
- Durante `start_period`: Fallimenti non contano
- Dopo `start_period`: `retries` inizi a contare
## Esempi per Tipo di Servizio
### HTTP Service (Nginx)
```yaml
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"]
interval: 10s
timeout: 5s
retries: 3
start_period: 5s
```
### Database (PostgreSQL)
```yaml
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres || exit 1"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
```
### Cache (Redis)
```yaml
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 3
```
### TCP Connection
```yaml
healthcheck:
test: ["CMD-SHELL", "nc -z localhost 8080 || exit 1"]
interval: 15s
timeout: 2s
retries: 3
```
### File Check
```yaml
healthcheck:
test: ["CMD-SHELL", "test -f /tmp/ready || exit 1"]
interval: 5s
timeout: 1s
retries: 5
```
## Stati di Salute
### Ciclo di Vita
```
created → starting → healthy
unhealthy
```
**Transizioni:**
| Da | A | Condizione |
|----|---|------------|
| created | starting | Container avviato con healthcheck |
| starting | healthy | `retries` consecutivi passano |
| starting | unhealthy | `retries` consecutivi falliscono (dopo start_period) |
| healthy | unhealthy | `retries` consecutivi falliscono |
| unhealthy | healthy | 1 check passa |
### Ispezionare Stato
```bash
# Stato corrente
docker inspect lab03-web --format '{{.State.Health.Status}}'
# Output: healthy / unhealthy / starting
# Exit code dell'ultimo check
docker inspect lab03-web --format '{{.State.Health.ExitCode}}'
# Output: 0 (success) o !0 (failure)
### Vedi Anche
- Tutorial: Implementare Healthchecks
- How-to: Custom Healthcheck