¿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. 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, administración de almacenamiento y más.
Los principales beneficios de LXD son la alta densidad de contenedores que puede admitir 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 configurar un Linode para que funcione con LXD, cómo funciona LXD en la práctica y cómo solucionar problemas comunes.
Nota Para simplificar, el término contenedor se usa a lo largo de esta guía para describir los contenedores LXD.
Antes de comenzar
-
Si aún no lo ha hecho, cree una cuenta de Linode y una instancia de cómputo. Consulte nuestras guías Introducción a Linode y Creación de una instancia informática.
-
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.
Montar volumen de almacenamiento
Al configurar LXD, puede almacenar los datos del contenedor en un volumen externo (como un volumen de almacenamiento en bloque) o en un disco montado en su Linode.
Bloquear volumen de almacenamiento
-
Siga la guía Cómo usar el almacenamiento en bloque con su Linode y cree un volumen de almacenamiento en bloque con un tamaño de al menos 20 GB y adjúntelo a su Linode. Tome nota del nombre del dispositivo y la ruta al volumen.
Precaución No formatee el volumen y no lo agregue a
/etc/fstab
. -
Edite su perfil de configuración y en Configuración de arranque seleccione GRUB 2 como su núcleo. Consulte Ejecutar un kernel suministrado por distribución en un KVM Linode para obtener más información.
-
Reinicie su Linode desde Linode Manager.
Disco
-
En Linode Manager, busque los Discos y haga clic en Crear un nuevo disco .
Nota Si el disco de distribución de Linode ya tiene asignado el 100 % del espacio disponible en el disco, deberá cambiar el tamaño del disco antes de poder crear un disco de almacenamiento. Consulte Cambiar el tamaño de un disco para obtener más información.
-
Edite el perfil de configuración de Linode. En Bloquear asignación de dispositivos , asigne su nuevo disco a
/dev/sdc
. Tome nota de esta ruta, que necesitará cuando configure LXD en la siguiente sección. -
En Configuración de arranque seleccione GRUB 2 como su núcleo.
-
Reinicie su Linode desde Linode Manager.
Inicializar LXD
-
Instale los paquetes
lxd
yzfsutils-linux
:sudo apt install lxd zfsutils-linux
-
Agregue su usuario de Unix al
lxd
grupo:sudo usermod -a -G lxd username
-
Inicie una nueva sesión SSH para que este cambio surta efecto:
-
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 excepto
Use existing block device?
Para esta opción, seleccione sí y luego ingrese la ruta al volumen de almacenamiento agregado en la sección anterior.
Comandos LXD
-
Listar todos los contenedores:
lxc list
Generating a client certificate. This may take a minute... If this is your first time using LXD, you should also run: sudo lxd init To start your first container, try: lxc launch ubuntu:16.04 +------+-------+------+------+------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------+-------+------+------+------+-----------+
-
Enumere todas las imágenes de contenedores disponibles:
lxc image list images:
+---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | alpine/3.4 (3 more) | 39a3bf44c9d8 | yes | Alpine 3.4 amd64 (20180126_17:50) | x86_64 | 2.04MB | Jan 26, 2018 at 12:00am (UTC) | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | alpine/3.4/armhf (1 more) | 9fe7c201924c | yes | Alpine 3.4 armhf (20170111_20:27) | armv7l | 1.58MB | Jan 11, 2017 at 12:00am (UTC) | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | alpine/3.4/i386 (1 more) | d39f2f2ba547 | yes | Alpine 3.4 i386 (20180126_17:50) | i686 | 1.88MB | Jan 26, 2018 at 12:00am (UTC) | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | alpine/3.5 (3 more) | 5533a5247551 | yes | Alpine 3.5 amd64 (20180126_17:50) | x86_64 | 1.70MB | Jan 26, 2018 at 12:00am (UTC) | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | alpine/3.5/i386 (1 more) | 5e93d5f4cae1 | yes | Alpine 3.5 i386 (20180126_17:50) | i686 | 1.73MB | Jan 26, 2018 at 12:00am (UTC) | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | alpine/3.6 (3 more) | 5010616d9a24 | yes | Alpine 3.6 amd64 (20180126_17:50) | x86_64 | 1.73MB | Jan 26, 2018 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.
-
Inicie un nuevo contenedor con el nombre
mycontainer
:lxc launch ubuntu:16.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
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:16.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
-
Agrega las
iptables
regla para exponer el puerto 80. Cuando alguien se conecta al puerto 80 a través de la dirección IP pública, esta regla lo redirige al puerto 80 del contenedor.Deberá reemplazar
your_public_ip
yyour_container_ip
con su IP pública y la IP del contenedor respectivamente en este comando.PORT=80 PUBLIC_IP=your_public_ip CONTAINER_IP=your_container_ip sudo -E bash -c 'iptables -t nat -I PREROUTING -i eth0 -p TCP -d $PUBLIC_IP --dport $PORT -j DNAT --to-destination $CONTAINER_IP:$PORT -m comment --comment "forward to the Apache2 container"'
-
Haz las
iptables
la regla persiste al reiniciar instalandoiptables-persistent
. Cuando se le solicite guardar las reglas de IPv4 e IPv6, haga clic en Sí. para salvarlos.sudo apt install iptables-persistent
-
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:
Pasos siguientes
Si planea usar un solo sitio web, entonces un solo iptables
la regla al contenedor del sitio web será suficiente. Si planea usar varios sitios web, deberá instalar un servidor web como NGINX y configurar un proxy inverso en un contenedor. Las iptables
entonces la regla redirigiría a este contenedor.
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.
- Introducción a LXD
- Serie de entradas de blog sobre LXD 2.0
- Comunidad de apoyo de LXD
- Pruebe LXD en línea