Creare un File Docker Compose
Docker Compose è uno strumento potente che consente di definire e gestire applicazioni multi-container con un semplice file YAML. Con Docker Compose, puoi descrivere i servizi che compongono la tua applicazione, le reti e i volumi necessari per farli funzionare, e avviare tutto con un solo comando. In questa guida, esploreremo come creare un file Docker Compose (docker-compose.yml
), definire i servizi e gestire un’applicazione multi-container in modo efficiente.
1. Creare un File Docker Compose
Il file Docker Compose è un file YAML che solitamente viene chiamato docker-compose.yml
. Questo file descrive i servizi che Docker deve creare, le reti da utilizzare e i volumi per la persistenza dei dati.
Creazione del File docker-compose.yml
Inizia creando un file chiamato docker-compose.yml
nella directory principale del tuo progetto.
touch docker-compose.yml
2. Struttura Base di un File Docker Compose
La struttura di un file Docker Compose è suddivisa in sezioni principali:
- version: Specifica la versione del formato Compose.
- services: Definisce i servizi (container) che compongono l’applicazione.
- volumes (opzionale): Definisce i volumi utilizzati dai servizi.
- networks (opzionale): Definisce le reti personalizzate utilizzate dai servizi.
Esempio di Struttura Base
version: "3.8"
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
volumes:
db_data:
In questo esempio, il file docker-compose.yml
definisce due servizi: web
(Nginx) e db
(PostgreSQL). La sezione volumes
definisce un volume chiamato db_data
per la persistenza dei dati del database.
3. Definire i Servizi
Ogni servizio rappresenta un container e può essere configurato con diverse opzioni, come l’immagine da utilizzare, le porte da esporre, le variabili d’ambiente e i volumi da montare.
Esempio di Definizione di un Servizio Web
services:
web:
image: nginx
ports:
- "8080:80"
In questo esempio, il servizio web
utilizza l’immagine nginx
e mappa la porta 8080 dell’host alla porta 80 del container.
Esempio di Definizione di un Servizio Database
services:
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
volumes:
- db_data:/var/lib/postgresql/data
Il servizio db
utilizza l’immagine postgres
, imposta la password dell’utente postgres
tramite una variabile d’ambiente e monta un volume chiamato db_data
per la persistenza dei dati del database.
4. Gestire i Volumi
I volumi sono utilizzati per conservare i dati tra riavvii dei container. Nel file Docker Compose, puoi definire i volumi a livello di servizio o globalmente.
Definire un Volume a Livello di Servizio
services:
db:
image: postgres
volumes:
- db_data:/var/lib/postgresql/data
In questo esempio, il volume db_data
è montato sulla directory /var/lib/postgresql/data
all’interno del container PostgreSQL.
Definire un Volume Globalmente
volumes:
db_data:
Questo esempio definisce un volume chiamato db_data
che può essere utilizzato da più servizi.
5. Gestire le Reti
Le reti permettono ai container di comunicare tra loro. Docker Compose crea automaticamente una rete bridge
predefinita per i servizi definiti nel file, ma puoi anche definire reti personalizzate.
Definire una Rete Personalizzata
services:
web:
image: nginx
networks:
- my_network
db:
image: postgres
networks:
- my_network
networks:
my_network:
In questo esempio, entrambi i servizi web
e db
sono connessi a una rete personalizzata chiamata my_network
, permettendo loro di comunicare tra loro.
6. Avviare e Gestire l’Applicazione con Docker Compose
Una volta configurato il file docker-compose.yml
, puoi utilizzare Docker Compose per avviare e gestire l’intera applicazione.
Avviare l’Applicazione
docker-compose up -d
- -d: Esegue i servizi in modalitĂ detach (in background).
Questo comando avvia tutti i servizi definiti nel file docker-compose.yml
.
Fermare l’Applicazione
docker-compose down
Questo comando ferma e rimuove tutti i container, le reti e i volumi creati da Docker Compose.
Altri Comandi Utili
- Visualizzare i Servizi:
docker-compose ps
- Visualizzare i Log:
docker-compose logs
- Riavviare i Servizi:
docker-compose restart
Esempio Completo di File docker-compose.yml
Ecco un esempio completo di un file docker-compose.yml
che definisce un’applicazione web con un database:
version: "3.8"
services:
web:
image: nginx
ports:
- "8080:80"
networks:
- app_network
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
volumes:
- db_data:/var/lib/postgresql/data
networks:
- app_network
volumes:
db_data:
networks:
app_network:
Conclusione
Creare un file Docker Compose ti permette di definire e gestire applicazioni multi-container in modo semplice ed efficiente. Con un unico file YAML, puoi configurare i servizi, le reti e i volumi necessari per far funzionare la tua applicazione. Utilizzando Docker Compose, puoi avviare, fermare e gestire l’intera applicazione con pochi comandi, semplificando il processo di sviluppo e distribuzione.