Skip to main content

Capitolo 6 – Docker Compose

In questo capitolo vedremo:

  • Cos’è Docker Compose
  • Installazione del plugin Compose
  • Struttura di un file docker-compose.yml
  • Gestione di applicazioni multi-container
  • Comandi principali
  • Variabili d’ambiente
  • Best practice

6.1 Cos’è Docker Compose

Docker Compose è uno strumento che permette di definire e gestire applicazioni multi-container tramite un file YAML.

Con un solo comando è possibile:

  • Creare reti
  • Creare volumi
  • Avviare più container
  • Gestire dipendenze tra servizi

È ideale per ambienti di sviluppo e piccole/medie infrastrutture.


6.2 Verifica installazione

Docker Compose è incluso come plugin nelle versioni recenti di Docker.

Verifica:

docker compose version

Se il comando risponde con una versione, Compose è correttamente installato.


6.3 Struttura base di docker-compose.yml

Esempio semplice con Nginx:

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

Salvare il file come:

docker-compose.yml

6.4 Avviare un progetto Compose

Dalla directory dove si trova il file:

docker compose up -d

Parametri:

  • up → crea e avvia i servizi
  • -d → modalità detached (background)

Verifica container attivi:

docker compose ps

6.5 Fermare e rimuovere i servizi

Fermare i container:

docker compose stop

Fermare e rimuovere container, reti e configurazioni:

docker compose down

Rimuovere anche i volumi:

docker compose down -v

6.6 Esempio applicazione multi-container (Web + Database)

Esempio con Nginx e MySQL:

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: esempio
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

In questo esempio:

  • Viene creata automaticamente una rete
  • I servizi possono comunicare usando il nome del servizio (es. db)
  • Il volume db_data salva i dati del database

6.7 Variabili d’ambiente con file .env

Creare un file .env nella stessa directory:

MYSQL_ROOT_PASSWORD=superpassword

Nel file docker-compose.yml:

environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

Compose caricherà automaticamente le variabili dal file .env.


6.8 Ricostruire i servizi

Se modifichi il Dockerfile:

docker compose up -d --build

Forzare la ricreazione dei container:

docker compose up -d --force-recreate

6.9 Visualizzare i log

Log di tutti i servizi:

docker compose logs

Seguire i log in tempo reale:

docker compose logs -f

Log di un singolo servizio:

docker compose logs web

6.10 Scalare un servizio

Esempio:

docker compose up -d --scale web=3

Questo avvia 3 istanze del servizio web.


Best Practice

  • Non usare latest in produzione
  • Separare ambienti (dev, staging, prod)
  • Usare file .env per password e configurazioni
  • Versionare sempre il file docker-compose.yml
  • Utilizzare volumi per dati persistenti
  • Limitare CPU e RAM nei servizi critici

Conclusione

Ora sai:

  • Cos’è Docker Compose
  • Gestire applicazioni multi-container
  • Usare variabili d’ambiente
  • Scalare servizi
  • Gestire reti e volumi automaticamente

Nel prossimo capitolo vedremo come mettere in produzione un'applicazione Docker con reverse proxy e HTTPS.