I contenitori Linux (LXC) sono una tecnologia di virtualizzazione leggera e hanno vari usi. Fa parte del kernel Linux e consente di emulare una o più distribuzioni Linux su un singolo host Linux. Pensalo come una via di mezzo tra un chroot e tecnologie di virtualizzazione complete come VirtualBox, KVM o Xen. Una tecnologia simile presente nel mondo BSD è FreeBSD Jails.
Ad esempio, la macchina su cui sto scrivendo è un laptop che esegue Linux Mint 18, alimentato da un processore Intel Atom e ha uno scarso 2 GB di RAM. Tuttavia, sto eseguendo tre contenitori Linux, ciascuno con un’istanza del server Web Apache in esecuzione, senza un grande calo delle prestazioni. Questo sarebbe impensabile con una macchina virtuale tradizionale come VirtualBox. Quindi, se volevi eseguire più distribuzioni sul tuo sistema Linux, Linux Containers dovrebbe fare il lavoro per te.
Installazione e configurazione di contenitori Linux
Stiamo configurando LXC su Linux Mint 18 a 64 bit. Le istruzioni di installazione fornite qui funzioneranno anche senza modifiche su Ubuntu 16.04 e versioni successive. Se stai usando un’altra distribuzione, fai riferimento alla documentazione ufficiale della tua distribuzione se qualcosa non funziona come previsto. Si presuppone inoltre una familiarità con la riga di comando e la risoluzione dei problemi generali.
Prerequisiti
Ecco alcune cose che dovresti configurare per iniziare a utilizzare più distribuzioni:
1. Installa LXC e altro software prerequisito utilizzando:
[sourcecode]sudo apt install lxc lxc-templates uidmap[/sourcecode]
2. Ora devi configura il tuo profilo. Immettere i seguenti comandi per configurarlo:
[sourcecode]mkdir -p ~/.config/lxc
echo “lxc.id_map = u 0 100000 65536” > ~/.config/lxc/default.conf
echo “lxc.id_map = g 0 100000 65536” >> ~/.config/lxc/default.conf
echo “lxc.network.type = veth” >> ~/.config/lxc/default.conf
echo “lxc.network.link = lxcbr0” >> ~/.config/lxc/default.conf
echo “$USER veth lxcbr0 2” | sudo tee -a /etc/lxc/lxc-usernet[/sourcecode]
3. Quindi, devi impostare le autorizzazioni utente come segue:
[sourcecode]sudo usermod –add-subuid 100000-165536 $USER
sudo usermod –add-subgids 100000-165536 $USER
sudo cgm crea tutti gli utenti
sudo cgm chown tutti gli utenti $(id -u) $(id -g)
cgm movepid tutti gli utenti $$[/sourcecode]
Configurazione del contenitore
Ora che hai installato LXC Container insieme ad altri software prerequisiti, ecco i passaggi per configurare il contenitore:
1. In questo esempio, configureremo un contenitore Ubuntu, chiamato ubu1
. Per farlo, esegui il seguente comando:
[sourcecode]lxc-create –template download –nome ubu1[/sourcecode]
2. Qui, il parametro –template
dice a lxc to scaricamento un’immagine preconfigurata da Internet, mentre il parametro –name
specifica il nome del contenitore – ubu1
in questo caso. Puoi usare il nome che preferisci.
3. Ora vedrai un elenco di immagini di distribuzione supportate:
4. Inserisci le specifiche della distribuzione che desideri installare. Installerò la versione a 64 bit di Ubuntu 16.04 (nome in codice xenial) qui:
5. Se lo desideri installare l’immagine in modo non interattivoil seguente comando ottiene lo stesso risultato del precedente:
[sourcecode]lxc-create -t download -n ubu1 — –dist ubuntu –release xenial –arch amd64[/sourcecode]
6. LXC ora scaricherà e installerà un’immagine xenial minima di Ubuntu sul tuo sistema host. Il download e l’installazione potrebbero richiedere un po’ di tempo a seconda della connessione Internet e della velocità del PC. Dopo l’installazionevedrai una schermata come questa:
Ora sei pronto per utilizzare il tuo contenitore Ubuntu appena configurato.
Utilizzo di più distribuzioni con contenitori Linux
Avvio del contenitore
Avvia il tuo contenitore usando il comando lxc-start
:
[sourcecode]lxc-start -n ubu1 -d[/sourcecode]
Qui, il parametro -n
specifica il nome del contenitore che desideri avviare (ubu1
in questo caso) e il parametro -d
lo fa funzionare in background.
Puoi verificare che il contenitore sia stato avviato utilizzando il comando lxc-ls
:
[sourcecode]lxc-ls -f[/sourcecode]
Il parametro -f
abilita fantasia segnalazione. Ecco, puoi vedere che ce l’ho due contenitori – una Debian (arrestata) e una Ubuntu (in esecuzione).
Accesso e utilizzo del contenitore
Puoi accedere alla console del contenitore usando il comando lxc-attach
:
[sourcecode]lxc-attach -n ubu1[/sourcecode]
Ora avrai un guscio di radice sul tuo contenitore Si consiglia di impostare una password per l’utente root e creare un normale account utente:
[sourcecode]password
adduser beebom[/sourcecode]
Ovviamente sostituire bebom con il nome utente che desideri. Puoi quindi installare il software e configurare il tuo contenitore come faresti su un normale sistema. Ad esempio, in un contenitore Debian o Ubuntu:
[sourcecode]apt install wget openssh-server htop tmux nano iptables[/sourcecode]
Fermare il contenitore
Dopo aver finito di giocare con il contenitore, usa il comando exit
per tornare al sistema host. Ora usa il comando lxc-stop
per fermare il tuo contenitore:
[sourcecode]lxc-stop -n ubu1[/sourcecode]
Questo farà sì che il contenitore si chiuda in modo pulito e non consumerà più risorse sul tuo sistema, ad eccezione dello spazio su disco.
Clonazione e istantanee
Cloni
Dopo aver installato i programmi in un contenitore e averlo configurato a tuo piacimento, potresti volerlo fare crearne una o più copie per un facile approvvigionamento. Puoi farlo creando un file cloneche è una replica esatta di un contenitore.
Ad esempio, per creare un clone del contenitore ubu1
(chiamiamolo ubu2
), prima fermare il contenitore usando lxc-stop
, quindi usa il comando lxc-copy
:
[sourcecode]lxc-stop -n ubu1
lxc-copy -n ubu1 -N ubu2[/sourcecode]
Ecco, il L’opzione -n specifica il contenitore di originee il L’opzione -N specifica il nome del clone. A verificare che il contenitore è stato clonato, usa il comando lxc-ls
:
Istantanee
Supponiamo che tu stia per apportare alcune modifiche potenzialmente pericolose o difficili da ripristinare a un contenitore, come la riconfigurazione di un server web. Per ridurre al minimo il danno, puoi creare un’istantanea del contenitore prima di apportare tale modifica. Nel caso in cui qualcosa vada storto durante la configurazione, puoi semplicemente arrestare il contenitore e ripristinarlo allo stato di funzionamento precedente ripristinando uno snapshot.
Per creare l’istantanea, prima fermare il contenitore:
[sourcecode]lxc-stop -n ubu1[/sourcecode]
Poi, creare un’istantanea usando il comando lxc-snapshot
:
[sourcecode]lxc-snapshot -n ubu1[/sourcecode]
Questo crea uno snapshot chiamato snap0
. Verranno chiamati tutti gli snapshot successivi creati utilizzando questo comando scatto1, scatto2eccetera.
Dopo questo, puoi inizio contenitore e apportare le modifiche desiderate. Se in qualsiasi momento desideri tornare a un’istantanea che hai creato, fermare il contenitore e usa il comando lxc-snapshot
con il parametro -r
per ripristinare un’istantanea:
[sourcecode]lxc-snapshot -r snap0 -n ubu1[/sourcecode]
Questo ripristinerà lo snapshot snap0
nel contenitore ubu1
.
Avvia automaticamente i container all’avvio
È possibile creare un contenitore, ad esempio un contenitore di server Web, che si avvii automaticamente all’avvio del sistema. Per fare questo, vai al file di configurazione del contenitoreche si trova in $HOME/.local/share/lxc/
, e aggiungere le seguenti righe:
[sourcecode]lxc.start.auto = 1
lxc.start.delay = 5[/sourcecode]
La prima riga specifica che il contenitore deve essere avviato all’avvio. Il secondo dice al sistema di farlo attendere 5 secondi prima di iniziare il contenitore successivo, se presente.
Risoluzione dei problemi
Se hai problemi ad avviare i container, la prima cosa da provare è eseguire il comando lxc-start
in Primo piano modalità. Per esempio:
[sourcecode]lxc-start -n ubu1 -F[/sourcecode]
Questo sarà mostra gli errori sulla console correntee, che è molto utile per identificare la natura del problema.
Problemi con l’esecuzione simultanea di più contenitori
Se provi a eseguire più contenitori contemporaneamente, potresti vedere degli errori come “Quota raggiunta” o “Impossibile creare la rete configurata”. Questo perché stai eseguendo più interfacce di rete di quelle assegnate a te. Puoi aumentare il numero di bridge di rete che un utente può eseguire modificando il file /etc/lxc/lxc-usernet
come radice. Potrebbe assomigliare a questo:
[sourcecode]# CONTEGGIO BRIDGE TIPO NOME UTENTE
beebom veth lxcbr0 5[/sourcecode]
Puoi cambia il numero alla fine (5 in questo esempio), a un numero maggiore come 10. Ciò ti consentirà di eseguire fino a 10 contenitori contemporaneamente.
Altri usi dei contenitori Linux
I contenitori Linux hanno vari usi. È possibile utilizzarli come caselle di test leggere, ad esempio, per testare varie configurazioni di un server Web o di database prima di eseguirne il commit su un server di produzione. Un altro caso d’uso è testare come un’applicazione viene eseguita su diverse versioni di varie distribuzioni.
Puoi anche usarli per isolare le applicazioni di cui non ti fidi: qualsiasi danno causato da un’applicazione di questo tipo sarà limitato al proprio contenitore e non influirà sul sistema host. Si noti che mentre è possibile eseguire applicazioni GUI in un contenitore, richiede una notevole quantità di tempo e impegno, pertanto non è consigliato. Se desideri eseguire app GUI in una sandbox, fai riferimento al nostro articolo su come eseguire la sandbox delle app in Linux.
GUARDA ANCHE: 7 migliori alternative a VirtualBox che puoi utilizzare
Esegui più distribuzioni contemporaneamente con i container Linux
Così termina il nostro How-To sull’esecuzione di più distribuzioni Linux su un singolo computer, senza il sovraccarico di una macchina virtuale di dimensioni standard. L’utilità di questa tecnologia è limitata solo dalla tua creatività, quindi sentiti libero di sperimentare e scoprire nuovi casi d’uso. Se hai problemi con la configurazione dei contenitori, non esitare a farci una domanda nella sezione dei commenti.