Los co­n­te­ne­do­res de Linux se han vuelto ex­tre­ma­da­me­n­te populares gracias a su facilidad de uso y se han co­n­ve­r­ti­do en un aspecto im­po­r­ta­n­te de la seguridad in­fo­r­má­ti­ca. La pla­ta­fo­r­ma de co­n­te­ne­do­res que les da nombre, LXC, se utiliza para aislar diversos procesos del resto del sistema y entre sí de forma si­mu­l­tá­nea. Para ello, mediante la vi­r­tua­li­za­ción, se crea una instancia que garantiza la po­r­ta­bi­li­dad y co­he­re­n­cia de cada co­n­te­ne­dor en todo momento, desde su de­sa­rro­llo hasta la fase de prueba y la ejecución. De esta manera, cada apli­ca­ción cuenta con su propio entorno virtual, aunque todas comparten el núcleo del sistema del host.

¿Cuáles son las ventajas de los co­n­te­ne­do­res de Linux? ¿La si­m­pli­ci­dad siempre es una ventaja? ¿Cuántas máquinas virtuales incluye un co­n­te­ne­dor de Linux?

¿Qué es LXC (Linux Co­n­tai­ne­rs)?

El término de “co­n­te­ne­dor de Linux” o LXC se refiere a las apli­ca­cio­nes vi­r­tua­li­za­das sobre la base de Linux, así como a la pla­ta­fo­r­ma y la te­c­no­lo­gía de co­n­te­ne­do­res su­b­ya­ce­n­te. Esto debe tenerse en cuenta sobre todo cuando se habla de otras pla­ta­fo­r­mas de co­n­te­ne­do­res que también utilizan la te­c­no­lo­gía de Linux Co­n­tai­ne­rs.

LXC es una pla­ta­fo­r­ma de co­n­te­ne­do­res de código abierto que ofrece un manejo sencillo ―algo poco habitual para los sistemas de co­n­te­ne­do­res― y una ex­pe­rie­n­cia de usuario moderna e intuitiva. La pla­ta­fo­r­ma pro­po­r­cio­na varias he­rra­mie­n­tas, lenguajes, pla­n­ti­llas y bi­blio­te­cas para ello. Además, el entorno de vi­r­tua­li­za­ción puede in­s­ta­lar­se y uti­li­zar­se en todas las di­s­tri­bu­cio­nes de Linux más comunes.

Consejo

Los co­n­te­ne­do­res son una he­rra­mie­n­ta ex­ce­p­cio­nal que ayuda a ad­mi­ni­s­trar y de­sa­rro­llar apli­ca­cio­nes de una manera antes im­pe­n­sa­ble: permiten aislar las apli­ca­cio­nes del sistema, pero no ponerlas en ai­s­la­mie­n­to por completo, ya que pueden seguir in­te­r­ca­m­bia­n­do in­fo­r­ma­ción y co­mu­ni­cá­n­do­se con el mundo exterior. Su la­n­za­mie­n­to supuso una re­vo­lu­ción. Ac­tua­l­me­n­te, la te­c­no­lo­gía de co­n­te­ne­do­res está en auge, e in­co­n­ta­bles pro­vee­do­res compiten con ella en el mercado. Entre los pro­vee­do­res más im­po­r­ta­n­tes de container as a service (CaaS) figuran Amazon, Microsoft y Google. La pla­ta­fo­r­ma más famosa es Docker, un de­sa­rro­llo del proyecto LXC co­m­pa­ti­ble con todos los pro­vee­do­res de CaaS.

El concepto de la te­c­no­lo­gía de co­n­te­ne­do­res de Linux se remonta a 2001. Ese año, por primera vez, se im­ple­me­n­tó un entorno aislado en el marco del proyecto VServer. Esa fue la base para crear diversos espacios de nombres (na­me­s­pa­ces) co­n­tro­la­dos en Linux y los ahora de­no­mi­na­dos co­n­te­ne­do­res de Linux. Les siguieron otras te­c­no­lo­gías, como los cgroups (grupos de control), que permiten controlar y re­s­tri­n­gir el uso de recursos para un proceso o conjunto de procesos, o systemd, un sistema de ini­cia­li­za­ción para ad­mi­ni­s­trar los espacios de nombres y sus procesos.

En la práctica, LXC agiliza el de­sa­rro­llo de las apli­ca­cio­nes, ya que la te­c­no­lo­gía de co­n­te­ne­do­res co­n­tri­bu­ye a la po­r­ta­bi­li­dad, la co­n­fi­gu­ra­ción y el ai­s­la­mie­n­to, entre otras cosas. Los co­n­te­ne­do­res también son útiles a la hora de tra­n­s­mi­tir datos en tiempo real, porque pro­po­r­cio­nan la es­ca­la­bi­li­dad necesaria a las apli­ca­cio­nes. Asimismo, los co­n­te­ne­do­res de Linux se adaptan a cada in­frae­s­tru­c­tu­ra, lo que los hace muy in­de­pe­n­die­n­tes, de modo que pueden im­ple­me­n­tar­se tanto lo­ca­l­me­n­te como en la nube o en un entorno híbrido.

Nota

La razón por la que las te­c­no­lo­gías de co­n­te­ne­do­res están tan de­ma­n­da­das es la siguiente: todas las apli­ca­cio­nes del sistema operativo tienen sus propias tareas y han sido diseñadas para eje­cu­tar­se justo en ese entorno. Se basan en las co­n­fi­gu­ra­cio­nes es­ta­ble­ci­das por el pro­gra­ma­dor y, por lo tanto, dependen de ciertas bi­blio­te­cas, contextos y archivos. Los co­n­te­ne­do­res resultan muy útiles para probar una nueva apli­ca­ción de manera simple, rápida y segura, ya que crean un entorno virtual para uti­li­zar­la sin tener que re­es­cri­bir código, so­lu­cio­nar problemas ni corregir errores. El contenido de un co­n­te­ne­dor se basa en la in­s­ta­la­ción de la di­s­tri­bu­ción de Linux y contiene todos los archivos de co­n­fi­gu­ra­ción, pero es mucho más fácil de co­n­fi­gu­rar que el sistema operativo real.

Objetivos y ca­ra­c­te­rí­s­ti­cas de LXC

A primera vista, los pri­n­ci­pios de LXC no parecen diferir del concepto de la vi­r­tua­li­za­ción clásica. Las di­fe­re­n­cias solo se hacen evidentes si ambas te­c­no­lo­gías se ponen en contexto. Uno de los aspectos más simples es que los co­n­te­ne­do­res funcionan a nivel del sistema operativo, mientras que las máquinas virtuales lo hacen a nivel del hardware. Así, los co­n­te­ne­do­res comparten un sistema operativo y aíslan los procesos de las apli­ca­cio­nes del resto del sistema, mientras que la vi­r­tua­li­za­ción clásica permite que múltiples sistemas ope­ra­ti­vos se ejecuten en un solo sistema.

Nota

Para que varios sistemas ope­ra­ti­vos puedan eje­cu­tar­se si­mu­l­tá­nea­me­n­te en un entorno vi­r­tua­li­za­do, se utiliza un hi­pe­r­vi­sor 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 co­n­te­ne­do­res de apli­ca­ción, que se ejecutan de forma nativa en el sistema operativo, es decir, sin emulación.

De forma pre­de­te­r­mi­na­da, los co­n­te­ne­do­res de Linux consumen menos recursos que una máquina virtual y tienen una interfaz de usuario estándar, lo que facilita y si­m­pli­fi­ca la ad­mi­ni­s­tra­ción de varios co­n­te­ne­do­res al mismo tiempo. Incluso es posible gestionar una pla­ta­fo­r­ma de LXC en varias nubes: esto asegura la po­r­ta­bi­li­dad y garantiza que las apli­ca­cio­nes que se ejecutan co­rre­c­ta­me­n­te en el sistema del de­sa­rro­lla­dor también funcionen en cualquier otro sistema. A través de la interfaz del co­n­te­ne­dor de Linux, incluso las apli­ca­cio­nes 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 in­s­ta­la­ción estándar de Linux sin la necesidad de un kernel in­de­pe­n­die­n­te.

La pla­ta­fo­r­ma de co­n­te­ne­do­res de Linux actual utiliza las si­guie­n­tes ca­ra­c­te­rí­s­ti­cas del kernel para in­co­r­po­rar apli­ca­cio­nes y procesos en los co­n­te­ne­do­res:

  • Espacios de nombres del núcleo (ipc, uts, mount, pid, red y usuario)
  • Perfiles Apparmor y SELinux
  • Di­re­c­tri­ces de Seccomp
  • Chroots (uti­li­za­n­do pivot_root)
  • Ca­pa­ci­da­des del kernel
  • cgroups (grupos de control)

Los co­n­te­ne­do­res de Linux deben pe­r­ma­ne­cer compactos. Por lo tanto, solo constan de unos pocos co­m­po­ne­n­tes:

  • Bi­blio­te­ca liblxc
  • Vi­n­cu­la­ció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
    • Ruby
    • Python
    • Haskell
  • Varias he­rra­mie­n­tas estándar para ad­mi­ni­s­trar los co­n­te­ne­do­res
  • Pla­n­ti­llas para di­s­tri­bu­cio­nes

¿Cómo funciona LXC?

La im­po­r­ta­n­cia del ai­s­la­mie­n­to y la vi­r­tua­li­za­ción radica en que ayudan a ad­mi­ni­s­trar los recursos y las medidas de seguridad de la manera más eficiente posible. Además, facilitan la su­pe­r­vi­sión, pe­r­mi­tie­n­do, por ejemplo, detectar errores en el sistema que a menudo no tienen nada que ver con las apli­ca­cio­nes en de­sa­rro­llo. ¿Cómo funcionan los co­n­te­ne­do­res de Linux?

La forma más fácil y razonable de utilizar los co­n­te­ne­do­res de Linux es vincular cada co­n­te­ne­dor a un proceso, de manera que el usuario mantenga to­ta­l­me­n­te el control. Para cada proceso, son es­pe­cia­l­me­n­te im­po­r­ta­n­tes los espacios de nombres, que hacen que los recursos estén di­s­po­ni­bles para uno o más procesos que utilicen el mismo espacio de nombres. Los procesos también permiten controlar el acceso para ga­ra­n­ti­zar la seguridad de los co­n­te­ne­do­res.

Para im­ple­me­n­tar un entorno LXC, las ca­ra­c­te­rí­s­ti­cas y sus funciones deben definirse cla­ra­me­n­te. 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 ad­mi­ni­s­trar, mo­ni­to­rear, 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 he­rra­mie­n­tas para ad­mi­ni­s­trar este tipo de archivos, como cgmnager.

Las funciones son muy in­tui­ti­vas, lo que ofrece la gran ventaja de que es muy fácil empezar a utilizar la pla­ta­fo­r­ma LXC. Sin embargo, esto también conlleva algunos in­co­n­ve­nie­n­tes, que ex­pli­ca­mos a co­n­ti­nua­ción.

Ventajas e in­co­n­ve­nie­n­tes de los co­n­te­ne­do­res de Linux

La facilidad de uso de Linux Co­n­tai­ne­rs es su mayor atractivo en co­m­pa­ra­ción con las te­c­no­lo­gías de vi­r­tua­li­za­ción tra­di­cio­na­les. En todo caso, la enorme expansión de LXC, un eco­si­s­te­ma casi completo, con sus he­rra­mie­n­tas in­no­va­do­ras, se debe sobre todo a la pla­ta­fo­r­ma Docker, que normalizó el uso de los co­n­te­ne­do­res de Linux. En co­m­pa­ra­ción directa con otros sistemas de co­n­te­ne­do­res 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 pla­ta­fo­r­mas de co­n­te­ne­do­res.

Los ad­mi­ni­s­tra­do­res de sistemas que hayan trabajado an­te­rio­r­me­n­te con programas de vi­r­tua­li­za­ción basados en hi­pe­r­vi­sor como Hyper-V no tendrán problemas para utilizar LXC. Toda la co­n­fi­gu­ra­ción, desde la creación y la puesta a punto de las pla­n­ti­llas de los co­n­te­ne­do­res, hasta el de­sa­rro­llo de las apli­ca­cio­nes, pasando por la co­n­fi­gu­ra­ció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 uti­li­zar­se con los co­n­te­ne­do­res de Linux, por lo que los de­sa­rro­lla­do­res no deben ha­bi­tuar­se a nuevas so­lu­cio­nes y he­rra­mie­n­tas pe­r­so­na­li­za­das, sino que pueden continuar tra­ba­ja­n­do sin problemas en un entorno con el que están fa­mi­lia­ri­za­dos, con sus propios scripts y flujos de trabajo de au­to­ma­ti­za­ción.

Uno de los mayores in­co­n­ve­nie­n­tes de LXC se hace evidente cuando se observa la ad­mi­ni­s­tra­ción de la memoria: se admiten di­fe­re­n­tes backends de memoria (Ivm, overlayfs, zfs y btrfs), pero todo se guarda di­re­c­ta­me­n­te en el rootfs de forma pre­de­te­r­mi­na­da. Los entornos simulados no se pueden registrar. En este sentido, otras pla­ta­fo­r­mas de co­n­te­ne­do­res ofrecen so­lu­cio­nes más in­te­li­ge­n­tes y flexibles, tanto para almacenar los co­n­te­ne­do­res como para ad­mi­ni­s­trar 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, la empresa que hay detrás de Ubuntu, una di­s­tri­bu­ción de Linux. Sin embargo, la mayor parte del apoyo procede de su propia comunidad, que promueve el proyecto de­sa­rro­lla­n­do versiones estables y ac­tua­li­za­cio­nes de seguridad de forma co­la­bo­ra­ti­va. Varias ediciones de LXC ya disfrutan de soporte pe­r­ma­ne­n­te y ac­tua­li­za­cio­nes de seguridad pe­rió­di­cas. Otras versiones reciben el mejor servicio posible, ge­ne­ra­l­me­n­te hasta que se lanza una versión más nueva y estable.

Linux Co­n­tai­ne­rs se utiliza como te­c­no­lo­gía de co­n­te­ne­do­res adicional y de soporte en la mayoría de los casos. En este campo, esto no es raro, porque los co­n­te­ne­do­res todavía se co­n­si­de­ran una te­c­no­lo­gía re­la­ti­va­me­n­te nueva, a di­fe­re­n­cia de las máquinas virtuales. Sin embargo, hay que tener en cuenta que los pro­vee­do­res de so­lu­cio­nes de co­n­te­ne­do­res están creciendo co­n­ti­nua­me­n­te y, con ellos, el eco­si­s­te­ma en torno a la te­c­no­lo­gía.

Hoy en día, LXC es una al­te­r­na­ti­va muy razonable a las apli­ca­cio­nes tra­di­cio­na­les es­pe­cia­l­me­n­te dirigidas a los ad­mi­ni­s­tra­do­res de VM. Con Linux Co­n­tai­ne­rs, hacer la tra­n­si­ción de una máquina virtual a una te­c­no­lo­gía de co­n­te­ne­do­res es más fácil que con cualquier otra te­c­no­lo­gía de este tipo.

Al­te­r­na­ti­vas a Linux Co­n­tai­ne­rs

La al­te­r­na­ti­va a LXC más popular es Docker. Esta pla­ta­fo­r­ma, basada en los co­n­te­ne­do­res de Linux, se ha de­sa­rro­lla­do co­n­ti­nua­me­n­te en los últimos años, por lo que ahora se ejecuta también en sistemas Windows. Esto permite que los pro­vee­do­res de nube más im­po­r­ta­n­tes, como Google, IBM, AWS y Azure, ofrezcan soporte nativo de Docker.

Una al­te­r­na­ti­va de co­n­te­ne­do­res para vi­r­tua­li­zar se­r­vi­do­res completos con Linux muy conocida es OpenVZ. Al igual que LXC, OpenVZ utiliza el núcleo del sistema operativo del host y pro­po­r­cio­na al usuario el servidor virtual en un entorno aislado.

KVM es una te­c­no­lo­gía de vi­r­tua­li­za­ció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 te­c­no­lo­gía convierte a Linux en un hi­pe­r­vi­sor, pe­r­mi­tie­n­do que el host ejecute múltiples entornos aislados.

Ku­be­r­ne­tes procede ori­gi­na­l­me­n­te de Google, una de las primeras pro­mo­to­ras de las te­c­no­lo­gías de co­n­te­ne­do­res de Linux. Esta pla­ta­fo­r­ma de código abierto au­to­ma­ti­za el fu­n­cio­na­mie­n­to de los co­n­te­ne­do­res de Linux. Los conjuntos de hosts en los que se ejecutan los co­n­te­ne­do­res se agrupan en clústeres y, por lo tanto, pueden ad­mi­ni­s­trar­se fá­ci­l­me­n­te.

Nota

Si quieres aprender a utilizar LXC, es im­pre­s­ci­n­di­ble que co­m­pre­n­das el fu­n­cio­na­mie­n­to del es­tre­cha­me­n­te re­la­cio­na­do LXD. A menudo, estos dos términos y te­c­no­lo­gías se confunden. LXD es un de­sa­rro­llo de LXC que contiene un demonio de sistema, entre otros elementos.

Ir al menú principal