LXC: Porqué no todo es Docker


LXC-fedora

Gracias a la comunidad de Fedora México por la invitación, les dejo un enlace para que puedan revisar eventos pasados y futuros de esta grandiosa comunidad, enlace.

Inicialmente incursione en LXC porqué no me gusta Docker, me molesta. Afortunadamente existen opciones y tengo la oportunidad de elegir, por ello comparto mi elección (y conocimiento) y dependerá de ti adoptarla o desecharla. Pero algo que quiero dejar muy claro contenedores no es igual a Docker.

¿Qué es LXC?

Linux Containers. LXC es una interfaz de espacio de usuario para las características de contención del kernel de Linux. A través de una potente API y herramientas simples, permite a los usuarios de Linux crear y administrar fácilmente contenedores de sistemas o aplicaciones.

Algunas Características

  • Espacios de nombres del kernel (ipc, uts, mount, pid, red y usuario)
  • Perfiles de Apparmor y SELinux
  • Políticas de Seccomp
  • Chroots (usando pivot_root)
  • Capacidades del kernel
  • CGroups (grupos de control)

Los contenedores LXC a menudo se consideran como algo en el medio entre un chroot y una  virtualización completa (máquina virtual o VM). El objetivo de LXC es crear un entorno lo más cercano posible a una instalación estándar de Linux pero sin la necesidad de un núcleo separado.

El sitio oficial es el siguiente: https://linuxcontainers.org/lxc/introduction/

LXC es Software Libre, un punto importante que debo mencionar.

¿LXC tiene soporte?

Está siendo impulsado por Canonical Ltd, porque es parte de su producto LXD que no es lo mismo que LXC, sin embargo cuando se instala LXD el comando se muestra como «lxc» así a secas generando cierta confusión.

Ahora mostraré como instalar LXC en Fedora 30, la versión disponible en los repositorios es lxc versión 3.0.4

Vamos a instalar lo que necesitamos:

sudo dnf install lxc lxc-templates lxcfs bridge-utils dnsmasq

Hay que crear y modificar algunos archivos para hacer uso de bridge (lxc-net)

Iniciemos con «/etc/sysconfig/lxc-net»

vim /etc/sysconfig/lxc-net

o

nano /etc/sysconfig/lxc-net

Y agregamos la siguiente línea:

USE_LXC_BRIDGE="true"

Modificamos «/etc/sysctl.conf»

vim /etc/sysctl.conf

o

nano /etc/sysctl.conf

Y agregamos la siguiente línea:

net.ipv4.ip_forward = 1

Y ahora ejecutamos el siguiente comando:

sysctl -p

Ahora el servicio de lxc-net:

sudo systemctl enable --now lxc-net.service
sudo systemctl start --now lxc-net.service

Con esto ya estamos listos para crear nuestro contenedor, en esta ocasión solo lo explicaré usando privilegios, también se puede usar lxc sin privilegios pero requiere una configuración diferente (lo sé por eso la gente «ama» Docker).

Para crear un contenedor es con el siguiente comando:

sudo lxc-create -t download -n buster -- -d debian -r buster -a amd64

Captura de pantalla 2019-10-24 a la(s) 01.15.09

Explicare un poco el comando:

  • -t template/plantilla
  • -n name/nombre

después le pasamos argumentos a la plantilla:

  • -d distro
  • -r release/versión
  • -a arch/arquitectura

Con esto simplemente lo creo pero no la ejecuta/lanza, para ello debemos usar el siguiente comando:

sudo lxc-start buster

Si queremos ver el listado de nuestros contenedores, sería así:

sudo lxc-ls -f

Captura de pantalla 2019-10-24 a la(s) 01.16.44

Para entrar al contenedor puede ser:

sudo lxc-attach buster

O

sudo lxc-console -n buster -t 0

La segunda opción abre un tty y deberemos autenticarnos, con la primera opción entraremos directamente como root.

¿Y dónde están las configuraciones del contenedor?

Todo está en «/var/lib/lxc», deberás elegir el nombre del contenedor y dentro hay un archivo «config», se ve algo así:

Captura de pantalla 2019-10-24 a la(s) 01.26.53

Ahora para detenerlo es:

sudo lxc-stop buster

Y si queremos destruir el contenedor

sudo lxc-destroy buster

Y si hacemos un:

sudo lxc-ls -f

Ya no veremos el contenedor con el nombre «buster».

Esto es una configuración muy simple, pero se puede hacer mucho más. Se puede usar LVM, loop, LVM thin, btrfs, zfs, rbd (Ceph). Agregar/Quitar en ejecución memoria, procesadores, etc…

A mi me gusta, así que por eso les muestro que no todo es Docker, existen alternativas de muy buen calibre, a lo mejor un poco más complejas pero ahí están.

Pero recuerda no importa que tecnología uses ya sea por gusto o por imposición, esta debe hacer lo que tú quieres que haga y para ello debes conocer la herramienta.

Enlaces:

Un comentario sobre "LXC: Porqué no todo es Docker"

  1. Estoy de acuerdo contigo. Y aprovechando tu conocimiento sabes de alguna manera para actualizar contenedores en cascada de manera automática es decir aplicar una actualizacion de software y que se evidencien en todos los contenedores que esten dentro de un grupo determinado o en su defecto sean ramas de un mismo tronco al estilo git. Gracias

Deja un comentario

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