Trabajar con Linux Containers – LXC

Hoy vamos a ver cómo crear y manejar Linux Containers o LXC desde la línea de comandos. Se trata de un producto similar a los contenedores OpenVZ, pero más moderno y con más funciones. De hecho, PROXMOX, desde la versión 4, los sustituyo por estos. Recordad que un contenedor es una tecnología de virtualización a nivel de sistema operativo para Linux. Digamos que un servidor físico puede ejecutar múltiples instancias de sistemas operativos aislados, conocidos como Servidores Virtuales Privados (VPS) o Entornos Virtuales (EV) No lo debemos confundir con una máquina virtual. Simplificando, provee de un entorno virtual con su propio espacio de procesos y redes. A nivel de licencia utiliza de software libre, como GPL y BSD, para sus diferentes componentes.

containers

¿Cómo se definen los LXC?

Si indagamos un poco en su web, podemos obtener una definición ciertamente exacta. Se define como una interfaz de usuario para las funciones del contenido del núcleo de Linux. Utiliza una potente API y una serie de herramientas simples, que permite a los usuarios crear y manejar fácilmente sistemas y aplicaciones en contenedores.

Utiliza las siguientes características del núcleo:

  • Espacio de nombres del kernel (ipc, uts, mount, pid, network y user)
  • Apparmor y SELinux
  • Políticas Seccomp
  • Chroots, utilizando pivot_root
  • Capacidades del Kernel
  • CGroups

Un contenedor se podría considerar como algo intermedio entre un Chroot y una máquina virtual. Según leemos “El objetivo de LXC es crear un entorno lo más cerca posible a una instalación estándar de Linux pero sin la necesidad de un núcleo separado.”

Actualmente se divide en los siguientes componentes:

  • Librería liblxc
  • Varios lenguajes disponibles para la API (python3, lua, Go, ruby, python2 y haskell)
  • Un set de herramientas para interactuar con los contenedores
  • Plantillas con diferentes versiones de distribuciones GNU Linux

Instalación en Debian Jessie

Para el laboratorio de pruebas utilizaré una distribución Debian, en su versión 8.2 En mi laptop dual core Toshiba del año 2010. No es un hardware muy potente, pero creo que es una buena manera de medir el usuo de recursos y la usabilidad de los contenedores. Primero de todo debemos instalar los paquetes básicos. Después de realizar una actualización de los repositorios, instalaremos el paquete lxc, que nos permitirá instalar y trabajar con ellos. También la paquete libvirt-bin, que funciona a modo de API, para interactuar con las últimas versiones del kernel de Linux. Y por último el paquete debootstrap, que permite instalar Debian en una subcarpeta de otro sistema. También se necesita el paquete bridge-utils, pero ya lo tenemos instalado.

  1. aptitude update
  2. aptitude install lxc libvirt-bin debootstrap

Una vez instalados los programas y dependencias. Verificaremos la configuración por defecto con el siguiente comando:

  1. lxc-checkconfig

Una muestra:

contenedores-lxc-debian-001

Antes de continuar y empezar a trabajar, debemos configurar, almenos en la configuración que yo he probado y me ha funcionado, el modo public bridge. Para que así LXC pueda utilizar la red. Una vez hecho nos podemos descargar la primera plantilla, que también será Debian 8. Indicamos la ubicación de la URL y algunos datos más.

  1. LANG=C SUITE=jessie MIRROR=http://httpredir.debian.org/debian lxc-create -n debian8 -t debian

El proceso es algo lento, depende mucho de nuestra conexión y la capacidad de CPU del equipo. Otra forma de realizar la misma tarea sería la siguiente:

  1. lxc-create -n debian8 -t debian -- -r jessie

¡Ojo! Al crear el contenedor, nos dará una contraseña de root, que debemos apuntar! Una vez hecho esto debemos configurar la red del nuevo contenedor.  Los ficheros de configuración de estos están ubicados en /var/lib/lxc, justo en la carpeta con su nombre, en nuestro caso /var/lib/lxc/debian8/ Debemos configurar la red, para que utilice la interfaz recién configura, en mi caso llamada «br0» Añadimos al fichero /var/lib/lxc/debian8/config, los siguientes parámetros:

  1. lxc.utsname = debian8
  2. lxc.network.type = veth
  3. lxc.network.flags = up
  4. lxc.network.link = br0
  5. lxc.network.ipv4 = 0.0.0.0/24

El fichero de configuración, en el contenedor configurado para el artículo, se muestra así:

lxc-config-contenedor-2

Interactuar con los contenedores

Si queremos encender, apagar o acceder a uno de ellos, debemos utilizar una serie de órdenes.

  1. #Para encender un contenedor
  2. lxc-start -n nombre-contenedor -d
  3. #Para apagar un contenedor
  4. lxc-stop -n nombre-contenedor
  5. #Para acceder a la consola del contenedor
  6. lxc-console -n nombre-contenedor
  7. #Para obtener información de un contenedor
  8. lxc-info -n nombre-contenedor
  9. #Para destruir un contenedor
  10. lxc-destroy -n nombre-contenedor

Comentario importante, para salir de la consola y volver al host, debemos utilizar la combinación de teclas «<ctrl>+a» y después la tecla «q» Una vez dicho esto, os voy hablar de un comando muy útil, que nos permite listar los contenedores y sus estado. Concretamente es lxc-ls, que usariamos de la siguiente manera:

  1. lxc-ls --fancy

En mi laptop, ya me ha dado tiempo a configurar dos, tal y como se muestra:

lxc-lista-contenedores

Por último un parámetro muy interesante. Si queremos que al encender el host anfitrion se enciendan los contenedores, debemos añadir en el fichero de configuración ubicado en /var/lib/lxc/contenedor/config

  1. lxc.start.auto = 1

Y de momento lo dejamos aquí. En próximos capítulos iremos viendo más cosas. Si queréis ampliar información al respecto os dejo varios enlaces:

Página web de LXC

Wiki Debian para LXC

Wiki Ubuntu LXC

17 Respuestas

  1. Jock vault dice:

    Por fin un tuto en español.
    Qué gran trabajo, gracias.

  2. tannhausser dice:

    Iba a decir lo mismo que @jock, se habla mucho de los linux containers pero no hay demasiado información práctica, así que bienvenido este post y otros tutos que hagas en un futuro.

    Un saludo colega!

  3. Hector dice:

    Hola, antes de nada, enhorabuena por el bloq que sigo a diario.

    Me ha venido de maravilla este tuto ya que ando estos días probando la ultima proxmox y migrando openvz que ya tengo a lxc para ver como se comporta. Y sinceramente, LXC no me agrada mucho comparado con ovz. Vosotros que opináis? lo veis para meterlo en producción?
    Un saludo!

  4. AlexN dice:

    KVM/QUEMU esta al mismo nivel que VirtualBox? Tras los de Containers que tienes en mente como continuación de este, que me parece super interesante, pues llevo tiempo tratando de saber más de LXC, estaría bien ver Docker por un lado, KVM, por otro, y Chroot finalmente.

    Gracias.

    • Hola Alex
      ,
      De KVM/QEMU ya he hablado en la web, es más para entornos de producción o alto rendimiento. VirtualBox es para entornos domésticos. De Docker también tengo algún artículo, aunque quizás no es un tema que haya tratado en profundidad. Chroot es un tema que tengo pendiente, que espero tratar en breve.

      Saludos!

  5. geryescalier dice:

    Hola no se si te ha ocurrido pero hasta ahora no he podido configurr bridge para poder comunicar un contenedor con el host

  6. Disculpa mi ignorancia en el tema. Me gustaría saber ¿si en alguno de los contenedores, ya sea LXC o Docker se puede instalar un entorno gráfico de linux?

    • Hola,

      Los contenedores están enfocados en crear y gestionar microservicios, por lo que no, no están pensados para hacer funcionar escritorios. Aunque poderse hacer se puede hacer.

      Saludos!!!

  1. 8 julio, 2016

    […] unos días estuvimos hablando de los Linux Containers (LXC), tanto del concepto en sí, como de su instalación y configuración en un servidor GNU Linux. […]

  2. 8 julio, 2016

    […] las últimas semanas he tratado en diferentes entradas los Linux Containers. Hemos visto como trabajar con ellos desde la línea de comandos y desde interfaces web. Hoy veremos como trabajar con ellos […]

  3. 8 julio, 2016

    […] la primera, llamada “LAMP Stack“, para más tarde seleccionar la plantilla de contenedor LXC, sistema que vimos hace […]

  4. 7 diciembre, 2017

    […] Docker, un sistema de contenedores, continuador de otros proyectos como las jaulas chroot y los Linux Containers (LXC), está revolucionado todo el mundo de la administración de sistemas. Y el fin de […]

  5. 19 enero, 2018

    […] Docker, un sistema de contenedores, continuador de otros proyectos como las jaulas chroot y los Linux Containers (LXC), está revolucionado todo el mundo de la administración de sistemas. Y el fin de este […]

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.