Docker
Note su Docker
Concetto generale
Docker prende immagini di un ambiente e mappa risorse come socket, directory eccetera in un ambiente virtuale.
Nel caso abbastanza lineare di Home Assistant, per esempio, l’installazione prevede oltre al codice una directory dove risiedono dati e configurazioni, piu’ un socket da cui risponde il webserver.
Docker funziona con una “immagine” che rappresenta un filesystem in cui risiede codice e risorse, e una serie di volumi, o mount, su cui vengono salvati i dati utente
Creazione
La creazione di una applicazione docker a partire da una immagine già fatta avviene usando docker run
con una serie di parametri di avvio e l’URL dell’immagine docker. Ad esempio, Home Assistant:
docker run -d \
--name homeassistant \
--privileged \
--restart=unless-stopped \
-e TZ=MY_TIME_ZONE \
-v /PATH_TO_YOUR_CONFIG:/config \
--network=host \
ghcr.io/home-assistant/home-assistant:stable
Notare:
- –name: il nome del container
- -v: i mount dei volumi con il path di partenza e quello di destinazione (virtuale)
- e infine l’URL dell’immagine con il relativo tipo di canale (stable)
Questi stessi parametri devono essere utilizzati per riavviare il container dopo un update.
Update
La procedura generale sarebbe:
- pull della nuova versione
- stop del container
- rimozione dell’immagine
- riavvio del container
docker pull
scarica la nuova versione. Se non ci sono nuove versioni, ci si può fermare.
docker stop
ferma il container
docker rm
rimuove il container, cioè l’immagine, mentre la configurazione rimane dov’era (è un path nel fs fisico)
docker run
riavvia il container
Usare docker compose
Meglio è usare docker-compose
o docker compose
, dipende da come è stato installato docker.
Il file di configurazione è un file .yml
e basta tenere quello per non dover ripetere tutti i parametri di cui sopra che possono essere facilmente dimenticati o perduti.
Ad esempio per Home Assistant il file è:
version: '3'
services:
homeassistant:
container_name: homeassistant
image: "ghcr.io/home-assistant/home-assistant:stable"
volumes:
- /PATH_TO_YOUR_CONFIG:/config
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
privileged: true
network_mode: host
environment:
- TZ=Europe/Rome
A questo punto basta usare docker compose up -d
così da scaricare l’immagine ed avviarla con i parametri corretti.
Per aggiornare:
docker compose pull home-assistant
docker compose up -d home-assistant
docker image prune -f
L’ultimo comando rimuove le immagini non più necessarie
Cheatsheet
docker ps
: Mostra l’elenco dei container
docker inspect {container}
: Ritorna la configurazione di un container, come file json. Tra le altre cose, mostra i mount point e varie altre informazioni utili.