LXC significa contenedores de Linux.
Los contenedores de Linux son métodos de "virtualización" livianos que ejecutan varias unidades virtuales simultáneamente en un solo host de control en un solo kernel de Linux.
El kernel de Linux contiene cgroups para el aislamiento de recursos (CPU, memoria, bloque de E/S, red, etc.), que no requiere iniciar ninguna máquina virtual.
Cgroups también proporciona aislamiento de espacio de nombres para aislar completamente la aplicación vista del entorno operativo, incluidos árboles de procesos, redes, ID de usuario y sistemas de archivos montados.
LXC es un software de código abierto y tiene licencia GNU LGPLv2.1+.
Los contenedores en realidad hacen uso de las características del kernel denominadas espacios de nombres, cgroups y chroots, para crear un área contenida.
Entonces, el resultado final de LXC se parece mucho a una máquina virtual, pero sin ningún hipervisor.
1. Requisito previo para la instalación de LXC
Antes de instalar LXC, asegúrese de que su sistema esté actualizado usando la actualización de yum como se muestra a continuación.
# yum update
LXC depende de dos bibliotecas; libpcap y libcgroup. Esto también requiere utilidades de caja ocupada y puente.
Instale los siguientes paquetes necesarios para nuestra instalación de LXC.
# yum install libcap-devel libcgroup busybox wget bridge-utils
Asegurémonos de tener todos los compiladores y las herramientas de desarrollo relacionadas que se requieren para compilar e instalar cualquier software desde el código fuente.
# yum groupinstall "Development tools"
Para obtener más información sobre los grupos yum, consulte nuestro artículo sobre los comandos yum.
2. Descargar contenedores Linux LXC
Descargue la última versión de LXC de Linux Containers Project.
Use wget para descargar la bola tar de la última versión estable de LXC en su máquina, como se muestra a continuación.
# cd / # wget http://linuxcontainers.org/downloads/lxc-1.1.5.tar.gz
Si recibe un mensaje de error relacionado con el certificado mientras usa el wget anterior, use la opción de no verificar el certificado como se muestra a continuación.
# wget --no-check-certificate https://linuxcontainers.org/downloads/lxc-1.1.5.tar.gz
Alternativamente, si lo prefiere, también puede usar git clone para descargar la última versión de desarrollo o la versión estable como se muestra a continuación.
git clone git://github.com/lxc/lxc -b {branch}
En el comando anterior, {branch} puede ser "maestro" para la rama de desarrollo actual o "stable-1.0" para la rama de actualización estable de la versión 1.0.
3. Configurar adaptador en puente
A continuación, cree un adaptador en puente y configure la IP estática en el adaptador en puente como se muestra en el siguiente ejemplo de ifcfg-eth0. Asegúrese de que su adaptador físico apunte a este adaptador en puente en ifcfg-eth0.
# cd /etc/sysconfig/network-scripts # vi ifcfg-br0 DEVICE="br0" BOOTPROTO="static" IPADDR="xxx.xxx.xxx.xxx" NETMASK="255.255.255.xxx" ONBOOT="yes" TYPE="Bridge" NM_CONTROLLED="no"
Reemplace todos los "xxx" en el archivo anterior con los valores que coincidan con su dirección IP y máscara de red. Por ejemplo, cambie el valor de IPADDR en el archivo anterior a la dirección IP de su máquina.
4. Instale el contenedor LXC Linux
A continuación, descomprima la bola tar de LXC, que descargamos anteriormente, ejecute ./configure y haga make y make install, para instalar LXC en su sistema como se muestra a continuación.
De manera predeterminada, esto instalará todos los binarios lxc en el directorio /usr/local/bin.
# cd / # tar xvfz lxc-1.1.5.tar.gz # cd lxc-1.1.5/ # ./configure # make && make install
Las siguientes son algunas de las últimas líneas del resultado del comando ./configure anterior.
# ./configure ... ... config.status: creating src/python-lxc/setup.py config.status: creating src/lua-lxc/Makefile config.status: executing depfiles commands config.status: executing default commands ---------------------------- Environment: - compiler: gcc - distribution: centos - init script type(s): sysvinit - rpath: no - GnuTLS: no - Bash integration: yes Security features: - Apparmor: no - Linux capabilities: yes - seccomp: no - SELinux: no - cgmanager: no Bindings: - lua: no - python3: no Documentation: - examples: yes - API documentation: yes - user documentation: no Debugging: - tests: no - mutex debugging: no Paths: - Logs in configpath: no
Las siguientes son las últimas líneas de la salida del comando make anterior.
# make ... Building full member lists recursively... Adding members to member groups. ... Generating style sheet... Generating index page... Generating page index... Generating example documentation... Generating file sources... Generating code for file /usr/save/lxc-1.1.5/src/lxc/attach_options.h... Generating code for file /usr/save/lxc-1.1.5/src/lxc/lxccontainer.h... Generating code for file /usr/save/lxc-1.1.5/src/lxc/lxclock.h... Generating file documentation... Generating docs for file /usr/save/lxc-1.1.5/src/lxc/attach_options.h... ... Generating file member index... make[2]: Leaving directory `/usr/save/lxc-1.1.5/doc/api' make[2]: Entering directory `/usr/save/lxc-1.1.5/doc' ... Making all in hooks make[1]: Entering directory `/usr/save/lxc-1.1.5/hooks' make[1]: Nothing to be done for `all'. ...
Las siguientes son las últimas líneas del resultado del comando make install anterior.
# make install ... Making install in hooks make[1]: Entering directory `/usr/save/lxc-1.1.5/hooks' /bin/mkdir -p '/usr/local/share/lxc/hooks' /usr/bin/install -c clonehostname mountecryptfsroot ubuntu-cloud-prep squid-deb-proxy-client '/usr/local/share/lxc/hooks' ... /bin/mkdir -p /usr/local/var/lib/lxc /bin/mkdir -p /usr/local/var/cache/lxc /bin/mkdir -p '/usr/local/lib/pkgconfig' /usr/bin/install -c -m 644 lxc.pc '/usr/local/lib/pkgconfig' ...
5. Crear enlace suave para bibliotecas compartidas LXC
Ejecute lxc-info para verificar que LXC se instaló correctamente. Si todo está instalado correctamente, veremos un mensaje que dice que el nombre del contenedor dado (por ejemplo, prueba) no existe. No hemos creado ningún contenedor en esta etapa. Solo queremos asegurarnos de que este comando no arroje ningún error relacionado con la biblioteca compartida.
# lxc-info --name test test doesn't exist
Dependiendo de cómo estén configuradas las cosas en su sistema, también puede recibir el siguiente mensaje de error relacionado con la biblioteca liblxc.so.1.
# lxc-info --name test lxc-info: error while loading shared libraries: liblxc.so.1: cannot open shared object file: No such file or directory
En este caso, para solucionarlo, cree un enlace llamado libxc.so.1 como se muestra a continuación, que apuntará a la versión correcta del archivo liblxc.so.x.x.x.
# ln -s /usr/local/lib/liblxc.so.1.1.5 /lib64/liblxc.so.1 # ls -l /lib64/liblxc.so.1 lrwxrwxrwx. 1 root root 30 Jan 20 09:17 /lib64/liblxc.so.1 -> /usr/local/lib/liblxc.so.1.1.5
6. Verifique la instalación y configuración de LXC
A continuación, también puede ejecutar lxc-checkconfig para verificar que su entorno lxc esté configurado correctamente.
Lo siguiente tendrá salida en cuatro secciones diferentes:1) Espacios de nombres, 2) Grupos de control, 3) Varios y 4) Punto de control/Restauración. La salida parcial se muestra a continuación.
# lxc-checkconfig Kernel configuration not found at /proc/config.gz; searching... Kernel configuration found at /boot/config-2.6.32-431.el6.x86_64 --- 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 namespace: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled .. --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled Bridges: enabled Advanced netfilter: enabled .. --- Checkpoint/Restore --- CONFIG_EVENTFD: enabled CONFIG_EPOLL: enabled .. Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/local/bin/lxc-checkconfig
Si todo está configurado correctamente en su sistema, en el resultado anterior, todas las opciones en los grupos anteriores deberían decir "habilitado".
Mañana, en la siguiente parte de la serie de artículos LXC, explicaremos cómo crear, iniciar y usar contenedores lxc linux usando varios comandos lxc.