Virtualización a nivel de sistema operativo


La virtualización a nivel de sistema operativo es un paradigma de sistema operativo en el que el kernel permite la existencia de múltiples instancias de espacio de usuario aisladas. Dichas instancias, denominadas contenedores ( LXC , contenedores de Solaris , Docker ), zonas ( contenedores de Solaris ), servidores privados virtuales ( OpenVZ ), particiones , entornos virtuales (VE), kernels virtuales ( DragonFly BSD ) o cárceles ( FreeBSD jail ochroot jail ), [1] pueden parecer computadoras reales desde el punto de vista de los programas que se ejecutan en ellas. Un programa de computadora que se ejecuta en un sistema operativo ordinario puede ver todos los recursos (dispositivos conectados, archivos y carpetas, recursos compartidos de red , potencia de la CPU, capacidades de hardware cuantificables) de esa computadora. Sin embargo, los programas que se ejecutan dentro de un contenedor solo pueden ver el contenido del contenedor y los dispositivos asignados al contenedor.

En los sistemas operativos similares a Unix, esta función puede verse como una implementación avanzada del mecanismo chroot estándar , que cambia la carpeta raíz aparente para el proceso en ejecución actual y sus elementos secundarios. Además de los mecanismos de aislamiento, el núcleo suele proporcionar funciones de gestión de recursos para limitar el impacto de las actividades de un contenedor en otros contenedores.

El término contenedor , aunque se refiere más popularmente a los sistemas de virtualización a nivel del sistema operativo, a veces se usa de manera ambigua para referirse a entornos de máquinas virtuales más completos que operan en diversos grados de concierto con el sistema operativo anfitrión, por ejemplo, los contenedores Hyper-V de Microsoft .

En los sistemas operativos ordinarios para computadoras personales, un programa de computadora puede ver (aunque no pueda acceder) todos los recursos del sistema. Incluyen:

El sistema operativo puede permitir o denegar el acceso a dichos recursos según el programa que los solicite y la cuenta de usuario en cuyo contexto se ejecuta. El sistema operativo también puede ocultar esos recursos, de modo que cuando el programa informático los enumere, no aparezcan en los resultados de la enumeración. Sin embargo, desde el punto de vista de la programación, el programa informático ha interactuado con esos recursos y el sistema operativo ha logrado un acto de interacción.

Con la virtualización del sistema operativo, o contenerización, es posible ejecutar programas dentro de contenedores, a los que solo se asignan partes de estos recursos. Un programa que espera ver toda la computadora, una vez que se ejecuta dentro de un contenedor, solo puede ver los recursos asignados y cree que son todos los que están disponibles. Se pueden crear varios contenedores en cada sistema operativo, a cada uno de los cuales se asigna un subconjunto de los recursos de la computadora. Cada contenedor puede contener cualquier número de programas informáticos. Estos programas pueden ejecutarse simultáneamente o por separado, e incluso pueden interactuar entre sí.