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
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!
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.