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:
- configurazione in file Compose versionati, conservati in un repository;
- volumi dei dati in percorsi noti, non in volumi anonimi creati automaticamente;
- archivi grandi, come foto e video, su un NAS montato via NFS o SMB, così la VM resta piccola;
- 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.