LXC Linux Containers

LXC (Linux Containers) es una tecnología de virtualización en el nivel de sistema operativo para Linux. OpenVZ permite que un servidor físico ejecute múltiples instancias de sistemas operativos aislados, conocidos como Servidores Privados Virtuales o Entornos Virtuales . LXC no provee de una máquina virtual, más bien provee un entorno virtual que tiene su propio espacio de procesos y redes.

LXC se basa en la funcionalidad cgroups del Linux que está disponible desde la versión 2.6.29, desarrollada como parte de LXC. También se basa en otras funcionalidades de aislamiento de espacio de nombres, que fueron desarrolladas e integradas dentro de la línea principal del núcleo de Linux.

Instalación de LXC

Instalar el paquete principal.

 $ sudo aptitude install lxc

Paquetes opcionales.

 $ sudo aptitude install bridge-utils libvirt-bin debootstrap

Abrir el archivo fstab.

 $ sudo vim /etc/fstab

Añadir la siguiente línea al final.

cgroup /sys/fs/cgroup cgroup defaults 0 0

Montar la unidad si no está montada.

 $ sudo mount /sys/fs/cgroup
Comprobar la configuración del Kernel de LXC.
 $ lxc-checkconfig 
 Kernel configuration not found at /proc/config.gz; searching...
 Kernel configuration found at /boot/config-3.13-1-amd64
 --- Namespaces ---
 Namespaces: enabled
 Utsname namespace: enabled
 Ipc namespace: enabled
 Pid namespace: enabled
 User namespace: enabled
 Network namespace: enabled
 Multiple /dev/pts instances: enabled
--- Control groups ---
  Cgroup: enabled
  Cgroup clone_children flag: enabled
  Cgroup device: enabled
  Cgroup sched: enabled
  Cgroup cpu account: enabled
  Cgroup memory controller: enabled
  Cgroup cpuset: enabled
--- Misc ---
  Veth pair device: enabled
  Macvlan: enabled
  Vlan: enabled
  File capabilities: enabled
Note : Before booting a new kernel, you can check its configuration
  usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

Crear contenedores e instalar el SO

Los sistemas operativos que se pueden instalar son los siguientes:

 opensuse
 debian
 gentoo
 fedora
 openmandriva
 ubuntu
 archlinux
 centos

Y para instalarlo solo hay que hacer lo siguiente:

 $ sudo lxc-create -n nombre_contenedor -t sistema_operativo

Por ejemplo:

 $ sudo lxc-create -n debianlxc -t debian

Al instalar por primera vez un sistema operativo tardará mas porque tiene que descargarse todos los paquetes. 

Si al instalar ubuntu da un error de Key hay que descargarla e instarla para eso:

 $ wget es.archive.ubuntu.com/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2011.11.21_all.deb
 $ sudo dpkg -i ubuntu-keyring_2011.11.21_all.deb

Una vez creado el contenedor nos dirá cual es la contraseña del usuario root ¡Acordarse de ella!

Configurar el contenedor

Red en modo estática

Abrir el archivo interfaces del host anfitrión.

 $ sudo vim /etc/network/interfaces

Agregar las siguientes lineas:

#LXC
 auto lxcbr0
 iface lxcbr0 inet static
 address 192.168.3.1 #<-- Esta ip va a ser el gateway del Contenedor
 netmask 255.255.255.0
 bridge_stp off
 bridge_maxwait 5
 bridge_ports none

Reiniciar la red:

 $ sudo /etc/init.d/networking restart 

Abrir el archivo config del contenedor.

 $ sudo vim /var/lib/lxc/nombre_contenedor/config

Y agregar las siguientes lineas:

#Network
 lxc.utsname = nombre_contenedor
 lxc.network.type = veth
 lxc.network.flags = up
 lxc.network.link = lxcbr0
 lxc.network.name = veth0
 lxc.network.ipv4 = 192.168.3.5/24
 lxc.network.ipv4.gateway = 192.168.3.1

Red en modo DHCP

Abrir el archivo interfaces del host anfitrión.

 $ sudo vim /etc/network/interfaces
#LXC
   auto br0
   iface br0 inet dhcp
         bridge_ports eth0
         bridge_fd 0
         bridge_maxwait 0

Reiniciar la red:

 $ sudo /etc/init.d/networking restart 

Abrir el archivo config del contenedor.

 $ sudo vim /var/lib/lxc/nombre_contenedor/config
# Network
       lxc.utsname = nombre_contenedor
       lxc.network.type = veth
       lxc.network.flags = up
       lxc.network.link = br0
       lxc.network.hwaddr = 00:FF:AA:00:00:01

Iniciarla en modo background

 $ sudo lxc-start -n  nombre_contenedor -d

Comprobar la IP del contenedor:

 $ sudo lxc-ls --fancy

Iniciar la máquina

Type to exit the console, to enter Ctrl+a itself

Iniciar la máquina en la 2 terminal

 $ sudo lxc-console -n nombre_contenedor -t 2

Al instalar el sistema operativo, viene sin nada ni editores ni nada así que lo primero sería conveniente instalar un editor.

Instalar el GUI (opcional)

Instalar los paquetes necesarios:

 $ sudo aptitude install lxctl 

Instalar el web-Gui

 $ wget http://lxc-webpanel.github.com/tools/install.sh
 $ sudo bash install.sh 

Para conectarse al Gui abrir el navegador y en la barra de direcciones escribir:

 localhost:5000

Y para autentificarse:

 Usuario: admin 
 Contraseña: admin 

Selección_046

2 comments

  1. Genial, justo lo que andaba buscando.

    Pregunta, existe diferencia notable entre Docker y LXC?, no menciono OpenVZ ya que los developers de alli estan colaborando con LXC, pero de igual forma, he visto buenos reviews sobre este ultimo.

    Saludos!

    1. Buenas preguntas, te contesto como creo que es:
      Docker al principio empezó a basarse en LXC a día de hoy ya no se han desarrollado todo por su cuenta la diferencia entre uno y otro en mi opinión, es que LXC es mas simple, tiene muchas menos funciones extra que docker y para mi lo hace mas cómodo. También es verdad que con docker he trabajado muy poco y no te puedo decir al 100% todas sus ventajas. Y en cuanto OpenVZ he tocado también mas bien poco, justo crear algunos en proxmox y poco mas.

      Mi valoración personal, es que LXC mola porque es una forma de tener otro sistema en el ordenador de una forma muy fácil y que necesita pocos recursos y cuando lo necesitas lo lanzas y listo.

      Espero que te haya ayudado algo esta respuesta aun que seguramente no sea tan concreta como quisieras.

      Un saludo.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *