Premessa importante: questa scheda formativa non ha l’ambizione (né lo scopo) di approfondire in dettaglio tutti gli aspetti tecnico/funzionali legati a questo potente tool di gestione. Lo scopo, semmai, è quello di fornire alcuni elementi operativi utili all’utente per operare, in modo elementare ma efficace, tramite tale strumento. |
Abbiamo precedentemente spiegato in modo semplice a cosa serva e perché sia utile il tool Docker Compose in un ambiente dove siano presenti applicazioni basate sull’ambiente di virtualizzazione Docker. Qui su inDomus l’elenco è ampio: tante le applicazioni distribuite e istanziate in questo modo; al di là della domotica personale, comunque, gli ambiti di applicazione sono tantissimi.
In questa scheda vediamo assieme come si utilizza, a grandi linee, questo strumento.
QUESTIONE DI CONTAINER
Solitamente le pagine Internet dedicate alle più disparate applicazioni distribuite in modalità container Docker forniscono tutte le informazioni utili a “modellare” il comando Docker per l’istanziamento dell’applicazione. Prendiamo il caso dell’HUB per domotica personale Home Assistant: la pagina su come installarlo su Docker descrive – per i vari ambiti in cui è in esecuzione Docker (Linux, Windows, macOS eccetera) – come definire tale comando.
Un comando “tipo” per istanziare Home Assistant Core per esempio su Docker su Raspberry Pi (vedi nostra guida) appare più o meno come segue:
sudo docker run --init -d --name="home-assistant" -e "TZ=Europe/Rome" -v /home/homeassistant/.homeassistant:/config --net=host --restart always home-assistant:stable
nel quale viene indicato:
–name | per indicare il nome del container |
-e | per passare in input alcune variabili d’ambiente |
-v | per montare come volumi le nostre directory/file locali |
–net | per indicare il tipo di rete |
–restart | per indicare il comportamento di riavvio del container |
infine, il nome dell’immagine container da utilizzare, in questo caso homeassistant:stable.
Lanciando il domando, l’immagine verrebbe scaricata e immediatamente istanziata sulla base dei parametri specificati.
PASSARE A DOCKER COMPOSE
Come spiegato nella scheda dedicata a cos’è e a cosa serve Docker Compose, questo tool permette di evitare di utilizzare un comando strutturato come quello sopra spiegato (o più d’uno), cosa utile per diversi motivi che non staremo a ripetere.
Va da sé che, volendo istanziare una nuova app Docker, più che del comando ci interessi il codice YAML corrispondente da aggiungere alla configurazione di Docker Compose. Tale codice recepisce le caratteristiche del comando di lancio manuale.
Dopo aver facilmente installato Docker Compose sullo stesso host ospitante Docker, la prima cosa da fare è definire dunque un file docker-compose.yaml.
Successivamente all’installazione del tool va creata una directory qualunque nel quale ospitare tale file (l’esempio che segue è dedicato al mondo Raspberry Pi OS/Raspberry Pi o genericamente Linux, ma su ambienti Windows o altro è possibile fare la stessa cosa semplicemente creando una cartella dentro la quale poi creare il file):
mkdir -p ~/esempio-compose nano ~/esempio-compose/docker-compose.yaml
copiamo dunque nell’editor che si aprirà il seguente codice:
services:
home-assistant:
container_name: home-assistant
image: ghcr.io/home-assistant/home-assistant:stable
volumes:
- ~/homeassistant/.homeassistant:/config
environment:
- TZ=Europe/Rome
network_mode: host
restart: always
Al termine, uscire salvando (CTRL+X, Y, invio).
Ciò che abbiamo creato è il corrispettivo YAML per Docker Compose del comando di lancio Docker di cui sopra.
Commentiamo il tutto.
In primis specifichiamo la versione del compose file che andremo a scrivere (version). Noi utilizzeremo la versione 3; maggiori informazioni utili alla scelta della versione da utilizzare possono essere trovate qui.
Subito sotto definiamo il blocco “services” nel quale andranno elencati appunto tutti i servizi che andranno utilizzati in questo stack (nel nostro caso – per il momento – solo Home Assistant). Nell’esempio abbiamo quindi indicato il nome del servizio “home-assistant“.
Successivamente definiamo il nome da assegnare al container e l’immagine da utilizzare tramite “image“; con “-volumes” e “environment” vengono definiti i volumi e variabili d’ambiente. “network_mode” ci permette invece di indicare il tipo di network così come fatto nel comando con “–net“. Infine, con “restart” viene indicata a docker la modalità di riavvio, nel comando indicata con “–restart”
Ora ipotizziamo di dover istanziare, sullo stesso Raspberry, anche il servizio “Caddy” (vedi nostre guide).
In questo caso il solito comando manuale di avvio del container sarebbe più o meno così:
sudo docker run --init -d --name="caddy" -e "TZ=Europe/Rome" -v ~/caddy/Caddyfile:/etc/caddy/Caddyfile -v ~/caddy/data:/data --restart always -p 443:443 caddy:latest
modificando quindi il file docker-compose.yaml precedentemente creato, come segue:
services:
home-assistant:
container_name: home-assistant
image: homeassistant/home-assistant:stable
volumes:
- /home/homeassistant/.homeassistant:/config
environment:
- TZ=Europe/Rome
network_mode: host
restart: always
caddy:
image: caddy:latest
container_name: caddy
ports:
- "443:443"
environment:
- "TZ=Europe/Rome"
volumes:
- "~/caddy/Caddyfile:/etc/caddy/Caddyfile"
- "~/caddy/data:/data"
restart: always
Sulla falsariga di quanto già fatto per Home Assistant abbiamo aggiunto un nuovo servizio (“caddy“): oltre ai parametri già visti anche nell’esempio precedente, abbiamo aggiunto anche “ports“, il quale che ci permette di indicare quali porte del container esporre e come esporle.
AVVIARE LO STACK
A questo punto, invece di eseguire i comandi manuali che istanzierebbero i due container, è sufficiente eseguire lo stack del quale abbiamo informato Docker Compose tramite il file YAML.
Per eseguirlo, il comando da ricordare è uno e piuttosto semplice. Eseguendolo dall’interno della stessa cartella nel quale è presente il file docker-compose.yaml (il che lascia intuire che, volendo, si potrebbero definire più stack autonomi e indipendenti), il comando è:
docker compose up -d
L’opzione “up” permetterà di creare l’immagine e tirare su il/i servizi, mentre “-d” indicherà di far partire il tutto in background (detached).
Finito!
Docker Compose provvederà a far tutto da sé in base a quanto indicato nel file di configurazione YAML.
“docker-compose” o “docker compose“?
Il modo più recente per eseguire Docker Compose è quello di utilizzarlo come plug-in di Docker: in sostanza, lo si installa come plug-in e questo lo aggiunge quale possibile sotto-comando del comando principale “docker“. Precedentemente (ma la pratica è ancora valida e operativa), Docker Compose poteva venire installato come applicazione a sé, la quale poteva venire evocata col comando “docker-compose“.
In pratica, i comandi (esemplificativi):
docker compose up -d
e
docker-compose up -d
sono negli effetti la stessa cosa, ma possono essere utilizzati:
- il primo, solo installando Docker Compose come plug-in di Docker;
- il secondo, solo installando Docker Compose come applicazione a sé (ormai pratica deprecata).
Si possono istallare entrambi, anche se ha poco senso. In caso si possono utilizzare entrambi i comandi.
GESTIONE ORDINARIA
Nel caso in cui si voglia aggiornare un container in esecuzione scaricando l’ultima immagine disponibile, sarà necessario digitare i seguenti comandi:
docker compose pull nome_servizio
docker compose up -d nome_servizio
Infine, per rimuovere eventuali immagini datate e non più utilizzate per alcun container, il comando è:
docker image prune -fa
Va da sé che questo tipo di gestione semplifichi enormemente la gestione dei container Docker: anche solo banalmente il solo aggiornamento di un container a fronte della disponibilità di una nuova immagine è estremamente semplificato, perché non è necessario ricordare l’intero comando Docker per l’esecuzione del container, ma è bensì sufficiente utilizzare i comandi (ben più astratti e semplici) sopra elencati.
Altre pagine con attinenza al tema Docker:
- Backup con restic via Backrest: installarlo e configurarlo con Docker su Linux Debian
- Backup con restic via Backrest: installarlo e configurarlo con Docker su Raspberry Pi OS
- Catturare codici infrarossi e radiofrequenza usando Broadlink Manager (via Web GUI)
- Collegare Mini PC/Intel NUC/computer a una VPN con OpenVPN Client, Linux Debian e Docker
- Collegare Raspberry Pi a una VPN con OpenVPN Client, Raspberry Pi OS e Docker
- Come installare Docker su Linux Debian
- Come installare Docker su Raspberry Pi OS (Raspbian) di Raspberry Pi
- Configurare, compilare e installare il firmware ESPHome con Linux Debian e Docker (Mini PC/Intel NUC o altro)
- Configurare, compilare e installare il firmware ESPHome con Raspberry Pi OS e Docker
- Docker Compose: cos’è, a cosa serve e perché si usa
- Gestire un UPS con Mini PC/Intel NUC/computer tramite NUT (“Network UPS Tools”) con Docker su Linux Debian
- Gestire un UPS con Raspberry Pi tramite NUT (“Network UPS Tools”) con Docker (su Raspberry Pi OS)
- Home Assistant OS, Supervised o Core: quale installazione fa al caso mio?
- Home Assistant su Mini PC/Intel NUC: le varie installazioni, le cose da fare
- Home Assistant su QNAP: la checklist di riferimento per la propria domotica
- Home Assistant su Raspberry Pi: le varie installazioni, le cose da fare
- Home Assistant su Sonoff iHost: le varie installazioni, le cose da fare
- HUB: IoT “WebThings” (Gateway)
- Installare e configurare Caddy (reverse proxy) con Docker su Linux Debian (Mini PC/Intel NUC o altro)
- Installare e configurare Caddy (reverse proxy) con Docker su QNAP (via Container Station)
- Installare e configurare Caddy (reverse proxy) con Docker su Raspberry Pi OS
- Installare e configurare Caddy (reverse proxy) con Docker su Sonoff iHost
- Installare e configurare deCONZ con Docker su Linux Debian (Mini PC/Intel NUC o altro)
- Installare e configurare deCONZ con Docker su Raspberry Pi OS
- Installare e configurare FileBrowser con Docker su Sonoff iHost
- Installare e configurare Grafana con Docker su Linux Debian (Mini PC/Intel NUC o altro)
- Installare e configurare Grafana con Docker su Raspberry Pi OS
- Installare e configurare Home Assistant Core con Docker su QNAP (via Container Station)
- Installare e configurare Home Assistant Core con Docker su Raspberry Pi
- Installare e configurare Home Assistant Core con Docker su Sonoff iHost
- Installare e configurare Home Assistant OS (HassOS/HASSIO) su QNAP (via Virtualization Station)
- Installare e configurare Home Assistant Supervised con Docker su Mini PC/Intel NUC/computer con Linux Debian
- Installare e configurare Home Assistant Supervised con Docker su Raspberry Pi con Linux Debian
- Installare e configurare Home Assistant Supervised con Docker su Raspberry Pi OS
- Installare e configurare il broker MQTT “Mosquitto” con Docker su QNAP (via Container Station)
- Installare e configurare il broker MQTT “Mosquitto” con Docker su Linux Debian (Mini PC/Intel NUC o altro)
- Installare e configurare il broker MQTT “Mosquitto” con Docker su Sonoff iHost
- Installare e configurare il broker MQTT “Mosquitto” su Docker (su Raspberry Pi OS)
- Installare e configurare InfluxDB con Docker su Linux Debian (Mini PC/Intel NUC o altro)
- Installare e configurare InfluxDB con Docker su Raspberry Pi OS
- Installare e configurare OpenZWave con Docker su Raspberry Pi OS
- Installare e configurare Z-Wave JS con Docker su Linux Debian (Mini PC/Intel NUC o altro)
- Installare e configurare Z-Wave JS con Docker su Raspberry Pi OS
- Installare e configurare ZigBee2MQTT con Docker su Linux Debian (Mini PC/Intel NUC o altro)
- Installare e configurare ZigBee2MQTT con Docker su QNAP (via Container Station)
- Installare e configurare ZigBee2MQTT con Docker su Raspberry Pi OS
- Modificare i file di configurazione Home Assistant Core (su Docker, su Raspberry) con Visual Studio Code (VSCode)
- Node-RED: come installarlo e configurarlo su Raspberry Pi con Docker
- Realizzare un NVR (Network Video Recorder) per videosorveglianza con motionEye (parte 1)
- Recensione: QNAP TS-231K
- Recensione: QNAP TS-251D
- Usare Raspberry Pi come ricevitore audio AirPlay compatibile, con Shairport Sync (su Docker)
Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa. |