GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Una guía para principiantes de LXD:configuración de un servidor web Apache

¿Qué es LXD?

LXD (pronunciado "Lex-Dee") es un administrador de contenedores del sistema construido sobre LXC (Linux Containers) que actualmente es compatible con Canonical. El objetivo de LXD es proporcionar una experiencia similar a una máquina virtual pero a través de contenedores en lugar de virtualización de hardware. En comparación con Docker para la entrega de aplicaciones, LXD ofrece una funcionalidad de sistema operativo casi completa con características adicionales como instantáneas, migraciones en vivo y administración de almacenamiento.

Los principales beneficios de LXD son la compatibilidad con contenedores de alta densidad y el rendimiento que ofrece en comparación con las máquinas virtuales. Una computadora con 2GB de RAM puede soportar adecuadamente media docena de contenedores. Además, LXD admite oficialmente las imágenes de contenedor de las principales distribuciones de Linux. Podemos elegir la distribución y versión de Linux para ejecutar en el contenedor.

Esta guía cubre cómo instalar y configurar LXD 3 en un Linode y cómo configurar un servidor web Apache en un contenedor.

Nota Para simplificar, el término contenedor se usa a lo largo de esta guía para describir los contenedores del sistema LXD.

Antes de comenzar

  1. Complete la guía Creación de una instancia informática. Seleccione un Linode con al menos 2 GB de memoria RAM, como el Linode de 2 GB. Especifique la distribución de Ubuntu 19.04. Puede especificar una distribución de Linux diferente, siempre que haya soporte para paquetes instantáneos (snapd); consulte Más información para obtener más detalles.

  2. Siga nuestra guía de configuración y protección de una instancia informática para actualizar su sistema. También puede establecer la zona horaria, configurar su nombre de host, crear una cuenta de usuario limitada y fortalecer el acceso SSH.

Configure la compatibilidad con Snap Package

LXD está disponible como un paquete Debian en las versiones de soporte a largo plazo (LTS) de Ubuntu, como Ubuntu 18.04 LTS. Para otras versiones de Ubuntu y otras distribuciones, LXD está disponible como paquete instantáneo. Los paquetes Snap son paquetes universales porque hay un solo archivo de paquete que funciona en cualquier distribución de Linux compatible. Consulte la sección Más información para obtener más detalles sobre qué es un paquete instantáneo, qué distribuciones de Linux son compatibles y cómo configurarlo.

  1. Verifique que el soporte de complemento esté instalado correctamente. El siguiente comando muestra que no hay paquetes instantáneos instalados o que algunos sí lo están.

    snap list
    
    No snaps are installed yet. Try 'snap install hello-world'.
  2. Ver los detalles del paquete instantáneo LXD lxd . El siguiente resultado muestra que, actualmente, la última versión de LXD es 3.12 en el stable predeterminado canal. Este canal se actualiza a menudo con nuevas características. También hay otros canales como el 3.0/stable canal que tiene la versión LTS LXD (compatible con Ubuntu 18.04, hasta 2023) y 2.0/stable canal (compatible con Ubuntu 16.04, hasta 2021). Usaremos la última versión de LXD del predeterminado stable canal.

    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. Instala el lxd paquete instantáneo. Ejecute el siguiente comando para instalar el paquete snap para LXD.

    sudo snap install lxd
    
    lxd 3.12 from Canonical✓ installed

Puede verificar que el paquete de instantáneas se haya instalado ejecutando snap list otra vez. El core El paquete instantáneo es un requisito previo para cualquier sistema compatible con paquetes instantáneos. Cuando instala su primer paquete instantáneo, core se instala y se comparte entre todos los demás paquetes instantáneos que se instalarán en el futuro.

    snap list



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

Inicializar LXD

  1. Agregue su usuario de Unix no root al lxd grupo:

    sudo usermod -a -G lxd username
    
    Nota Agregando la cuenta de usuario Unix no root a lxd grupo, puede ejecutar cualquier lxc comandos sin anteponer sudo . Sin esta adición, habría tenido que anteponer sudo a cada lxc comando.
  2. Inicie una nueva sesión SSH para que se aplique el cambio anterior. Por ejemplo, cierre la sesión y vuelva a iniciarla.

  3. Verifique el espacio libre disponible en disco:

    df -h /
    

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda         49G  2.0G   45G   5% /
    En este caso, hay 45 GB de espacio libre en disco. LXD requiere al menos 15 GB de espacio para las necesidades de almacenamiento de los contenedores. Asignaremos 15 GB de espacio para LXD, dejando 30 GB de espacio libre para las necesidades del servidor.

  4. Ejecute lxd init para inicializar LXD:

    sudo lxd init
    

    Se le pedirá varias veces durante el proceso de inicialización. Elija los valores predeterminados para todas las opciones.

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

Servidor web Apache con LXD

Esta sección creará un contenedor, instalará el servidor web Apache y agregará las iptables apropiadas. reglas para exponer el post 80.

  1. Lanzar un nuevo contenedor:

    lxc launch ubuntu:18.04 web
    
  2. Actualice la lista de paquetes en el contenedor.

    lxc exec web -- apt update
    
  3. Instale Apache en el contenedor LXD.

    lxc exec web -- apt install apache2
    
  4. Consigue un caparazón en el contenedor LXD.

    lxc exec web -- sudo --user ubuntu --login
    
  5. Edite la página web predeterminada de Apache para hacer referencia a que se ejecuta dentro de un contenedor LXD.

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

    Cambia la línea It works! (línea número 224) a It works inside a LXD container! . Luego, guarde y salga.

  6. Salga de regreso al anfitrión. Hemos realizado todos los cambios necesarios en el contenedor.

    exit
    
  7. Agregar un dispositivo proxy LXD para redirigir las conexiones de Internet al puerto 80 (HTTP) en el servidor al puerto 80 en este contenedor.

    sudo lxc config device add web myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80
    
Nota En versiones recientes de LXD, debe especificar una dirección IP (como 127.0.0.1 ) en lugar de un nombre de host (como localhost ). Si su contenedor ya tiene un dispositivo proxy que usa nombres de host, puede editar la configuración del contenedor para reemplazarlo con direcciones IP ejecutando lxc config edit web .
  • Desde su computadora local, navegue hasta la dirección IP pública de Linode en un navegador web. Debería ver la página predeterminada de Apache:

  • Comandos LXD comunes

    • Listar todos los contenedores:

       lxc list
      
      To start your first container, try: lxc launch ubuntu:18.04
      
      +------+-------+------+------+------+-----------+
      | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
      +------+-------+------+------+------+-----------+
    • Enumere todos los repositorios disponibles de imágenes de contenedores:

        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    |
      +-----------------+------------------------------------------+---------------+-------------+--------+--------+
      El repositorio ubuntu tiene imágenes de contenedor de versiones de Ubuntu. Las images El repositorio tiene imágenes contenedoras de una gran cantidad de distribuciones de Linux diferentes. El ubuntu-daily tiene imágenes de contenedor diarias que se utilizarán con fines de prueba. El local repositorio es el servidor LXD que acabamos de instalar. No es público y se puede utilizar para almacenar sus propias imágenes de contenedores.

    • Enumere todas las imágenes de contenedores disponibles de un repositorio:

       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 Las dos primeras columnas para el alias y la huella dactilar proporcionan un identificador que se puede usar para especificar la imagen del contenedor al iniciarlo.
      El fragmento de salida muestra las imágenes del contenedor Ubuntu versiones 18.04 LTS, 18.10 y 19.04. Al crear un contenedor, solo podemos especificar el alias corto. Por ejemplo, ubuntu:b significa que el repositorio es ubuntu y la imagen del contenedor tiene el alias corto b (para biónico , el nombre en clave de Ubuntu 18.04 LTS).

    • Obtenga más información sobre una imagen de contenedor:

       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
      El resultado muestra los detalles de la imagen del contenedor, incluidos todos los alias disponibles. Para Ubuntu 18.04 LTS, podemos especificar b (para bionic , el nombre en clave de Ubuntu 18.04 LTS) o cualquier otro alias.

    • Inicie un nuevo contenedor con el nombre mycontainer :

       lxc launch ubuntu:18.04 mycontainer
      
      Creating mycontainer
      Starting mycontainer
    • Verifique la lista de contenedores para asegurarse de que el nuevo contenedor se esté ejecutando:

       lxc list
      
      +-------------+---------+-----------------------+---------------------------+------------+-----------+
      |    NAME     |  STATE  |         IPV4          |          IPV6             |    TYPE    | SNAPSHOTS |
      +-------------+---------+-----------------------+---------------------------+------------+-----------+
      | mycontainer | RUNNING | 10.142.148.244 (eth0) | fde5:5d27:...:1371 (eth0) | PERSISTENT | 0         |
      +-------------+---------+-----------------------+---------------------------+------------+-----------+
    • Ejecutar comandos básicos en mycontainer :

       lxc exec mycontainer -- apt update
       lxc exec mycontainer -- apt upgrade
      
      Nota Los caracteres -- instruir al lxc comando para no analizar más parámetros de la línea de comandos.
    • Abra una sesión de shell dentro de 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

      Las imágenes del contenedor de Ubuntu tienen por defecto una cuenta no root con el nombre de usuario ubuntu . Esta cuenta puede usar sudo y no requiere una contraseña para realizar tareas administrativas.

      El sudo El comando proporciona un inicio de sesión en la cuenta existente ubuntu .

    • Ver los registros del contenedor:

       lxc info mycontainer --show-log
      
    • Detener el contenedor:

       lxc stop mycontainer
      
    • Retire el contenedor:

       lxc delete mycontainer
      
      Nota Es necesario detener un contenedor antes de poder eliminarlo.

    Solución de problemas

    Error “unix.socket:connect:conexión rechazada”

    Cuando ejecuta cualquier lxc comando, obtiene el siguiente error:

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

    Esto sucede cuando el servicio LXD no se está ejecutando actualmente. De forma predeterminada, el servicio LXD se ejecuta tan pronto como se configura correctamente. Consulte Inicializar LXD para configurar LXD.

    Error “unix.socket:connect:permiso denegado”

    Cuando ejecuta cualquier lxc comando, obtiene el siguiente error:

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

    Esto sucede cuando su cuenta de usuario limitada no es miembro de lxd grupo, o no cerró la sesión y volvió a iniciar sesión para que la nueva membresía del grupo sea lxd el grupo se actualiza.

    Si su cuenta de usuario es ubuntu , el siguiente comando muestra si eres miembro de lxd grupo:

        groups ubuntu
    
    
    
    
    ubuntu : ubuntu sudo lxd

    En este ejemplo, somos miembros de lxd grupo y solo tenemos que cerrar sesión y volver a iniciar sesión. Si no eres miembro de lxd grupo, consulte Inicializar LXD sobre cómo hacer que su cuenta limitada sea miembro de lxd grupo.

    Pasos siguientes

    Si planea usar un solo sitio web, será suficiente un solo dispositivo proxy para el contenedor del sitio web. Si planea usar varios sitios web, puede instalar hosts virtuales dentro del contenedor del sitio web. Si, en cambio, desea configurar varios sitios web en su propio contenedor, deberá configurar un proxy inverso en un contenedor. En ese caso, el dispositivo proxy se dirigiría al contenedor de proxy inverso para dirigir las conexiones a los contenedores de sitios web individuales.

    Más información

    Es posible que desee consultar los siguientes recursos para obtener información adicional sobre este tema. Si bien estos se proporcionan con la esperanza de que sean útiles, tenga en cuenta que no podemos garantizar la precisión o la puntualidad de los materiales alojados externamente.

    • ¿Qué son los paquetes instantáneos?
    • Instalando Snapd
    • Introducción a LXD
    • Serie de entradas de blog sobre LXD 2.0
    • Comunidad de apoyo de LXD
    • Pruebe LXD en línea
    • Configuración de proxy inverso NGINX

    Docker
    1. Instale el servidor web Apache CentOS 6 / RHEL 6

    2. Instale el servidor web Apache HTTPD en Fedora 18

    3. Instale el servidor web Apache en openSUSE 12

    4. Instale el servidor web Apache en Ubuntu 12.10

    5. ¿Configurando el servidor web de Ubuntu?

    Configurar una IP estática en Ubuntu:una guía para principiantes

    Cómo instalar el servidor web Apache en Linux

    Cómo instalar el servidor web Apache en Debian 11

    Cómo instalar el servidor web Apache en Ubuntu 18.04

    ¿Cómo optimizar el servidor web Apache?

    Guía para principiantes del servidor Apache HTTP:instalación y configuración