Cómo ejecutar múltiples distribuciones de forma simultánea usando contenedores Linux

Linux Containers (LXC) es una tecnología de virtualización ligera y tiene varios usos. Es parte del núcleo de Linux, y puede permitirle emular una o varias distribuciones de Linux en un único host Linux. Piense en ello como un término medio entre un chroot y tecnologías de virtualización completa como VirtualBox, KVM o Xen. Una tecnología similar presente en el mundo BSD son las Cárceles de FreeBSD.

Como ejemplo, la máquina en la que estoy escribiendo es una computadora portátil con Linux Mint 18, que funciona con un procesador Intel Atom y tiene 2 GB de RAM. Sin embargo, estoy ejecutando tres contenedores Linux, cada uno con una instancia del servidor web Apache funcionando, sin un gran éxito de rendimiento. Esto sería impensable con una máquina virtual tradicional como VirtualBox. Por lo tanto, si ha querido ejecutar múltiples distribuciones en su sistema Linux, Linux Containers debería hacer el trabajo por usted muy bien.

Instalación y configuración de contenedores Linux

Estamos configurando LXC en Linux Mint 18 de 64 bits. Las instrucciones de instalación proporcionadas aquí también funcionarán sin modificaciones en Ubuntu 16.04 y superiores. Si está usando otra distribución, por favor consulte la documentación oficial de su distribución si algo no funciona como se espera. También se asume una familiaridad con la línea de comandos y la resolución general de problemas.

Requisitos previos

Aquí hay algunas cosas que debe configurar para comenzar a usar múltiples distribuciones:

1. Instale LXC y otro software de prerrequisitos utilizando:

sudo apt install lxc lxc-templates uidmap[/sourcecode]

2. Ahora necesita configurar su perfil . Introduzca los siguientes comandos para configurarlo:

[código fuente]mkdir -p ~/.config/lxc

echo “lxc.id_map = u 0 100000 65536” > ~/.config/lxc/default.conf

echo “lxc.id_map = g 0 100000 65536” > ~/.config/lxc/default.conf

echo “lxc.network.type = veth” > ~/.config/lxc/default.conf

echo “lxc.network.link = lxcbr0” > ~/.config/lxc/default.conf

echo “$USER veth lxcbr0 2” | sudo tee -a /etc/lxc/lxc-usernet[/sourcecode]

3. A continuación, debe configurar los permisos de usuario como se indica a continuación:

sudo usermod -add-subuids 100000-165536 $USER

sudo usermod -add-subgids 100000-165536 $USER

sudo cgm create all user

sudo cgm chown all user $(id -u) $(id -g)

cgm movepid all user $$[/sourcecode]

Configuración del contenedor

Ahora que tiene instalado LXC Container junto con otro software de prerrequisitos, estos son los pasos para configurar el Contenedor:

1. En este ejemplo, configuraremos un contenedor Ubuntu , llamado ubu1. Para ello, ejecute el siguiente comando:

[código fuente]lxc-crear -descarga de plantillas -nombre ubu1[/código fuente]

2. Aquí, el parámetro -template indica a lxc que descargue una imagen preconfigurada de Internet , mientras que el parámetro -name especifica el nombre del contenedor – ubu1 en este caso. Puedes usar el nombre que quieras.

3. Ahora verá una lista de imágenes de la distribución soportadas :

4. Introduzca los detalles de la distribución que desea instalar. Instalaré la versión de 64 bits de Ubuntu 16.04 (nombre en clave Xenial) aquí:

5. Si desea instalar la imagen de forma no interactiva , el siguiente comando consigue el mismo resultado que el anterior:

[código fuente]lxc-create -t download -n ubu1 – -dist ubuntu -release xenial -arch amd64[/sourcecode]

6. LXC ahora descargará e instalará una imagen mínima de Ubuntu Xenial en su sistema anfitrión. La descarga e instalación puede llevar un poco de tiempo dependiendo de su conexión a Internet y de la velocidad de su PC. Después de la instalación , verá una pantalla como esta:

Ahora está listo para usar el contenedor Ubuntu recién configurado.

Uso de múltiples distribuciones con contenedores Linux

Arrancar el contenedor

Inicie su contenedor usando el comando lxc-start:

código fuente]lxc-start -n ubu1 -d[/sourcecode]

Aquí, el parámetro -n especifica el nombre del contenedor que desea iniciar (ubu1 en este caso), y el parámetro -d lo hace funcionar en segundo plano .

Puede verificar que el contenedor se inició usando el comando lxc-ls:

código fuente]lxc-ls -f[/código fuente]

El parámetro -f permite reportar . Aquí puede ver que tengo dos contenedores – uno Debian (detenido) y otro Ubuntu (en ejecución).

Acceso y uso del contenedor

Puede acceder a la consola del contenedor usando el comando lxc-attach:

[código fuente]lxc-attach -n ubu1[/código fuente]

Ahora tendrá una shell raíz en su contenedor. Se recomienda que configure una contraseña para el usuario root y cree una cuenta de usuario normal :

Código fuente] passwd
>.
adduser beebom[/sourcecode]

Por supuesto, reemplace beebom con el nombre de usuario que desee. A continuación, puede instalar el software y configurar su contenedor como lo haría en un sistema normal. Por ejemplo, en un contenedor de Debian o Ubuntu:

[código fuente]apt install wget openssh-server htop tmux nano iptables[/sourcecode]

Detención del contenedor

Una vez que haya terminado de jugar con el contenedor, use el comando exit para volver al sistema host . Ahora use el comando lxc-stop para detener su contenedor :

código fuente]lxc-stop -n ubu1[/sourcecode]

Esto hará que el contenedor se apague limpiamente y no consumirá más recursos en su sistema, excepto espacio en disco.

Clonación y Snapshots

Clones

Una vez que haya instalado los programas en un contenedor y lo haya configurado a su gusto, es posible que desee crear una o varias copias del mismo para facilitar el aprovisionamiento. Puede hacerlo creando un clon , que es una réplica exacta de un contenedor.

Por ejemplo, para crear un clon del contenedor (llamémoslo así), primero detenga el contenedor usando lxc-stop, luego use el comando lxc-copy:

código fuente]lxc-stop -n ubu1

lxc-copy -n ubu1 -N ubu2[/sourcecode]

Aquí, la opción -n especifica el contenedor fuente , y la opción -N especifica el nombre del clon . Para verificar que el contenedor fue clonado, use el comando lxc-ls:

Instantáneas

Suponga que está a punto de hacer algunos cambios potencialmente peligrosos o difíciles de recuperar de los cambios en un contenedor, como la reconfiguración de un servidor web. Para minimizar el daño, puede crear una instantánea del contenedor antes de hacer tal cambio. En caso de que algo salga mal durante la configuración, puede simplemente detener el contenedor y recuperarlo a su estado de funcionamiento anterior restaurando una instantánea.

Para crear la instantánea, primero detenga el contenedor :

código fuente]lxc-stop -n ubu1[/sourcecode]

A continuación, cree una instantánea utilizando el comando lxc-snapshot:

[código fuente]lxc-snapshot -n ubu1[/código fuente]

Esto crea una instantánea llamada “instantánea”. Cualquier instantánea posterior que cree utilizando este comando se llamará snap1 , snap2 , etc.

Después de esto, puede iniciar el contenedor y realizar los cambios que desee. Si en cualquier momento desea volver a una instantánea creada por usted, detenga el contenedor , y utilice el comando lxc-snapshot con el parámetro -r para restaurar una instantánea :

código fuente]lxc-snapshot -r snap0 -n ubu1[/sourcecode]

Esto restaurará la imagen instantánea al contenedor.

Arrancar automáticamente los contenedores en el arranque

Puede hacer que un contenedor, por ejemplo, un contenedor de servidor web, se inicie automáticamente al arrancar el sistema. Para ello, vaya al archivo de configuración del contenedor , ubicado en $HOME/.local/share/lxc//config, y añada las siguientes líneas

código fuente]lxc.start.auto = 1

lxc.start.delay = 5[/sourcecode]

espere 5 segundos antes de comenzar el siguiente contenedor, si lo hay.

Solución de problemas

Si tiene problemas para arrancar los contenedores, lo primero que debe intentar es ejecutar el comando lxc-start en modo Foreground . Por ejemplo:

código fuente]lxc-start -n ubu1 -F[/sourcecode]

Esto le mostrará los errores en la consola actual e, lo cual es muy útil para identificar la naturaleza del problema.

Problemas con la ejecución simultánea de varios contenedores

Si intenta ejecutar varios contenedores a la vez, puede que vea errores como “Quota alcanzada”, o “failed to create the configured network”. Esto se debe a que está ejecutando más interfaces de red de las que le han sido asignadas. Puede aumentar el número de puentes de red que puede ejecutar auser modificando el archivo /etc/lxc/lxc-usernet como raíz . Podría parecerse a esto:

código fuente]# USERNAME TYPE BRIDGE COUNT

beebom veth lxcbr0 5[/sourcecode]

Puede cambiar el número al final (5 en este ejemplo), a un número mayor como 10. Esto le permitirá utilizar hasta 10 contenedores a la vez.

Otros usos de los contenedores Linux

Los contenedores Linux tienen varios usos. Puede utilizarlos como cajas de prueba ligeras, por ejemplo, para probar varias configuraciones de un servidor web o de base de datos antes de enviarlos a un servidor de producción. Otro caso de uso es probar cómo una aplicación se ejecuta en diferentes versiones de varias distribuciones.

También puede utilizarlos para aislar aplicaciones en las que no confía: cualquier daño que cause una aplicación de este tipo se limitará a su propio contenedor y no afectará al sistema host. Tenga en cuenta que aunque es posible ejecutar aplicaciones GUI en un contenedor, requiere una cantidad significativa de tiempo y esfuerzo, por lo que no es recomendable. Si desea ejecutar aplicaciones GUI en una caja de arena, consulte nuestro artículo sobre cómo ejecutar aplicaciones de caja de arena en Linux.

VÉASE TAMBIÉN: 7 mejores alternativas de VirtualBox que puede usar

Ejecutar múltiples distribuciones simultáneamente con contenedores Linux

Así termina nuestro How-To de ejecutar múltiples distribuciones Linux en un solo ordenador, sin la sobrecarga de una máquina virtual de tamaño completo. La utilidad de esta tecnología sólo está limitada por tu creatividad, así que siéntete libre de experimentar y descubrir nuevos casos de uso. Si tiene problemas para configurar los contenedores, no dude en hacernos una pregunta en la sección de comentarios.

Deja un comentario