Cos'è LXD?
LXD (pronunciato "Lex-Dee") è un gestore di container di sistema basato su LXC (Linux Containers) attualmente supportato da Canonical. L'obiettivo di LXD è fornire un'esperienza simile a una macchina virtuale ma attraverso la containerizzazione anziché la virtualizzazione hardware. Rispetto a Docker per la distribuzione di applicazioni, LXD offre funzionalità del sistema operativo quasi complete con funzionalità aggiuntive come snapshot, migrazioni live e gestione dello storage.
I principali vantaggi di LXD sono il supporto di contenitori ad alta densità e le prestazioni che offre rispetto alle macchine virtuali. Un computer con 2 GB di RAM può supportare adeguatamente una mezza dozzina di container. Inoltre, LXD supporta ufficialmente le immagini del contenitore delle principali distribuzioni Linux. Possiamo scegliere la distribuzione e la versione Linux da eseguire nel container.
Questa guida spiega come installare e configurare LXD 3 su un Linode e come configurare un server Web Apache in un container.
Nota Per semplicità, il termine contenitore viene utilizzato in questa guida per descrivere i container del sistema LXD.
Prima di iniziare
-
Completa la guida alla creazione di un'istanza di calcolo. Seleziona un Linode con almeno 2 GB di memoria RAM, ad esempio Linode da 2 GB. Specifica la distribuzione di Ubuntu 19.04. Puoi specificare una distribuzione Linux diversa, purché sia disponibile il supporto per pacchetti snap (snapd); vedere Maggiori informazioni per maggiori dettagli.
-
Segui la nostra guida alla configurazione e alla protezione di un'istanza di calcolo per aggiornare il tuo sistema. Potresti anche voler impostare il fuso orario, configurare il tuo nome host, creare un account utente limitato e rafforzare l'accesso SSH.
Configura il supporto del pacchetto Snap
LXD è disponibile come pacchetto Debian nelle versioni di supporto a lungo termine (LTS) di Ubuntu, come Ubuntu 18.04 LTS. Per altre versioni di Ubuntu e altre distribuzioni, LXD è disponibile come pacchetto snap. I pacchetti Snap sono pacchetti universali perché esiste un unico file di pacchetto che funziona su qualsiasi distribuzione Linux supportata. Vedi la sezione Ulteriori informazioni per maggiori dettagli su cos'è un pacchetto snap, quali distribuzioni Linux sono supportate e come configurarlo.
-
Verificare che il supporto snap sia installato correttamente. Il comando seguente mostra che non ci sono pacchetti snap installati o che alcuni lo sono.
snap list
No snaps are installed yet. Try 'snap install hello-world'.
-
Visualizza i dettagli del pacchetto snap LXD
lxd
. L'output seguente mostra che, attualmente, l'ultima versione di LXD è3.12
nel predefinitostable
canale. Questo canale viene aggiornato spesso con nuove funzionalità. Ci sono anche altri canali come3.0/stable
canale che ha la versione LTS LXD (supportata insieme a Ubuntu 18.04, fino al 2023) e il2.0/stable
canale (supportato insieme a Ubuntu 16.04, fino al 2021). Utilizzeremo l'ultima versione di LXD dall'impostazione predefinitastable
canale.snap info lxd
name: lxd summary: System container manager and API publisher: Canonical✓ contact: https://github.com/lxc/lxd/issues license: Apache-2.0 description: | **LXD is a system container manager** With LXD you can run hundreds of containers of a variety of Linux distributions, apply resource limits, pass in directories, USB devices or GPUs and setup any network and storage you want. LXD containers are lightweight, secure by default and a great alternative to running Linux virtual machines. **Run any Linux distribution you want** Pre-made images are available for Ubuntu, Alpine Linux, ArchLinux, CentOS, Debian, Fedora, Gentoo, OpenSUSE and more. A full list of available images can be [found here](https://images.linuxcontainers.org) Can't find the distribution you want? It's easy to make your own images too, either using our `distrobuilder` tool or by assembling your own image tarball by hand. **Containers at scale** LXD is network aware and all interactions go through a simple REST API, making it possible to remotely interact with containers on remote systems, copying and moving them as you wish. Want to go big? LXD also has built-in clustering support, letting you turn dozens of servers into one big LXD server. **Configuration options** Supported options for the LXD snap (`snap set lxd KEY=VALUE`): - criu.enable: Enable experimental live-migration support [default=false] - daemon.debug: Increases logging to debug level [default=false] - daemon.group: Group of users that can interact with LXD [default=lxd] - ceph.builtin: Use snap-specific ceph configuration [default=false] - openvswitch.builtin: Run a snap-specific OVS daemon [default=false] [Documentation](https://lxd.readthedocs.io) snap-id: J60k4JY0HppjwOjW8dZdYc8obXKxujRu channels: stable: 3.12 2019-04-16 (10601) 56MB - candidate: 3.12 2019-04-26 (10655) 56MB - beta: ↑ edge: git-570aaa1 2019-04-27 (10674) 56MB - 3.0/stable: 3.0.3 2018-11-26 (9663) 53MB - 3.0/candidate: 3.0.3 2019-01-19 (9942) 53MB - 3.0/beta: ↑ 3.0/edge: git-eaa62ce 2019-02-19 (10212) 53MB - 2.0/stable: 2.0.11 2018-07-30 (8023) 28MB - 2.0/candidate: 2.0.11 2018-07-27 (8023) 28MB - 2.0/beta: ↑ 2.0/edge: git-c7c4cc8 2018-10-19 (9257) 26MB -
-
Installa
lxd
pacchetto a scatto. Esegui il comando seguente per installare il pacchetto snap per LXD.sudo snap install lxd
lxd 3.12 from Canonical✓ installed
Puoi verificare che il pacchetto snap sia stato installato eseguendo snap list
ancora. Il core
snap package è un prerequisito per qualsiasi sistema con supporto per snap package. Quando installi il tuo primo pacchetto snap, core
viene installato e condiviso tra tutti gli altri pacchetti snap che verranno installati in futuro.
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.38 6673 stable canonical✓ core
lxd 3.12 10601 stable canonical✓ -
Inizializza LXD
-
Aggiungi il tuo utente Unix non root a
lxd
gruppo:sudo usermod -a -G lxd username
Nota Aggiungendo l'account utente Unix non root a
lxd
gruppo, puoi eseguire qualsiasilxc
comandi senza anteporresudo
. Senza questa aggiunta, avresti dovuto anteporresudo
a ognilxc
comando. -
Avvia una nuova sessione SSH per rendere effettiva la modifica precedente. Ad esempio, esci e accedi di nuovo.
-
Verifica lo spazio libero su disco disponibile:
df -h /
In questo caso sono disponibili 45 GB di spazio libero su disco. LXD richiede almeno 15 GB di spazio per le esigenze di archiviazione dei container. Assegneremo 15 GB di spazio per LXD, lasciando 30 GB di spazio libero per le esigenze del server.Filesystem Size Used Avail Use% Mounted on /dev/sda 49G 2.0G 45G 5% /
-
Esegui
lxd init
per inizializzare LXD:sudo lxd init
Ti verrà richiesto più volte durante il processo di inizializzazione. Scegli le impostazioni predefinite per tutte le opzioni.
Would you like to use LXD clustering? (yes/no) [default=no]: Do you want to configure a new storage pool? (yes/no) [default=yes]: Name of the new storage pool [default=default]: Name of the storage backend to use (btrfs, ceph, dir, lvm, zfs) [default=zfs]: Create a new ZFS pool? (yes/no) [default=yes]: Would you like to use an existing block device? (yes/no) [default=no]: Size in GB of the new loop device (1GB minimum) [default=15GB]: Would you like to connect to a MAAS server? (yes/no) [default=no]: Would you like to create a new local network bridge? (yes/no) [default=yes]: What should the new bridge be called? [default=lxdbr0]: What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: Would you like LXD to be available over the network? (yes/no) [default=no]: Would you like stale cached images to be updated automatically? (yes/no) [default=yes] Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
Server Web Apache con LXD
Questa sezione creerà un contenitore, installerà il server Web Apache e aggiungerà gli iptables
appropriati regole per esporre il post 80.
-
Avvia un nuovo contenitore:
lxc launch ubuntu:18.04 web
-
Aggiorna l'elenco dei pacchetti nel contenitore.
lxc exec web -- apt update
-
Installa Apache nel contenitore LXD.
lxc exec web -- apt install apache2
-
Ottieni una shell nel contenitore LXD.
lxc exec web -- sudo --user ubuntu --login
-
Modifica la pagina Web predefinita per Apache per fare un riferimento che viene eseguito all'interno di un contenitore LXD.
sudo nano /var/www/html/index.html
Cambia la riga
It works!
(riga numero 224) aIt works inside a LXD container!
. Quindi, salva ed esci. -
Torna all'host. Abbiamo apportato tutte le modifiche necessarie al contenitore.
exit
-
Aggiungi un dispositivo proxy LXD per reindirizzare le connessioni da Internet alla porta 80 (HTTP) del server alla porta 80 di questo contenitore.
sudo lxc config device add web myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80
Nota Nelle versioni recenti di LXD, è necessario specificare un indirizzo IP (come 127.0.0.1 ) invece di un nome host (come localhost ). Se il tuo container ha già un dispositivo proxy che utilizza nomi host, puoi modificare la configurazione del container da sostituire con indirizzi IP eseguendo lxc config edit web
.
Dal tuo computer locale, vai all'indirizzo IP pubblico del tuo Linode in un browser web. Dovresti vedere la pagina predefinita di Apache:
Comandi LXD comuni
-
Elenca tutti i contenitori:
lxc list
To start your first container, try: lxc launch ubuntu:18.04 +------+-------+------+------+------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------+-------+------+------+------+-----------+
-
Elenca tutti i repository disponibili di immagini contenitore:
lxc remote list
Il repository+-----------------+------------------------------------------+---------------+-------------+--------+--------+ | NAME | URL | PROTOCOL | AUTH TYPE | PUBLIC | STATIC | +-----------------+------------------------------------------+---------------+-------------+--------+--------+ | images | https://images.linuxcontainers.org | simplestreams | none | YES | NO | +-----------------+------------------------------------------+---------------+-------------+--------+--------+ | local (default) | unix:// | lxd | file access | NO | YES | +-----------------+------------------------------------------+---------------+-------------+--------+--------+ | ubuntu | https://cloud-images.ubuntu.com/releases | simplestreams | none | YES | YES | +-----------------+------------------------------------------+---------------+-------------+--------+--------+ | ubuntu-daily | https://cloud-images.ubuntu.com/daily | simplestreams | none | YES | YES | +-----------------+------------------------------------------+---------------+-------------+--------+--------+
ubuntu
ha immagini contenitore delle versioni di Ubuntu. Leimages
repository ha immagini del contenitore di un gran numero di diverse distribuzioni Linux. Ilubuntu-daily
dispone di immagini contenitore giornaliere da utilizzare a scopo di test. Illocal
repository è il server LXD che abbiamo appena installato. Non è pubblico e può essere utilizzato per archiviare le tue immagini del contenitore. -
Elenca tutte le immagini del contenitore disponibili da un repository:
lxc image list ubuntu:
+------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+ | ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE | +------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+ | b (11 more) | 5b72cf46f628 | yes | ubuntu 18.04 LTS amd64 (release) (20190424) | x86_64 | 180.37MB | Apr 24, 2019 at 12:00am (UTC) | +------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+ | c (5 more) | 4716703f04fc | yes | ubuntu 18.10 amd64 (release) (20190402) | x86_64 | 313.29MB | Apr 2, 2019 at 12:00am (UTC) | +------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+ | d (5 more) | faef94acf5f9 | yes | ubuntu 19.04 amd64 (release) (20190417) | x86_64 | 322.56MB | Apr 17, 2019 at 12:00am (UTC) | +------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+ .....................................................................
Nota Le prime due colonne per l'alias e l'impronta digitale forniscono un identificatore che può essere utilizzato per specificare l'immagine del contenitore all'avvio.
Il frammento di output mostra le immagini del contenitore Ubuntu versioni 18.04 LTS, 18.10 e 19.04. Quando creiamo un contenitore possiamo semplicemente specificare l'alias breve. Ad esempio,ubuntu:b
significa che il repository èubuntu
e l'immagine del contenitore ha l'alias breveb
(per bionico , il nome in codice di Ubuntu 18.04 LTS). -
Ottieni maggiori informazioni su un'immagine contenitore:
lxc image info ubuntu:b
L'output mostra i dettagli dell'immagine del contenitore inclusi tutti gli alias disponibili. Per Ubuntu 18.04 LTS, possiamo specificareFingerprint: 5b72cf46f628b3d60f5d99af48633539b2916993c80fc5a2323d7d841f66afbe Size: 180.37MB Architecture: x86_64 Public: yes Timestamps: Created: 2019/04/24 00:00 UTC Uploaded: 2019/04/24 00:00 UTC Expires: 2023/04/26 00:00 UTC Last used: never Properties: release: bionic version: 18.04 architecture: amd64 label: release serial: 20190424 description: ubuntu 18.04 LTS amd64 (release) (20190424) os: ubuntu Aliases: - 18.04 - 18.04/amd64 - b - b/amd64 - bionic - bionic/amd64 - default - default/amd64 - lts - lts/amd64 - ubuntu - amd64 Cached: no Auto update: disabled
b
(perbionic
, il nome in codice di Ubuntu 18.04 LTS) o qualsiasi altro alias. -
Avvia un nuovo container con il nome
mycontainer
:lxc launch ubuntu:18.04 mycontainer
Creating mycontainer Starting mycontainer
-
Controlla l'elenco dei contenitori per assicurarti che il nuovo contenitore sia in esecuzione:
lxc list
+-------------+---------+-----------------------+---------------------------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-------------+---------+-----------------------+---------------------------+------------+-----------+ | mycontainer | RUNNING | 10.142.148.244 (eth0) | fde5:5d27:...:1371 (eth0) | PERSISTENT | 0 | +-------------+---------+-----------------------+---------------------------+------------+-----------+
-
Esegui i comandi di base in
mycontainer
:lxc exec mycontainer -- apt update lxc exec mycontainer -- apt upgrade
Nota I caratteri
--
istruire illxc
comando di non analizzare altri parametri della riga di comando. -
Apri una sessione di shell all'interno di
mycontainer
:lxc exec mycontainer -- sudo --login --user ubuntu
To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. [email protected]:~$
Nota
Le immagini del contenitore di Ubuntu hanno per impostazione predefinita un account non root con nome utente
ubuntu
. Questo account può utilizzaresudo
e non richiede una password per eseguire attività amministrative.Il
sudo
Il comando fornisce un accesso all'account esistenteubuntu
. -
Visualizza i log del contenitore:
lxc info mycontainer --show-log
-
Ferma il contenitore:
lxc stop mycontainer
-
Rimuovere il contenitore:
lxc delete mycontainer
Nota Un container deve essere fermato prima di poter essere eliminato.
Risoluzione dei problemi
Errore "unix.socket:connect:connection rifiutata"
Quando esegui qualsiasi lxc
comando, ottieni il seguente errore:
lxc list
Error: Get http://unix.socket/1.0: dial unix /var/snap/lxd/common/lxd/unix.socket: connect: connection refused
Ciò accade quando il servizio LXD non è attualmente in esecuzione. Per impostazione predefinita, il servizio LXD è in esecuzione non appena viene configurato correttamente. VedereInizializza LXD per configurare LXD.
Errore "unix.socket:connect:permesso negato"
Quando esegui qualsiasi lxc
comando, ottieni il seguente errore:
lxc list
Error: Get http://unix.socket/1.0: dial unix /var/snap/lxd/common/lxd/unix.socket: connect: permission denied
Ciò accade quando il tuo account utente limitato non è un membro di lxd
gruppo, oppure non ti sei disconnesso e hai effettuato nuovamente l'accesso in modo che la nuova appartenenza al gruppo a lxd
il gruppo viene aggiornato.
Se il tuo account utente è ubuntu
, il comando seguente mostra se sei un membro di lxd
gruppo:
groups ubuntu
ubuntu : ubuntu sudo lxd
In questo esempio, siamo membri di lxd
gruppo e dobbiamo solo disconnetterci e accedere di nuovo. Se non sei un membro di lxd
gruppo, consulta Inizializzare LXD su come rendere il tuo account limitato un membro del lxd
gruppo.
Passaggi successivi
Se prevedi di utilizzare un singolo sito Web, sarà sufficiente un singolo dispositivo proxy per il contenitore del sito Web. Se prevedi di utilizzare più siti Web, puoi installare host virtuali all'interno del contenitore del sito Web. Se invece desideri configurare più siti Web sul proprio container, dovrai configurare un proxy inverso in un container. In tal caso, il dispositivo proxy indirizzerebbe al contenitore del proxy inverso per indirizzare le connessioni ai contenitori dei singoli siti Web.
Maggiori informazioni
Si consiglia di consultare le seguenti risorse per ulteriori informazioni su questo argomento. Sebbene questi siano forniti nella speranza che possano essere utili, tieni presente che non possiamo garantire l'accuratezza o la tempestività dei materiali ospitati esternamente.
- Cosa sono i pacchetti snap
- Installazione di snapd
- Presentazione LXD
- Serie di post di blog su LXD 2.0
- Comunità di supporto LXD
- Prova LXD Online
- Impostazioni proxy inverso NGINX