Introducción a los Contenedores LXD de Ubuntu

Los contenedores son útiles por muchas razones. Aislan las aplicaciones del resto del sistema. Son portátiles y fáciles de clonar y/o mover a otros sistemas operativos. Y, en el caso de Linux, funcionan de la misma manera en cualquier distribución, sin adaptaciones necesarias. Si necesitas mover un contenedor de RedHat a Ubuntu, debería ser solo una simple operación de copia.

Docker es una solución popular diseñada para contener una sola aplicación: por ejemplo, un servidor de base de datos MySQL. LXD es similar en algunos aspectos pero diseñado para contener un sistema operativo completo. Esto lo hace útil para algunos escenarios. Por ejemplo, puedes iniciar un contenedor LXD, instalar un servidor de base de datos y un servidor http. Luego puedes crear un sitio web de WordPress dentro. Ahora puedes cambiar de nube a nube simplemente moviendo este contenedor LXD donde se necesite cuando no estés satisfecho con tu proveedor anterior. Y dado que es fácil clonar un contenedor, incluso puedes subir tu sitio web a múltiples proveedores de nube para crear una configuración redundante y de alta disponibilidad.

LXD no virtualiza hardware como lo hacen QEMU o VirtualBox, lo que significa que es muy rápido, ofreciendo una velocidad de ejecución casi nativa.

Instalar y Configurar LXD

Abre una terminal e instala LXD, además de las utilidades ZFS, que te ayudarán a acelerar algunas operaciones y a ahorrar espacio en disco al trabajar con contenedores.

sudo apt install zfsutils-linux lxd

lxd-apt-install

Inicia la configuración de LXD.

sudo lxd init

Presiona ENTER para seleccionar los valores predeterminados.

Para Tamaño en GB del nuevo dispositivo de bucle (mínimo 1GB) [predeterminado=15GB], puedes elegir otro valor, como “50GB” si sabes que crearás muchos contenedores.

lxd-init-questions

Encontrar y Lanzar una Imagen de Distribución LXD

Para listar todas las imágenes de Ubuntu:

lxc image list ubuntu: arch=amd64

lxd-ubuntu-images

Habrá muchos resultados. Puedes omitir arch=amd64 si necesitas imágenes para otras plataformas, como procesadores ARM (los dispositivos Raspberry Pi utilizan dicha arquitectura).

En la imagen anterior, los resultados se han limitado (con |head) para facilitar la lectura. Se ha destacado la huella digital de Ubuntu 18.04 (84a71299044b). Si deseas lanzar un contenedor con esa distribución, el comando sería:

lxc launch ubuntu:84a71299044b

En este momento, esto devolvería un error de permiso denegado. Necesitas estar en el grupo “lxd”. Tu usuario ya ha sido agregado a este grupo, pero para hacerlo activo debes cerrar sesión y volver a iniciar sesión. Si deseas evitar eso, usa este comando, reemplazando “user” con tu nombre de usuario:

execsu - user

lxd-user-active-groups

Ahora, los comandos lxc funcionan sin requerir sudo.

Lanzar Contenedores LXD con Distribuciones No-Ubuntu

Este comando te mostrará qué otras distribuciones están disponibles:

lxc image list images: arch=amd64

Para lanzar una imagen, en lugar de la huella digital, también puedes usar un nombre de alias si ves uno disponible en esa lista.

lxc launch images:debian/9

lxd-launch-debian-9

Si agregas una cadena al final, puedes elegir un nombre para tu contenedor:

lxc launch images:debian/9 wordpress-site

Administrar Contenedores LXD

Para listar todos los contenedores:

lxc list

lxd-lxc-list

La columna “IPV4” es especialmente importante si tienes algún servicio en ejecución en esa instancia. Por ejemplo, si un servidor http Apache estuviera funcionando en la instancia, ingresar “10.234.232.246” en el navegador mostraría el sitio web hospedado en el contenedor.

Para detener un contenedor:

lxc stop nombre_del_contenedor

Esto puede tardar mucho tiempo (o fallar) con distribuciones que no sean Ubuntu. Es mejor obtener una terminal para el contenedor y, una vez dentro, escribir systemctl poweroff para detenerlo.

Si todo falla, puedes forzar una detención con:

lxc stop nombre_del_contenedor --force

Para iniciarlo:

lxc start nombre_del_contenedor

Para entrar en tu contenedor:

lxc shell nombre_del_contenedor

lxd-shell-debian

Puedes instalar programas con “sudo apt install” y hacer cualquier otra cosa que harías en una distribución Linux normal, por ejemplo, configurar un servidor Apache. Cuando quieras salir del contenedor, simplemente escribe:

exit

Transferir Archivos hacia/desde Contenedores LXD

Para subir un archivo a tu contenedor:

lxc file push /ruta/al/archivo/local nombre_del_contenedor/ruta/al/archivo/subido

Incluye el nombre del archivo que se va a crear, no solo el directorio donde quieres subirlo. Aquí hay un ejemplo:

lxc file push lxd-apt-install.png accurate-colt/var/www/website/upload.png

Para subir un directorio en lugar de un archivo:

lxc file push /ruta/al/directorio/local nombre_del_contenedor/ruta/al/directorio/remoto --recursive --verbose

Ejemplo:

lxc file push /bin accurate-colt/tmp --recursive --verbose

Para descargar un directorio desde tu contenedor a tu sistema operativo principal:

lxc file pull nombre_del_contenedor/ruta/al/directorio/remoto /ruta/al/directorio/local --recursive --verbose

Ejemplo:

lxc file pull accurate-colt/tmp /tmp --recursive --verbose

Conclusión

Esto cubre el uso básico de los contenedores LXD. Hay características más avanzadas como instantáneas y retrocesos, imposición de límites en recursos como CPU y RAM, clonación de contenedores, etc. Estas pueden ser tratadas en un futuro tutorial si notamos que los lectores están interesados en el tema.