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

lxd-apt-install

Avvia la configurazione di LXD.

sudo lxd init

Premi 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.

lxd-init-questions

Trova e avvia un’immagine di distribuzione LXD

Per elencare tutte le immagini di Ubuntu:

lxc image list ubuntu: arch=amd64

lxd-ubuntu-images

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:84a71299044b

Al 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

lxd-user-active-groups

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=amd64

Per 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

lxd-launch-debian-9

Se aggiungi una stringa alla fine, puoi scegliere un nome per il tuo contenitore:

lxc launch images:debian/9 wordpress-site

Gestisci contenitori LXD

Per elencare tutti i contenitori:

lxc list

lxd-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_container

Questo 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 --force

Per avviarlo:

lxc start name_of_container

Per entrare nel tuo contenitore:

lxc shell name_of_container

lxd-shell-debian

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:

exit

Trasferisci 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/file

Includi 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.png

Per caricare una directory invece di un file:

lxc file push /path/to/local/directory name_of_container/path/to/remote/directory --recursive--verbose

Esempio:

lxc file push /bin accurate-colt/tmp --recursive--verbose

Per 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--verbose

Esempio:

lxc file pull accurate-colt/tmp /tmp --recursive--verbose

Conclusione

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.