La virtualización a nivel de sistema operativo, también llamada virtualización basada en contenedores, contenerizaciónVirtualización basada en contenedores y SD-WAN . Guillermo Lopez. teldat.com. 3 octubre 2018 o contenedorización,La contenerización de aplicaciones. Hector Gil. plotandesign.com. 28 de marzo de 2019 es un método de virtualización en el que, sobre el núcleo del sistema operativo, se ejecuta una capa de virtualización que permite que existan múltiples instancias aisladas de espacios de usuario, en lugar de solo uno. Tales instancias, las cuales son llamadas contenedores, contenedores de software, jaulas o prisiones, pueden verse y sentirse como un servidor real desde el punto de vista de sus dueños y usuarios. Al software que permite el alojamiento de distintos contenedores se le llama motor de contenedores. Además de mecanismos de aislamiento, el kernel a menudo proporciona mecanismos de administración de recursos para limitar el impacto de las actividades de un contenedor sobre otros contenedores.

Con la virtualización basada en contenedores, no existe la sobrecarga asociada con tener a cada huésped ejecutando un sistema operativo completamente instalado. Este enfoque también puede mejorar el rendimiento porque hay un solo sistema operativo encargándose de los avisos de hardware. Una desventaja de la virtualización basada en contenedores, sin embargo, es que cada invitado debe utilizar el mismo sistema operativo que utiliza el host.

Historia Como origen de la virtualización a nivel de sistema operativo podemos señalar 1982 con la creación de chroot por parte de Bill Joy. A chroot se le pasan dos parámetros, uno que indica un directorio y el otro el comando a ejecutar. Lo que hace chroot es ejecutar el comando pasado como parámetro impidiendo que él y sus procesos hijos accedan a cualquier ruta fuera del directorio pasado también como parámetro. Se establece lo que se llama jaula chroot. Estas restricciones son relativamente fáciles de superar. Lo que se persigue es crear una zona con algo más de seguridad donde poder ejecutar un programa del cual se desconfía y que puede presentar un comportamiento peligroso para la integridad del sistema.

En los años 90 Poul-Henning Kamp introduce las llamadas jaulas FreeBSD,Building Systems to be Shared Securely. POUL-HENNING KAMP y ROBERT WATSON. ACM QUEUE Julio/Agost de 2004 a veces simplemente llamadas jaulas BSD. Son el primer ejemplo de virtualización a nivel de sistema operativo. Su objetivo es solventar la limitación de chroot de que sólo limita la parte del sistema de ficheros a la que pueden acceder los procesos dentro de la jaula. El resto de recursos del sistema (conjunto de usuarios del sistema, los procesos en ejecución, el subsistema de red,...) están compartidos entre el sistema alojado y el servidor. Las jaulas BSD extienden este modelo virtualizando no solamente el acceso al sistema de ficheros, sino al conjunto de usuarios, al subsistema de red del kernel de FreeBSD y unas cuantas cosas más.Capítulo 15. Jaulas. Manual de FreeBSD. 1995-2010 Para ello elimina todos los privilegios de superusuario que podría afectar a objetos que no están enteramente dentro de la jaula. Además cada jaula puede tener su propio conjunto de usuarios e incluso su propio usuario root (limitado al entorno de la jaula no pudiendo realizar operaciones fuera del mismo). Es un sistema más avanzado que crea un entorno virtual prácticamente indistinguible de una máquina real (o máquina virtual real).Virtualización ligera usando contenedores: Introducción. Material docente para la asignatura Infraestructura Virtual. JJ Merelo. Universidad de Granada. Tienen como limitación, sin embargo, la obligación de ejecutar la misma versión del núcleo del sistema.

De manera prácticamente paralela a las jaulas FreeBSD, aparece Linux VServer un sistema de virtualización para plataformas Linux que también permite aislar los recursos (sistemas de archivos, direcciones de red, memoria,..). Este sistema fue añadido directamente al kernel de Linux en el año 2001. Posteriormente, también para Linux, se lanzó OpenVZ y su versión comercial Virtuozzo).Personalización de entorno de desarrollo y despliegue sobre contenedores. Carlos Rodríguez Hernández. Trabajo Fin de Grado en Ingeniería de las Tecnologías de Telecomunicación. Universidad de Sevilla 2019

Dentro de la familia de sistemas operativos Solaris aparece una tecnología equivalente a las jaulas BSD llamada zonas Solaris. La principal diferencia con las jaulas BSD es la baja sobrecarga que le añaden al sistema operativo y el hecho de que se les puedan asignar recursos específicos.

En 2002 se introducen en el kernel de linux los namespaces. Estos namespaces permiten particionar los recursos del kernel de modo que un grupo de procesos vea un conjunto de recursos y otro conjunto de procesos vea otro conjunto diferente de recursos. La implementación de namespaces fue mejorándose y ampliándose en versiones sucesivas del kernel.

En el año 2006 Google lanza para plataformas Linux su herramienta Process Containers que fue diseñada para limitar y aislar los accesos a recursos de la máquina como CPU, memoria, I/O de disco, red, etc., por parte de un grupo de procesos. Este proyecto fue renombrado posteriormente al nombre Grupos de control o simplemente cgroups en 2007 y finalmente se fusionó con el kernel de Linux.

Unos años más tarde nace para plataformas Linux el sistema LinuX Containers (LXC). Este sistema, apoyándose sobre namespaces y cgroups que ofrece el kernel de Linux, consiguió la primera implementación estable de un gestor de contenedores sobre Linux. Sobre LXC se ha construido LXD, un administrador de contenedores del sistema que proporciona una mejor experiencia de usuario. LXD ofrece un servicio similar a una máquina virtual en el sentido de que ofrece al usuario un sistema operativo completo con interfaces de red y almacenamiento pero, en este caso, con ciertas restricciones de acceso.LXD vs Docker. Ranvir Singh. 2017

Entre 2011 y 2013 surgen diversas tecnologías de gestión de contenedores como Warden, LMCTFY (siglas de Let Me Contain That For You) y Docker. Warden desarrolló el primer modelo cliente-servidor para administrar contenedores distribuidos en diferentes equipos. LMCTFY permitía que las aplicaciones propiamente dichas tuvieran capacidad para controlar el contenedor, administrando sus propios subcontenedores o contenedores hijos. En 2013 surge Docker, el cual permite gestionar el ciclo de vida de los contenedores de forma sencilla en comparación con las herramientas anteriores.¿Qué es Docker?. Víctor Cuervo. 26 de noviembre de 2019. Esto provoca que Docker, y por tanto los contenedores, se empiecen a usar de forma masiva.

La gran ventaja de Docker es que está orientado a empaquetar dentro de los contenedores aplicaciones aisladas entre sí, con todas las funcionalidades que necesitan para ser ejecutadas permitiendo integrarlas en los flujos de integración/distribución continua. De esta forma obtiene una cadena unificada desde el desarrollo de aplicaciones hasta su puesta en producción. Teniendo un modelo de único despliegue de las aplicaciones, consigue reducir los tiempos de configuración, los tiempos de despliegue,… y mejorando, en ese sentido, el tiempo de puesta en producción de las aplicaciones. De esta manera independientemente del entorno en el que ejecutemos el contenedor (local, desarrollo o entornos productivos) siempre nos vamos a asegurar que se ejecuta de la misma manera. Para ello usa instantáneas de un contenedor, a las que llama imágenes,Trabajando con imágenes en Docker. Marcos Saiz. 2019 que se ejecutan instanciándolas en lo que ya sería el contenedor. Podremos crear tantas instancias de una imagen como queramos y en los entornos que queramos. Típicamente se tienen contenedores mínimos efímeros, sin estado, que normalmente no se actualizan o reconfiguran, sino que simplemente se reemplazan por completo. Si queremos datos persistentes se montan rutas del sistema subyacente en los contenedores por ejemplo usando los llamados volúmenes.Volúmenes y datos persistentes en Docker. Pablo. 2 de enero de 2019

Inicialmente Docker usó como entorno de ejecución por defecto LXC, sin embargo más tarde fue reemplazado por libcontainer.LXC vs. libcontainer. Anusheh Zohair Mustafeez De esta forma consiguió poder ser usado con otras tecnologías de aislamiento distintas a LXC y poder acceder directamente a las APIs del kernel del sistema operativo y así poder reducir las dependencias de librerías y aumentar la eficiencia del sistema. Sobre libcontainer Docker creó runC, un motor de contenedores ligero de línea de comandosrunC: The little container engine that could. Phil Estes. 15 de agosto de 2016What’s Running My Containers? A review of runtimes & standards. Phil Estes

Aunque Docker sigue siendo, con diferencia, la solución más usada, durante estos últimos años han surgido otras alternativas como:Una guía no tan rápida de Docker y Kubernetes. Mauricio Collazos. 19 de junio de 2018Virtualización con contenedores Docker: alternativas. ionos.es. 9 de julio de 20195 Container Alternatives to Docker. Bill Doerrfeld. 22 de enero de 2019 rkt (antes llamado Rocket). Creado por Container Linux para proporcionar más seguridad e interoperabilidad. No obligaba a ejecutar todo como root, no tenía demonios, estaba controlado por línea de comandos CLI, y tenía comodidades como verificación criptográfica y compatibilidad completa con imágenes de Docker.A Comprehensive Container Runtime Comparison. Evan Baker. 10 de junio de 2020 Docker fue ganando popularidad y rkt finalmente fue abandonado. Apache Mesos. Permite ejecutar frameworks sobre los cuales se ejecuta la aplicación y está especialmente orientado a entornos de Big DataApache Mesos. Viviana. 23 de julio de 2018 Windows Server Container. Las instancias de los contenedores se ejecutan a la vez sobre el mismo núcleo del anfitrión.Containers con Windows Server 2016. Josep Ma Solanes. 5 de abril de 2016 Hyper V Container Los contenedores no comparten el mismo núcleo sino que se aísla entre cada uno utilizando la tecnología de virtualización Hyper-V.

En 2015 se funda la Open Container Initiative (OCI), una asociación de instituciones y empresas asociadas para diseñar estándares abiertos sobre virtualización a nivel de sistema operativo para, de esta forma, asegurar que las plataformas de contenedores no estén vinculadas a ninguna empresa o proyecto concreto.Open Container Initiative. searchitoperations.techtarget.com. Noviembre de 2015