GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Un guide pour débutants sur LXD :Configuration d'un serveur Web Apache

Qu'est-ce que LXD ?

LXD (prononcé « Lex-Dee ») est un gestionnaire de conteneurs système construit au-dessus de LXC (Linux Containers) qui est actuellement pris en charge par Canonical. L'objectif de LXD est de fournir une expérience similaire à une machine virtuelle mais via la conteneurisation plutôt que la virtualisation matérielle. Comparé à Docker pour la livraison d'applications, LXD offre une fonctionnalité de système d'exploitation presque complète avec des fonctionnalités supplémentaires telles que des instantanés, des migrations en direct et la gestion du stockage.

Les principaux avantages de LXD sont la prise en charge des conteneurs haute densité et les performances qu'il offre par rapport aux machines virtuelles. Un ordinateur avec 2 Go de RAM peut supporter adéquatement une demi-douzaine de conteneurs. De plus, LXD prend officiellement en charge les images de conteneurs des principales distributions Linux. Nous pouvons choisir la distribution et la version Linux à exécuter dans le conteneur.

Ce guide explique comment installer et configurer LXD 3 sur un Linode et comment configurer un serveur Web Apache dans un conteneur.

Remarque Pour simplifier, le terme conteneur est utilisé tout au long de ce guide pour décrire les conteneurs du système LXD.

Avant de commencer

  1. Suivez le guide Création d'une instance de calcul. Sélectionnez un Linode avec au moins 2 Go de mémoire RAM, comme le Linode 2 Go. Spécifiez la distribution Ubuntu 19.04. Vous pouvez spécifier une distribution Linux différente, tant qu'il existe une prise en charge des paquets snap (snapd); voir les informations supplémentaires pour plus de détails.

  2. Suivez notre guide Configuration et sécurisation d'une instance de calcul pour mettre à jour votre système. Vous pouvez également définir le fuseau horaire, configurer votre nom d'hôte, créer un compte utilisateur limité et renforcer l'accès SSH.

Configurer la prise en charge du package Snap

LXD est disponible en tant que package Debian dans les versions de support à long terme (LTS) d'Ubuntu, telles que Ubuntu 18.04 LTS. Pour les autres versions d'Ubuntu et d'autres distributions, LXD est disponible sous forme de package instantané. Les packages Snap sont des packages universels car il existe un seul fichier de package qui fonctionne sur toutes les distributions Linux prises en charge. Consultez la section Plus d'informations pour plus de détails sur ce qu'est un package snap, quelles distributions Linux sont prises en charge et comment le configurer.

  1. Vérifiez que le support snap est installé correctement. La commande suivante indique soit qu'aucun package snap n'est installé, soit que certains le sont.

    snap list
    
    No snaps are installed yet. Try 'snap install hello-world'.
  2. Voir les détails du package snap LXD lxd . La sortie ci-dessous montre qu'actuellement, la dernière version de LXD est 3.12 dans le stable par défaut canal. Cette chaîne est souvent mise à jour avec de nouvelles fonctionnalités. Il existe également d'autres canaux tels que le 3.0/stable canal qui a la version LTS LXD (prise en charge avec Ubuntu 18.04, jusqu'en 2023) et le 2.0/stable channel (pris en charge avec Ubuntu 16.04, jusqu'en 2021). Nous utiliserons la dernière version de LXD à partir du stable par défaut chaîne.

    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. Installez le lxd paquet instantané. Exécutez la commande suivante pour installer le package snap pour LXD.

    sudo snap install lxd
    
    lxd 3.12 from Canonical✓ installed

Vous pouvez vérifier que le package snap a été installé en exécutant snap list de nouveau. Le core snap package est une condition préalable pour tout système prenant en charge le package snap. Lorsque vous installez votre premier package snap, core est installé et partagé avec tous les autres packages snap qui seront installés à l'avenir.

    snap list



Name  Version  Rev    Tracking  Publisher   Notes
core  16-2.38  6673   stable    canonical✓  core
lxd   3.12     10601  stable    canonical✓  -

Initialiser LXD

  1. Ajoutez votre utilisateur Unix non root au lxd groupe :

    sudo usermod -a -G lxd username
    
    Remarque En ajoutant le compte utilisateur Unix non root au lxd groupe, vous pouvez exécuter n'importe quel lxc commandes sans préfixer sudo . Sans cet ajout, vous auriez dû ajouter sudo à chaque lxc commande.
  2. Démarrez une nouvelle session SSH pour que la modification précédente prenne effet. Par exemple, déconnectez-vous et reconnectez-vous.

  3. Vérifiez l'espace disque disponible :

    df -h /
    

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda         49G  2.0G   45G   5% /
    Dans ce cas, il y a 45 Go d'espace disque libre. LXD nécessite au moins 15 Go d'espace pour les besoins de stockage des conteneurs. Nous allouerons 15 Go d'espace pour LXD, laissant 30 Go d'espace libre pour les besoins du serveur.

  4. Exécutez lxd init pour initialiser LXD :

    sudo lxd init
    

    Vous serez invité plusieurs fois au cours du processus d'initialisation. Choisissez les valeurs par défaut pour toutes les options.

    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]:

Serveur Web Apache avec LXD

Cette section va créer un conteneur, installer le serveur Web Apache et ajouter les iptables appropriés règles afin d'exposer le poste 80.

  1. Lancer un nouveau conteneur :

    lxc launch ubuntu:18.04 web
    
  2. Mettez à jour la liste des packages dans le conteneur.

    lxc exec web -- apt update
    
  3. Installez Apache dans le conteneur LXD.

    lxc exec web -- apt install apache2
    
  4. Obtenez un shell dans le conteneur LXD.

    lxc exec web -- sudo --user ubuntu --login
    
  5. Modifiez la page Web par défaut d'Apache pour indiquer qu'il s'exécute dans un conteneur LXD.

    sudo nano /var/www/html/index.html
    

    Changez la ligne It works! (numéro de ligne 224) à It works inside a LXD container! . Ensuite, enregistrez et quittez.

  6. Revenez à l'hôte. Nous avons apporté toutes les modifications nécessaires au conteneur.

    exit
    
  7. Ajouter un périphérique proxy LXD pour rediriger les connexions d'Internet vers le port 80 (HTTP) du serveur vers le port 80 de ce conteneur.

    sudo lxc config device add web myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80
    
Remarque Dans les versions récentes de LXD, vous devez spécifier une adresse IP (telle que 127.0.0.1 ) au lieu d'un nom d'hôte (tel que localhost ). Si votre conteneur dispose déjà d'un périphérique proxy qui utilise des noms d'hôte, vous pouvez modifier la configuration du conteneur pour la remplacer par des adresses IP en exécutant lxc config edit web .
  • Depuis votre ordinateur local, accédez à l'adresse IP publique de votre Linode dans un navigateur Web. Vous devriez voir la page Apache par défaut :

  • Commandes LXD communes

    • Lister tous les conteneurs :

       lxc list
      
      To start your first container, try: lxc launch ubuntu:18.04
      
      +------+-------+------+------+------+-----------+
      | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
      +------+-------+------+------+------+-----------+
    • Répertorier tous les référentiels d'images de conteneurs disponibles :

        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    |
      +-----------------+------------------------------------------+---------------+-------------+--------+--------+
      Le référentiel ubuntu contient des images de conteneurs de versions d'Ubuntu. Les images Le référentiel contient des images de conteneurs d'un grand nombre de distributions Linux différentes. Le ubuntu-daily a des images de conteneurs quotidiennes à utiliser à des fins de test. Le local repository est le serveur LXD que nous venons d'installer. Il n'est pas public et peut être utilisé pour stocker vos propres images de conteneurs.

    • Répertorier toutes les images de conteneur disponibles à partir d'un référentiel :

       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) |
      +------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+
      .....................................................................

      Remarque Les deux premières colonnes pour l'alias et l'empreinte digitale fournissent un identifiant qui peut être utilisé pour spécifier l'image du conteneur lors de son lancement.
      L'extrait de sortie montre les images de conteneur Ubuntu versions 18.04 LTS, 18.10 et 19.04. Lors de la création d'un conteneur, nous pouvons simplement spécifier l'alias court. Par exemple, ubuntu:b signifie que le dépôt est ubuntu et l'image du conteneur a l'alias court b (pour bionique , le nom de code d'Ubuntu 18.04 LTS).

    • Obtenir plus d'informations sur une image de conteneur :

       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
      La sortie affiche les détails de l'image du conteneur, y compris tous les alias disponibles. Pour Ubuntu 18.04 LTS, nous pouvons spécifier soit b (pour bionic , le nom de code d'Ubuntu 18.04 LTS) ou tout autre alias.

    • Lancer un nouveau conteneur avec le nom mycontainer :

       lxc launch ubuntu:18.04 mycontainer
      
      Creating mycontainer
      Starting mycontainer
    • Vérifiez la liste des conteneurs pour vous assurer que le nouveau conteneur est en cours d'exécution :

       lxc list
      
      +-------------+---------+-----------------------+---------------------------+------------+-----------+
      |    NAME     |  STATE  |         IPV4          |          IPV6             |    TYPE    | SNAPSHOTS |
      +-------------+---------+-----------------------+---------------------------+------------+-----------+
      | mycontainer | RUNNING | 10.142.148.244 (eth0) | fde5:5d27:...:1371 (eth0) | PERSISTENT | 0         |
      +-------------+---------+-----------------------+---------------------------+------------+-----------+
    • Exécutez les commandes de base dans mycontainer :

       lxc exec mycontainer -- apt update
       lxc exec mycontainer -- apt upgrade
      
      Remarque Les caractères -- instruire le lxc commande pour ne plus analyser les paramètres de ligne de commande.
    • Ouvrir une session shell dans 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]:~$
      Remarque

      Les images de conteneur Ubuntu ont par défaut un compte non root avec le nom d'utilisateur ubuntu . Ce compte peut utiliser sudo et ne nécessite pas de mot de passe pour effectuer des tâches administratives.

      Le sudo La commande fournit une connexion au compte existant ubuntu .

    • Afficher les journaux du conteneur :

       lxc info mycontainer --show-log
      
    • Arrêtez le conteneur :

       lxc stop mycontainer
      
    • Retirez le conteneur :

       lxc delete mycontainer
      
      Remarque Un conteneur doit être arrêté avant de pouvoir être supprimé.

    Dépannage

    Erreur "unix.socket :connect :connexion refusée"

    Lorsque vous exécutez n'importe quel lxc commande, vous obtenez l'erreur suivante :

        lxc list
    
    
    
    
    Error: Get http://unix.socket/1.0: dial unix /var/snap/lxd/common/lxd/unix.socket: connect: connection refused

    Cela se produit lorsque le service LXD n'est pas en cours d'exécution. Par défaut, le service LXD s'exécute dès qu'il est configuré avec succès. Voir Initialiser LXD pour configurer LXD.

    Erreur "unix.socket :connect :autorisation refusée"

    Lorsque vous exécutez n'importe quel lxc commande, vous obtenez l'erreur suivante :

        lxc list
    
    
    
    
    Error: Get http://unix.socket/1.0: dial unix /var/snap/lxd/common/lxd/unix.socket: connect: permission denied

    Cela se produit lorsque votre compte d'utilisateur limité n'est pas membre du lxd groupe, ou vous ne vous êtes pas déconnecté et reconnecté afin que la nouvelle adhésion au groupe au lxd groupe est mis à jour.

    Si votre compte utilisateur est ubuntu , la commande suivante indique si vous êtes membre du groupe lxd groupe :

        groups ubuntu
    
    
    
    
    ubuntu : ubuntu sudo lxd

    Dans cet exemple, nous sommes membres du lxd groupe et nous avons juste besoin de nous déconnecter et de nous reconnecter. Si vous n'êtes pas membre du lxd groupe, voirInitialize LXD pour savoir comment faire de votre compte limité un membre du lxd groupe.

    Étapes suivantes

    Si vous envisagez d'utiliser un seul site Web, un seul périphérique proxy vers le conteneur de site Web suffira. Si vous envisagez d'utiliser plusieurs sites Web, vous pouvez installer des hôtes virtuels dans le conteneur du site Web. Si vous souhaitez plutôt configurer plusieurs sites Web sur leur propre conteneur, vous devrez alors configurer un proxy inverse dans un conteneur. Dans ce cas, le périphérique proxy se dirigerait vers le conteneur de proxy inverse pour diriger les connexions vers les conteneurs de sites Web individuels.

    Plus d'informations

    Vous pouvez consulter les ressources suivantes pour plus d'informations sur ce sujet. Bien que ceux-ci soient fournis dans l'espoir qu'ils seront utiles, veuillez noter que nous ne pouvons pas garantir l'exactitude ou l'actualité des documents hébergés en externe.

    • Que sont les forfaits instantanés ?
    • Installation de snapd
    • Présentation de LXD
    • Série d'articles de blog sur LXD 2.0
    • Communauté d'assistance LXD
    • Essayez LXD en ligne
    • Paramètres du proxy inverse NGINX

    Docker
    1. Comment configurer un serveur Web Apache

    2. Réglage du serveur Web Apache Keepalive

    3. Installer le serveur Web Apache CentOS 6 / RHEL 6

    4. Configurer le serveur Web Ubuntu ?

    5. Comment configurer un serveur Web Apache simple dans un conteneur Docker

    Définir une adresse IP statique sur Ubuntu :un guide pour les débutants

    Comment installer le serveur Web Apache sur Linux

    Comment installer le serveur Web Apache sur Debian 11

    Comment installer le serveur Web Apache sur Ubuntu 18.04

    Comment optimiser le serveur Web Apache ?

    Guide du débutant pour Apache HTTP Server - Installation et configuration