# LXC: características, pros y contras de los contenedores de Linux

Los contenedores de Linux se han vuelto extremadamente populares gracias a su facilidad de uso y se han convertido en un aspecto importante de la seguridad informática. La plataforma de contenedores que les da nombre, LXC, se utiliza para aislar diversos procesos del resto del sistema y entre sí de forma simultánea. Para ello, mediante la [virtualización](https://www.ionos.es/digitalguide/servidores/configuracion/virtualizacion/ "Virtualización"), se crea una instancia que garantiza la **portabilidad y coherencia** de cada contenedor **en todo momento**, desde su desarrollo hasta la fase de prueba y la ejecución. De esta manera, cada aplicación cuenta con su propio entorno virtual, aunque todas comparten el núcleo del sistema del *host*.

¿Cuáles son las ventajas de los contenedores de Linux? ¿La simplicidad siempre es una ventaja? ¿Cuántas [máquinas virtuales](https://www.ionos.es/digitalguide/servidores/know-how/maquina-virtual/ "Máquina virtual") incluye un contenedor de Linux?

## ¿Qué es LXC (Linux Containers)?

El término de “contenedor de Linux” o LXC se refiere a las **aplicaciones virtualizadas sobre la base de Linux**, así como a **la plataforma y la tecnología de contenedores subyacente**. Esto debe tenerse en cuenta sobre todo cuando se habla de otras plataformas de contenedores que también utilizan la tecnología de Linux Containers.

LXC es una plataforma de contenedores de código abierto que ofrece un manejo sencillo ―algo poco habitual para los sistemas de contenedores― y una **experiencia de usuario moderna e intuitiva**. La plataforma proporciona varias herramientas, lenguajes, plantillas y bibliotecas para ello. Además, el entorno de virtualización puede instalarse y utilizarse en todas las distribuciones de Linux más comunes.

Consejo Los contenedores son una herramienta excepcional que ayuda a administrar y desarrollar aplicaciones de una manera antes impensable: permiten **aislar** las aplicaciones **del sistema**, pero no ponerlas en aislamiento por completo, ya que pueden seguir intercambiando información y comunicándose con el mundo exterior. Su lanzamiento supuso una revolución. Actualmente, la tecnología de contenedores está en auge, e incontables proveedores compiten con ella en el mercado. Entre los proveedores más importantes de [container as a service](https://www.ionos.es/digitalguide/servidores/know-how/caas-virtualizacion-a-demanda/ "CaaS: virtualización a demanda") (CaaS) figuran Amazon, Microsoft y Google. La plataforma más famosa es [Docker](https://www.ionos.es/digitalguide/servidores/know-how/docker-tools-el-ecosistema-docker-de-cerca/ "Docker tools: el ecosistema Docker de cerca"), un desarrollo del proyecto LXC compatible con todos los proveedores de CaaS.

El **concepto** de la tecnología de contenedores de Linux se remonta a **2001**. Ese año, por primera vez, se implementó un entorno aislado en el marco del proyecto VServer. Esa fue la base para crear diversos espacios de nombres (*namespaces*) controlados en Linux y los ahora denominados contenedores de Linux. Les siguieron otras tecnologías, como los **cgroups** (grupos de control), que permiten controlar y restringir el uso de recursos para un proceso o conjunto de procesos, o **systemd**, un sistema de inicialización para administrar los espacios de nombres y sus procesos.

En la práctica, LXC agiliza el desarrollo de las aplicaciones, ya que la tecnología de contenedores contribuye a la portabilidad, la configuración y el aislamiento, entre otras cosas. Los contenedores también son útiles a la hora de transmitir datos en tiempo real, porque proporcionan la escalabilidad necesaria a las aplicaciones. Asimismo, los contenedores de Linux se adaptan a cada infraestructura, lo que los hace muy independientes, de modo que pueden implementarse tanto localmente como en la nube o en un entorno híbrido.

Nota La razón por la que las **tecnologías de contenedores están tan demandadas** es la siguiente: todas las aplicaciones del sistema operativo tienen sus propias tareas y han sido diseñadas para ejecutarse justo en ese entorno. Se basan en las configuraciones establecidas por el programador y, por lo tanto, dependen de ciertas bibliotecas, contextos y archivos. Los contenedores resultan muy útiles para **probar una nueva aplicación de manera simple, rápida y segura**, ya que crean un entorno virtual para utilizarla sin tener que reescribir código, solucionar problemas ni corregir errores. El contenido de un contenedor se basa en la instalación de la distribución de Linux y contiene todos los archivos de configuración, pero es mucho más fácil de configurar que el sistema operativo real.

## Objetivos y características de LXC

A primera vista, los principios de LXC no parecen diferir del concepto de la virtualización clásica. Las diferencias solo se hacen evidentes si ambas tecnologías se ponen en contexto. Uno de los aspectos más simples es que los **contenedores funcionan a nivel del sistema operativo**, mientras que las máquinas virtuales lo hacen a nivel del *hardware*. Así, los contenedores comparten un sistema operativo y aíslan los procesos de las aplicaciones del resto del sistema, mientras que la virtualización clásica permite que múltiples sistemas operativos se ejecuten en un solo sistema.

Nota Para que varios sistemas operativos puedan ejecutarse simultáneamente en un entorno virtualizado, se utiliza un [hipervisor](https://www.ionos.es/digitalguide/servidores/know-how/que-es-un-hypervisor/ "¿Qué es un hypervisor?") que emula el sistema de *hardware*, aunque también consume muchos recursos. En este caso, un método más asequible es el uso de [contenedores de aplicación](https://www.ionos.es/digitalguide/servidores/know-how/docker-container-las-ventajas-de-los-contenedores-web/ "Docker container: las ventajas de los contenedores web"), que se ejecutan de forma nativa en el sistema operativo, es decir, sin emulación.

De forma predeterminada, los contenedores de Linux consumen menos recursos que una máquina virtual y tienen una **interfaz de usuario estándar**, lo que facilita y simplifica la administración de varios contenedores al mismo tiempo. Incluso es posible gestionar una plataforma de LXC en varias nubes: esto asegura la **portabilidad** y garantiza que las aplicaciones que se ejecutan correctamente en el sistema del desarrollador también funcionen en cualquier otro sistema. A través de la interfaz del contenedor de Linux, incluso las aplicaciones más grandes pueden iniciarse, detenerse o cambiar sus variables de entorno.

En resumen, el objetivo de LXC es crear un entorno que **se parezca lo más posible a una instalación estándar de Linux sin la necesidad de un *kernel* independiente**.

La plataforma de contenedores de Linux actual utiliza las siguientes características del *kernel* para incorporar aplicaciones y procesos en los contenedores:

- Espacios de nombres del núcleo (ipc, uts, mount, pid, red y usuario)
- Perfiles Apparmor y SELinux
- Directrices de Seccomp
- Chroots (utilizando pivot\_root)
- Capacidades del *kernel*
- cgroups (grupos de control)

Los contenedores de Linux deben permanecer compactos. Por lo tanto, solo constan de unos pocos componentes:

- Biblioteca liblxc
- Vinculación de varios lenguajes para la API:
- Python 3 (soporte a largo plazo en 2.0.x)
- Lua (soporte a largo plazo en 2.0.x)
- [Go](https://github.com/lxc/go-lxc "Go bindings para liblxc")
- [Ruby](https://github.com/lxc/ruby-lxc "Ruby bindings para liblxc")
- [Python](https://github.com/lxc/python2-lxc "Python 2.7 binding para liblxc")
- [Haskell](https://github.com/fizruk/lxc "Haskell bindings de alto nivel para Linux containers")
- Varias herramientas estándar para administrar los contenedores
- Plantillas para distribuciones

## ¿Cómo funciona LXC?

La importancia del aislamiento y la virtualización radica en que ayudan a **administrar los recursos y las medidas de seguridad de la manera más eficiente posible**. Además, facilitan la supervisión, permitiendo, por ejemplo, detectar errores en el sistema que a menudo no tienen nada que ver con las aplicaciones en desarrollo. ¿Cómo funcionan los contenedores de Linux?

La forma más fácil y razonable de utilizar los contenedores de Linux es **vincular cada contenedor a un proceso**, de manera que el usuario mantenga totalmente el control. Para cada proceso, son especialmente importantes los espacios de nombres, que hacen que los recursos estén disponibles para uno o más procesos que utilicen el mismo espacio de nombres. Los procesos también permiten **controlar el acceso** para garantizar la seguridad de los contenedores.

Para implementar un entorno LXC, las características y sus funciones deben definirse claramente. Los **cgroups** (grupos de control del *kernel*) limitan y aíslan los recursos del proceso, como CPU, E/S, memoria RAM y recursos de red. Además, el contenido de un grupo de control se puede administrar, monitorear, priorizar y editar.

Nota Con Linux, todo son archivos. Por esta razón, en última instancia, cada cgroup consiste en un conjunto de archivos (*/sys/fs/cgroup*). Existen varias herramientas para administrar este tipo de archivos, como [cgmnager](https://linuxcontainers.org/cgmanager/introduction "CGManager Introducción").

Las funciones son muy intuitivas, lo que ofrece la gran ventaja de que es muy fácil empezar a utilizar la plataforma LXC. Sin embargo, esto también conlleva algunos inconvenientes, que explicamos a continuación.

## Ventajas e inconvenientes de los contenedores de Linux

La facilidad de uso de Linux Containers es su mayor atractivo en comparación con las tecnologías de virtualización tradicionales. En todo caso, la **enorme expansión** de LXC, un **ecosistema casi completo**, con sus **herramientas innovadoras**, se debe sobre todo a la plataforma Docker, que normalizó el uso de los contenedores de Linux. En comparación directa con otros sistemas de contenedores como rkt, OpenVZ o Cloud Foundry Garden, mucho más limitados en términos de uso, LXC se beneficia de su estrecha relación con los pioneros de las plataformas de contenedores.

Los administradores de sistemas que hayan trabajado anteriormente con programas de virtualización basados en hipervisor como [Hyper-V](https://www.ionos.es/digitalguide/servidores/know-how/que-es-hyper-v/ "Qué es Hyper-V?") no tendrán problemas para utilizar LXC. **Toda la configuración**, desde la creación y la puesta a punto de las plantillas de los contenedores, hasta el desarrollo de las aplicaciones, pasando por la configuración de las redes y el sistema operativo, **es la misma**. También todos los *scripts* y flujos de trabajo escritos para máquinas virtuales pueden utilizarse con los contenedores de Linux, por lo que los desarrolladores no deben habituarse a nuevas soluciones y herramientas personalizadas, sino que pueden continuar trabajando sin problemas en un entorno con el que están familiarizados, con sus propios *scripts* y flujos de trabajo de automatización.

Uno de los mayores **inconvenientes** de LXC se hace evidente cuando se observa la **administración de la memoria**: se admiten diferentes *backends* de memoria (Ivm, overlayfs, zfs y btrfs), pero todo se guarda directamente en el rootfs de forma predeterminada. Los entornos simulados no se pueden registrar. En este sentido, otras plataformas de contenedores ofrecen soluciones más inteligentes y flexibles, tanto para almacenar los contenedores como para administrar los entornos simulados.

## ¿En qué ámbitos se utiliza LXC?

LXC es un proyecto de código abierto que cuenta con el apoyo económico de [canonical](https://canonical.com "Sitio web de Canonical"), la empresa que hay detrás de Ubuntu, una distribución de Linux. Sin embargo, la mayor parte del apoyo procede de su **propia comunidad**, que promueve el proyecto desarrollando versiones estables y actualizaciones de seguridad de forma colaborativa. Varias ediciones de LXC ya disfrutan de soporte permanente y actualizaciones de seguridad periódicas. Otras versiones reciben el mejor servicio posible, generalmente hasta que se lanza una versión más nueva y estable.

Linux Containers se utiliza como **tecnología de contenedores adicional y de soporte** en la mayoría de los casos. En este campo, esto no es raro, porque los contenedores todavía se consideran una tecnología relativamente nueva, a diferencia de las máquinas virtuales. Sin embargo, hay que tener en cuenta que los proveedores de soluciones de contenedores están creciendo continuamente y, con ellos, el ecosistema en torno a la tecnología.

Hoy en día, LXC es una alternativa muy razonable a las aplicaciones tradicionales especialmente dirigidas a los administradores de VM. Con Linux Containers, hacer la transición de una máquina virtual a una tecnología de contenedores es más fácil que con cualquier otra tecnología de este tipo.

## Alternativas a Linux Containers

La alternativa a LXC más popular es **Docker**. Esta plataforma, basada en los contenedores de Linux, se ha desarrollado continuamente en los últimos años, por lo que ahora se ejecuta **también en sistemas Windows**. Esto permite que los proveedores de nube más importantes, como Google, IBM, AWS y Azure, ofrezcan soporte nativo de Docker.

Una alternativa de contenedores para virtualizar servidores completos con Linux muy conocida es [OpenVZ](https://openvz.org/ "Virtualización basada en contenedores de código abierto para Linux"). Al igual que LXC, OpenVZ utiliza el núcleo del sistema operativo del *host* y proporciona al usuario el servidor virtual en un entorno aislado.

[KVM](https://www.ionos.es/digitalguide/servidores/know-how/que-es-kvm/ "¿Qué es KVM?") es una tecnología de virtualización de código abierto que ya viene integrada en Linux: KVM son las siglas de “Kernel-based Virtual Machine” (en español, máquina virtual basada en *kernel*). Esta tecnología convierte a Linux en un hipervisor, permitiendo que el *host* ejecute múltiples entornos aislados.

[Kubernetes](https://www.ionos.es/digitalguide/servidores/know-how/que-es-kubernetes/ "Qué es Kubernetes") procede originalmente de Google, una de las primeras promotoras de las tecnologías de contenedores de Linux. Esta plataforma de código abierto automatiza el funcionamiento de los contenedores de Linux. Los conjuntos de *hosts* en los que se ejecutan los contenedores se agrupan en clústeres y, por lo tanto, pueden administrarse fácilmente.

Nota Si quieres aprender a utilizar LXC, es imprescindible que comprendas el funcionamiento del estrechamente relacionado [LXD](https://www.ionos.es/digitalguide/servidores/know-how/que-es-lxd/ "¿Qué es LXD?"). A menudo, estos dos términos y tecnologías se confunden. LXD es un desarrollo de LXC que contiene un demonio de sistema, entre otros elementos.


This is a markdown version of: [https://www.ionos.es/digitalguide/servidores/know-how/que-es-lxc/](https://www.ionos.es/digitalguide/servidores/know-how/que-es-lxc/) for AI/LLM consumption.