¿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
-
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.
-
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.
-
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'.
-
Ver los detalles del paquete instantáneo LXD
lxd
. El siguiente resultado muestra que, actualmente, la última versión de LXD es3.12
en elstable
predeterminado canal. Este canal se actualiza a menudo con nuevas características. También hay otros canales como el3.0/stable
canal que tiene la versión LTS LXD (compatible con Ubuntu 18.04, hasta 2023) y2.0/stable
canal (compatible con Ubuntu 16.04, hasta 2021). Usaremos la última versión de LXD del predeterminadostable
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 -
-
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
-
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 cualquierlxc
comandos sin anteponersudo
. Sin esta adición, habría tenido que anteponersudo
a cadalxc
comando. -
Inicie una nueva sesión SSH para que se aplique el cambio anterior. Por ejemplo, cierre la sesión y vuelva a iniciarla.
-
Verifique el espacio libre disponible en disco:
df -h /
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.Filesystem Size Used Avail Use% Mounted on /dev/sda 49G 2.0G 45G 5% /
-
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.
-
Lanzar un nuevo contenedor:
lxc launch ubuntu:18.04 web
-
Actualice la lista de paquetes en el contenedor.
lxc exec web -- apt update
-
Instale Apache en el contenedor LXD.
lxc exec web -- apt install apache2
-
Consigue un caparazón en el contenedor LXD.
lxc exec web -- sudo --user ubuntu --login
-
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) aIt works inside a LXD container!
. Luego, guarde y salga. -
Salga de regreso al anfitrión. Hemos realizado todos los cambios necesarios en el contenedor.
exit
-
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
El repositorio+-----------------+------------------------------------------+---------------+-------------+--------+--------+ | 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
tiene imágenes de contenedor de versiones de Ubuntu. Lasimages
El repositorio tiene imágenes contenedoras de una gran cantidad de distribuciones de Linux diferentes. Elubuntu-daily
tiene imágenes de contenedor diarias que se utilizarán con fines de prueba. Ellocal
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 esubuntu
y la imagen del contenedor tiene el alias cortob
(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
El resultado muestra los detalles de la imagen del contenedor, incluidos todos los alias disponibles. Para Ubuntu 18.04 LTS, podemos especificarFingerprint: 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
(parabionic
, 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 allxc
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 usarsudo
y no requiere una contraseña para realizar tareas administrativas.El
sudo
El comando proporciona un inicio de sesión en la cuenta existenteubuntu
. -
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