Federico Fuga

Engineering, Tech, Informatics & science

Docker

29 May 2023 18:20 CEST

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:

  1. pull della nuova versione
  2. stop del container
  3. rimozione dell’immagine
  4. 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.