Los contenedores son útiles por muchas razones. Aíslan las aplicaciones del resto del sistema. Son portátiles y fáciles de clonar y/o trasladar a otros sistemas operativos. Y, en el caso de Linux, funcionan de la misma forma bajo cualquier distribución, sin necesidad de adaptaciones. Si necesita 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 está diseñado para contener un sistema operativo completo. Esto lo hace útil para algunos escenarios. Por ejemplo, puede activar un contenedor LXD, instalar un servidor de base de datos y un servidor http. A continuación, puede crear un sitio web de WordPress en el interior. Ahora puede cambiar de nube a nube simplemente moviendo este contenedor LXD donde se necesita cuando no está satisfecho con su proveedor anterior. Y dado que es fácil clonar un contenedor, incluso puede cargar su sitio web en varios proveedores de la nube para crear una configuración redundante de alta disponibilidad.
LXD no virtualiza hardware como lo hacen QEMU o VirtualBox, lo que significa que es muy rápido y ofrece una velocidad de ejecución casi nativa.
Instalar y configurar LXD
Abra una terminal e instale LXD, además de las utilidades ZFS, que lo ayudarán a acelerar algunas operaciones y ahorrar espacio en disco cuando trabaje con contenedores.
sudo apt install zfsutils-linux lxd
Inicie la configuración de LXD.
Pulse ENTER para seleccionar los valores predeterminados.
Para Size in GB of the new loop device (1GB minimum) [default=15GB]
puede elegir otro valor, como «50 GB», si sabe que creará muchos contenedores.
Buscar y lanzar una imagen de distribución LXD
Para enumerar todas las imágenes de Ubuntu:
lxc image list ubuntu: arch=amd64
Habrá muchos resultados. puedes omitir arch=amd64
si necesita imágenes para otras plataformas, como procesadores ARM (los dispositivos Raspberry Pi usan esa arquitectura).
En la imagen anterior los resultados han sido limitados (con |head
) para que sea más fácil de leer. Se ha resaltado la huella digital de Ubuntu 18.04 (84a71299044b). Si desea lanzar un contenedor con esa distribución, el comando sería:
lxc launch ubuntu:84a71299044b
Por el momento esto devolvería un error de permiso denegado. Tienes que estar en el grupo «lxd». Su usuario ya se ha agregado a este grupo, pero para activarlo debe cerrar la sesión y volver a iniciarla. Si desea evitar eso, use este comando, reemplazando «usuario» con su nombre de usuario:
Ahora, los comandos lxc funcionan sin necesidad de sudo.
Lanzar contenedores LXD con distribuciones que no sean de Ubuntu
Este comando le 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 puede usar un nombre de alias si ve uno disponible en esa lista.
lxc launch images:debian/9
Si agrega una cadena al final, puede elegir un nombre para su contenedor:
lxc launch images:debian/9 wordpress-site
Administrar contenedores LXD
Para enumerar todos los contenedores:
La columna «IPV4» es especialmente importante si tiene algún servicio en ejecución en esa instancia. Por ejemplo, si un servidor http de Apache se ejecutaría en la instancia, al ingresar «10.234.232.246» en el navegador, se mostraría el sitio web alojado en el contenedor.
Para detener un contenedor:
lxc stop name_of_container
Esto puede llevar mucho tiempo (o fallar) con las distribuciones que no son de Ubuntu. Es mejor meterle una concha al contenedor, y una vez dentro, entrar systemctl poweroff
para detenerlo
Si todo lo demás falla, puede forzar una parada con:
lxc stop name_of_container --force
Para iniciarlo:
lxc start name_of_container
Para moverse dentro de su contenedor:
lxc shell name_of_container
Puede instalar programas con «sudo apt install» y hacer cualquier otra cosa que haría en una distribución normal de Linux, por ejemplo, configurar un servidor Apache. Cuando desee salir del contenedor, simplemente escriba:
Transferir archivos a/desde contenedores LXD
Para subir un archivo a su contenedor:
lxc file push /path/to/local/file name_of_container/path/to/uploaded/file
Incluya el nombre del archivo a crear, no solo el directorio donde desea cargarlo. Aquí hay un ejemplo:
lxc file push lxd-apt-install.png accurate-colt/var/www/website/upload.png
Para cargar un directorio en lugar de un archivo:
lxc file push /path/to/local/directory name_of_container/path/to/remote/directory --recursive --verbose
Ejemplo:
lxc file push /bin accurate-colt/tmp --recursive --verbose
Para descargar un directorio desde su contenedor a su sistema operativo principal:
lxc file pull name_of_container/path/to/remote/directory /path/to/local/directory --recursive --verbose
Ejemplo:
lxc file pull accurate-colt/tmp /tmp --recursive --verbose
Conclusión
Esto cubre el uso básico de contenedores LXD. Hay funciones más avanzadas, como instantáneas y reversiones, que imponen límites a los recursos como CPU y RAM, contenedores de clonación, etc. Estos pueden cubrirse en un tutorial futuro si notamos que los lectores están interesados en el tema.