▤ Homelab

Dove eseguire Docker nell'homelab: VM, container LXC o host

Pro e contro di Docker in una VM dedicata, dentro un container LXC o sull'host: isolamento, backup, aggiornamenti, storage e organizzazione dei servizi.

Quasi ogni servizio che si vuole ospitare in casa viene distribuito come immagine Docker. In un homelab con un hypervisor, però, la domanda non è se usare Docker, ma dove eseguirlo. Le strade sono tre: direttamente sull'host, dentro un container LXC, oppure in una macchina virtuale. Ognuna ha conseguenze su sicurezza, backup e facilità di manutenzione.

Opzione 1: Docker sull'host dell'hypervisor

Installare Docker direttamente sul sistema di Proxmox VE o di un altro hypervisor sembra la via più semplice, ma è quella da evitare.

  • Interferenze di rete: Docker crea proprie regole di firewall e interfacce bridge, che possono entrare in conflitto con la gestione di rete dell'hypervisor.
  • Aggiornamenti mescolati: il sistema dell'host deve restare il più possibile pulito e allineato a quanto previsto dal produttore.
  • Nessun confine: un problema in un container, o una sua compromissione, tocca direttamente la macchina che ospita tutto il resto.

L'host dell'hypervisor dovrebbe fare una cosa sola: ospitare macchine virtuali e container di sistema.

Diverso è il caso di un server senza hypervisor, per esempio un mini PC con una distribuzione Linux dedicata solo ai servizi. Lì Docker sull'host è la scelta normale.

Opzione 2: Docker dentro un container LXC

I container LXC sono leggeri: condividono il kernel dell'host, si avviano in un attimo e consumano poca memoria. Eseguire Docker al loro interno è possibile, attivando opzioni come il nesting, ed è diffuso negli homelab.

Vantaggi:

  • consumo di RAM minimo rispetto a una VM;
  • accesso diretto a cartelle dell'host tramite mount point;
  • condivisione semplice di una GPU per la transcodifica.

Svantaggi da conoscere:

  • due livelli di container sullo stesso kernel: l'isolamento è inferiore a quello di una VM;
  • compatibilità: alcune combinazioni di storage, in particolare driver di storage di Docker su certi file system dell'host, hanno dato problemi in passato e possono richiedere configurazioni specifiche;
  • aggiornamenti del kernel dell'host possono influire sui container senza preavviso;
  • la documentazione di Proxmox raccomanda di eseguire Docker in una macchina virtuale piuttosto che in un container LXC.

Opzione 3: Docker in una macchina virtuale

Una VM con una distribuzione Linux minimale e Docker installato è la soluzione più pulita.

  • Isolamento forte: la VM ha il proprio kernel; un problema resta confinato.
  • Backup completi e coerenti: il backup della VM include sistema, configurazione e volumi, e si ripristina come un blocco unico.
  • Snapshot prima degli aggiornamenti: si aggiorna, si verifica, e se qualcosa va storto si torna indietro in pochi secondi.
  • Portabilità: la VM si sposta su un altro host o si ricrea da un template.

Il costo è un po' di memoria in più, di solito qualche centinaio di megabyte per il sistema operativo della VM: su hardware attuale è un prezzo modesto.

Una VM o molte?

Una volta scelta la VM, resta da decidere come raggruppare i servizi:

Schema Pro Contro
Una sola VM con tutti i servizi semplice da gestire un riavvio ferma tutto
VM per area (media, casa, strumenti) guasti contenuti, risorse separate più sistemi da aggiornare
Una VM per ogni servizio isolamento massimo spreco di risorse e lavoro

Nel mio lavoro trovo equilibrato il raggruppamento per area: una VM per i servizi multimediali, una per la domotica, una per gli strumenti di amministrazione come monitoraggio e reverse proxy. I servizi critici, come il gestore di password, meritano spesso una VM propria.

Dati e volumi

Indipendentemente dalla scelta, i dati devono avere una collocazione chiara:

  1. configurazione in file Compose versionati, conservati in un repository;
  2. volumi dei dati in percorsi noti, non in volumi anonimi creati automaticamente;
  3. archivi grandi, come foto e video, su un NAS montato via NFS o SMB, così la VM resta piccola;
  4. database su disco locale veloce, mai su condivisioni di rete con prestazioni incerte.

Per i database, il backup della VM a caldo è utile ma non sempre sufficiente: conviene affiancare un dump periodico, che garantisce una copia coerente indipendentemente dallo stato del file system al momento dello snapshot.

Gestione e aggiornamenti

Strumenti come Portainer o Dockge offrono un'interfaccia web per gestire i container, mentre servizi come Watchtower possono aggiornare automaticamente le immagini. L'aggiornamento automatico è comodo per servizi poco importanti, ma rischioso per quelli in cui una nuova versione maggiore può cambiare il formato dei dati. Per questi è meglio fissare la versione nel file Compose, aggiornarla consapevolmente e fare uno snapshot prima.

In sintesi

  • Docker non va installato sull'host dell'hypervisor.
  • In LXC consuma poco ma isola meno e può dare problemi di compatibilità.
  • In una macchina virtuale offre isolamento, snapshot e backup coerenti a un costo modesto.
  • Raggruppare i servizi per area è un buon compromesso tra semplicità e contenimento dei guasti.
  • Volumi in percorsi noti, file Compose versionati e dump dei database completano il quadro.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche