Docker Compose ha cambiato radicalmente il modo in cui gli sviluppatori affrontano le applicazioni containerizzate, in particolare quando devono coordinare servizi che dipendono gli uni dagli altri. Questo strumento sostituisce la gestione manuale dei container con un flusso di lavoro strutturato basato su YAML, consentendo ai team di definire intere architetture applicative in un unico file di configurazione.
Negli ambienti Ubuntu, ciò si traduce in distribuzioni riproducibili, scalabilità semplificata e riduzione dell’overhead operativo. Questa guida offre una prospettiva aggiornata sull’installazione e sull’utilizzo di Docker Compose, fornendo approfondimenti pratici sulla sua implementazione reale.
Prima di iniziare questo tutorial, assicurati di avere quanto segue:
Distribuire un’istanza di server cloud Ubuntu su Hostman.
Disporre di un account utente con privilegi sudo o accesso root, necessari per installare pacchetti e gestire Docker.
Avere Docker installato e in esecuzione sul server, poiché Docker Compose funziona sopra Docker Engine.
Le applicazioni moderne spesso includono componenti interconnessi come API, database e livelli di caching. Gestire questi elementi singolarmente tramite comandi Docker diventa rapidamente complesso man mano che l’architettura cresce. Docker Compose risolve questo problema permettendo agli sviluppatori di dichiarare tutti i servizi, le reti e i requisiti di storage in un file docker-compose.yml. Questo approccio garantisce coerenza tra gli ambienti, sia che si lavori su una macchina Ubuntu locale sia su un server cloud.
Ad esempio, considera un’applicazione web composta da un backend Node.js, un database PostgreSQL e una cache Redis. Senza Docker Compose, ogni componente richiederebbe un comando docker run separato con parametri di rete precisi. Con Compose, queste relazioni vengono definite una sola volta, consentendo l’avvio e l’arresto dell’intero stack con un singolo comando.
Segui i passaggi seguenti per installare Docker Compose sul tuo sistema Ubuntu.
Docker Compose funziona come un’estensione di Docker, quindi verifica lo stato del servizio:
sudo systemctl status docker
Se non è attivo, avvialo con:
sudo systemctl start docker
Aggiorna l’elenco dei pacchetti per assicurarti di avere accesso alle versioni più recenti del software:
sudo apt-get update
Per garantire una comunicazione sicura con i repository Docker, sono necessari i seguenti pacchetti:
sudo apt-get install ca-certificates curl
Autentica i pacchetti Docker aggiungendo la relativa chiave crittografica:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Questo passaggio garantisce che i pacchetti non siano stati alterati durante il download.
Aggiungi il repository Docker in base alla versione di Ubuntu in uso:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Il comando rileva automaticamente la versione del sistema tramite VERSION_CODENAME.
Aggiorna i repository e installa l’estensione Compose:
sudo apt update
sudo apt-get install docker-compose-plugin
Conferma che Docker Compose sia stato installato correttamente:
docker compose version
Esempio di output:
Docker Compose version v2.33.0
Per dimostrare le funzionalità di Docker Compose, distribuiamo un server web utilizzando Nginx.
Crea un’area di lavoro dedicata:
mkdir ~/compose-demo && cd ~/compose-demo
Crea il file di configurazione:
nano docker-compose.yml
Inserisci il seguente contenuto:
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./app:/usr/share/nginx/html
Spiegazione:
services: elemento radice che dichiara i container
web: nome personalizzato del servizio
image: utilizza l’immagine Nginx basata su Alpine per un ingombro ridotto
ports: mappa la porta 8080 dell’host sulla porta 80 del container
volumes: sincronizza la directory locale app con la root web del container
Costruisci la struttura HTML:
mkdir app
nano app/index.html
Aggiungi il seguente codice HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Docker Compose Test</title>
</head>
<body>
<h1>Hello from Docker Compose!</h1>
</body>
</html>
docker compose up -d
Docker Compose scaricherà automaticamente l’immagine Nginx se mancante e configurerà la rete.
docker compose ps -a
Visita http://localhost:8080 in locale oppure http://<SERVER_IP>:8080 sui server remoti. La pagina di test dovrebbe visualizzare correttamente il contenuto HTML.
In caso di problemi, ispeziona i log del container:
docker compose logs web
Arresta temporaneamente i container:
docker compose stop
Rimuovi tutte le risorse del progetto:
docker compose down
I seguenti comandi migliorano la gestione dei container:
docker compose up --build – Ricostruisce le immagini prima dell’avvio
docker compose pause – Mette in pausa i container senza terminarli
docker compose top – Mostra i processi in esecuzione nei container
docker compose config – Valida e visualizza la configurazione finale
docker compose exec – Esegue comandi nei container attivi
(ad esempio, docker compose exec web nginx -t per testare la configurazione di Nginx)
Docker Compose trasforma l’orchestrazione di applicazioni multi-container da un’attività manuale e complessa a un processo strutturato, ripetibile ed efficiente. Seguendo i passaggi descritti — installazione di Docker Compose, definizione dei servizi in YAML e utilizzo dei comandi essenziali — è possibile gestire applicazioni complesse con sicurezza e controllo.