16 Abr

¿Qué es un container?

¿Qué es un container?

Un container es una técnica de virtualización a nivel de sistema operativo que aísla un proceso o grupo de procesos ofreciéndoles un contexto de ejecución “completo”. Se entiende por contexto o entorno de ejecución el conjunto de recursos (PIDs, red, sockets, puntos de montaje…) que le son relevantes al proceso.

A medio camino entre el chroot y las soluciones del tipo de KVM, el container no incurre en el coste de virtualizar el hardware o el kernel del SO ofreciendo, no obstante, un nivel de control y aislamiento muy superiores a los del chroot.

El container es más rápido en ser aprovisionado que el VM, no necesita arrancar una emulación de dispositivos ni el núcleo del sistema operativo, a costa de un nivel de aislamiento mucho menor: procesos en distintos containers comparten el mismo kernel.

        Lo que sigue es una introducción a la idea general de los containers.


1. Proceso y Kernel: los recursos

        El kernel de Linux tiene como misión fundamental la de mediar entre los programas que corren en una máquina, los procesos, y los distintos dispositivos físicos y virtuales que la componen. Para ello, se crea una abstracción fundamental: el recurso.

Los recursos pueden tener una disponibilidad limitada, un acceso restringido y un empleo privativo. Es tarea del kernel la de impedir que existan monopolizaciones de los mismos, que se produzcan accesos indebidos o que se simultanee el uso de recursos de utilización exclusiva.

fig 1

Comunicación con los componentes del ordenador

Además, el kernel realiza un importante trabajo de homogeneización, ocultando los detalles de funcionamiento de los distintos dispositivos y ofreciendo a los procesos interfaces limpias y unificadas que estandarizan el empleo de  hardware de distinta procedencia.

Podemos concluir, por tanto, que los procesos no “ven” los dispositivos que conforman la máquina donde corren sino la representación que de los mismos les ofrece el kernel.

Fig 2

Recursos de un proceso

Ese conjunto de recursos con los que interactúa el proceso, y que son los que le “interesan”, conforman su contexto de ejecución. En un SO funcionando de manera tradicional dicho contexto es único; esto es, todos los procesos comparten y ven el mismo entorno de SO.

C:\Users\desarrollo\Desktop\articulos\containers\fig3.png

Recursos compartidos por varios procesos

        Así encontramos, por ejemplo, que un pid es único por máquina, como lo es un semáforo o un recurso de red.  Independientemente de los derechos de acceso, los recursos existentes en una máquina son globales y, en principio, visibles para todos los procesos que viven en ella.


2. La virtualización de plataforma

        Las técnicas de virtualización de plataforma (como KVM) simulan una máquina mediante software, y eventualmente algún hardware especial de emulación como el vt-x de Intel, de manera que la replican totalmente: se abstraen los dispositivos, se arranca un kernel y, sobre todo ello, se inician por fin los procesos de usuario.

C:\Users\desarrollo\Desktop\articulos\containers\fig4.png

Virtualización de servidores en una máquina


3. Los containers

Los containers suponen un nuevo enfoque: no se pretende virtualizar la máquina, sino el contexto de ejecución del proceso; esto es, los recursos que el sistema le expone y con los que interactúa.

C:\Users\desarrollo\Desktop\articulos\containers\fig5.png

        El contexto ya no es único dentro de una máquina, por lo tanto varios procesos pueden tener el mismo pid (siempre que se encuentren en distintos contextos) cada proceso corriendo en un container puede realizar su propio IPC o montar sus sistemas de ficheros.

        El container se centra en aislar el proceso y evita el coste de virtualizar los dispositivos o el kernel que le son indiferentes al primero puesto que ya se encuentran abstraídos por el núcleo del SO.

C:\Users\desarrollo\Desktop\articulos\containers\fig6.png

        Dos son los fundamentos tecnológicos de los containers: los cgroups y los namespaces. Ambas tecnologías se encuentran subsumidas dentro del kernel. Las introduciremos en el siguiente artículo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *