GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Una guida per principianti a LXD:configurazione di un server Web Apache

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

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

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

  1. 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'.
  2. Visualizza i dettagli del pacchetto snap LXD lxd . L'output seguente mostra che, attualmente, l'ultima versione di LXD è 3.12 nel predefinito stable canale. Questo canale viene aggiornato spesso con nuove funzionalità. Ci sono anche altri canali come 3.0/stable canale che ha la versione LTS LXD (supportata insieme a Ubuntu 18.04, fino al 2023) e il 2.0/stable canale (supportato insieme a Ubuntu 16.04, fino al 2021). Utilizzeremo l'ultima versione di LXD dall'impostazione predefinita stable 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 -
  3. 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

  1. 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 qualsiasi lxc comandi senza anteporre sudo . Senza questa aggiunta, avresti dovuto anteporre sudo a ogni lxc comando.
  2. Avvia una nuova sessione SSH per rendere effettiva la modifica precedente. Ad esempio, esci e accedi di nuovo.

  3. Verifica lo spazio libero su disco disponibile:

    df -h /
    

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda         49G  2.0G   45G   5% /
    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.

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

  1. Avvia un nuovo contenitore:

    lxc launch ubuntu:18.04 web
    
  2. Aggiorna l'elenco dei pacchetti nel contenitore.

    lxc exec web -- apt update
    
  3. Installa Apache nel contenitore LXD.

    lxc exec web -- apt install apache2
    
  4. Ottieni una shell nel contenitore LXD.

    lxc exec web -- sudo --user ubuntu --login
    
  5. 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) a It works inside a LXD container! . Quindi, salva ed esci.

  6. Torna all'host. Abbiamo apportato tutte le modifiche necessarie al contenitore.

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

      +-----------------+------------------------------------------+---------------+-------------+--------+--------+
      |      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    |
      +-----------------+------------------------------------------+---------------+-------------+--------+--------+
      Il repository ubuntu ha immagini contenitore delle versioni di Ubuntu. Le images repository ha immagini del contenitore di un gran numero di diverse distribuzioni Linux. Il ubuntu-daily dispone di immagini contenitore giornaliere da utilizzare a scopo di test. Il local 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 breve b (per bionico , il nome in codice di Ubuntu 18.04 LTS).

    • Ottieni maggiori informazioni su un'immagine contenitore:

       lxc image info ubuntu:b
      

      Fingerprint: 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
      L'output mostra i dettagli dell'immagine del contenitore inclusi tutti gli alias disponibili. Per Ubuntu 18.04 LTS, possiamo specificare b (per bionic , 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 il lxc 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ò utilizzare sudo e non richiede una password per eseguire attività amministrative.

      Il sudo Il comando fornisce un accesso all'account esistente ubuntu .

    • 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

    Docker
    1. Come configurare un server web Apache

    2. Ottimizzazione del server Web Apache Keep-alive

    3. Installa il server web Apache CentOS 6 / RHEL 6

    4. Una guida per principianti a LXD:configurazione di un proxy inverso per ospitare più siti web

    5. Accedi a un server Web Apache all'interno di un container LXD

    Impostazione di un IP statico su Ubuntu:una guida per principianti

    Come installare il server web Apache su Linux

    Come installare il server Web Apache su Debian 11

    Come installare Apache Web Server su Ubuntu 18.04

    Come ottimizzare il server Web Apache?

    Guida per principianti ad Apache HTTP Server – Installazione e configurazione