Introduzione ai contenitori LXD di Ubuntu

I contenitori sono utili per molte ragioni. Isolano le applicazioni dal resto del sistema. Sono portatili e facili da clonare e/o spostare su altri sistemi operativi. E, nel caso di Linux, funzionano allo stesso modo su qualsiasi distribuzione, senza adattamenti necessari. Se hai bisogno di spostare un contenitore da RedHat a Ubuntu, dovrebbe essere solo una semplice operazione di copia.
Docker è una soluzione popolare progettata per contenere una singola applicazione: ad esempio, un server di database MySQL. LXD è simile in alcuni modi, ma è progettato per contenere un intero sistema operativo. Questo lo rende utile per alcuni scenari. Ad esempio, puoi avviare un contenitore LXD, installare un server database e un server http. Puoi quindi creare un sito web WordPress all’interno. Ora puoi passare da un cloud all’altro spostando semplicemente questo contenitore LXD dove è necessario quando non sei soddisfatto del tuo provider precedente. E poiché è facile clonare un contenitore, puoi persino caricare il tuo sito web su più fornitori di cloud per creare una configurazione ridondante ad alta disponibilità.
LXD non virtualizza l’hardware come fanno QEMU o VirtualBox, il che significa che è molto veloce, offrendo una velocità di esecuzione quasi nativa.
Installa e configura LXD
Apri un terminale e installa LXD, oltre alle utilità ZFS, che ti aiuteranno ad accelerare alcune operazioni e risparmiare spazio su disco quando lavori con i contenitori.
sudo apt install zfsutils-linux lxd
Avvia la configurazione di LXD.
sudo lxd initPremi INVIO per selezionare i valori predefiniti.
Per Dimensione in GB del nuovo dispositivo loop (1GB minimo) [predefinito=15GB], puoi scegliere un altro valore, come “50GB” se sai che creerai molti contenitori.

Trova e avvia un’immagine di distribuzione LXD
Per elencare tutte le immagini di Ubuntu:
lxc image list ubuntu: arch=amd64
Ci saranno molti risultati. Puoi omettere arch=amd64 se hai bisogno di immagini per altre piattaforme, come i processori ARM (i dispositivi Raspberry Pi utilizzano tale architettura).
Nell’immagine precedente i risultati sono stati limitati (con |head) per facilitare la lettura. L’impronta di Ubuntu 18.04 (84a71299044b) è stata evidenziata. Se desideri avviare un contenitore con quella distribuzione, il comando sarebbe:
lxc launch ubuntu:84a71299044bAl momento questo restituirebbe un errore di permesso negato. Devi essere nel gruppo “lxd”. Il tuo utente è già stato aggiunto a questo gruppo, ma per renderlo attivo devi disconnetterti e riconnetterti. Se vuoi evitare ciò, usa questo comando, sostituendo “user” con il tuo nome utente:
execsu - user
Ora, i comandi lxc funzionano senza richiedere sudo.
Avvia contenitori LXD con distribuzioni diverse da Ubuntu
Questo comando ti mostrerà quali altre distribuzioni sono disponibili:
lxc image list images: arch=amd64Per avviare un’immagine, invece dell’impronta, puoi anche usare un nome alias se ne vedi uno disponibile in quella lista.
lxc launch images:debian/9
Se aggiungi una stringa alla fine, puoi scegliere un nome per il tuo contenitore:
lxc launch images:debian/9 wordpress-siteGestisci contenitori LXD
Per elencare tutti i contenitori:
lxc list
La colonna “IPV4” è particolarmente importante se hai servizi attivi su quell’istanza. Ad esempio, se un server http Apache è in esecuzione sull’istanza, digitando “10.234.232.246” nel browser verrà visualizzato il sito web ospitato nel contenitore.
Per fermare un contenitore:
lxc stop name_of_containerQuesto può richiedere molto tempo (o fallire) con distribuzioni diverse da Ubuntu. È meglio ottenere una shell sul contenitore, e una volta dentro, digitare systemctl poweroff per fermarlo.
Se tutto il resto fallisce, puoi forzare uno stop con:
lxc stop name_of_container --forcePer avviarlo:
lxc start name_of_containerPer entrare nel tuo contenitore:
lxc shell name_of_container
Puoi installare programmi con “sudo apt install” e fare qualsiasi altra cosa faresti su una normale distribuzione Linux, ad esempio, configurare un server Apache. Quando vuoi uscire dal contenitore, digita semplicemente:
exitTrasferisci file da/a contenitori LXD
Per caricare un file nel tuo contenitore:
lxc file push /path/to/local/file name_of_container/path/to/uploaded/fileIncludi il nome del file da creare, non solo la directory in cui vuoi caricarlo. Ecco un esempio:
lxc file push lxd-apt-install.png accurate-colt/var/www/website/upload.pngPer caricare una directory invece di un file:
lxc file push /path/to/local/directory name_of_container/path/to/remote/directory --recursive--verboseEsempio:
lxc file push /bin accurate-colt/tmp --recursive--verbosePer scaricare una directory dal tuo contenitore al tuo sistema operativo principale:
lxc file pull name_of_container/path/to/remote/directory /path/to/local/directory --recursive--verboseEsempio:
lxc file pull accurate-colt/tmp /tmp --recursive--verboseConclusione
Questo copre l’uso di base dei contenitori LXD. Ci sono funzionalità più avanzate come snapshot e rollback, imporre limiti su risorse come CPU e RAM, clonare contenitori e così via. Questi potrebbero essere trattati in un tutorial futuro se notiamo che i lettori sono interessati all’argomento.