Con la virtualización basada en contenedores, no existe la sobrecarga asociada con tener a cada huésped ejecutando un sistema operativo completamente instalado.
[3] 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.
[4] 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).
[7] Este sistema fue añadido directamente al kernel de Linux en el año 2001.
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.
La implementación de namespaces fue mejorándose y ampliándose en versiones sucesivas del kernel.
[7] Warden desarrolló el primer modelo cliente-servidor para administrar contenedores distribuidos en diferentes equipos.
[9] Esto provoca que Docker, y por tanto los contenedores, se empiecen a usar de forma masiva.
[9] 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.
[11] Si queremos datos persistentes se montan rutas del sistema subyacente en los contenedores por ejemplo usando los llamados volúmenes.
[12] Inicialmente Docker usó como entorno de ejecución por defecto LXC, sin embargo más tarde fue reemplazado por libcontainer.
[7][13] 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.
Esta forma de virtualización además no requiere soporte en hardware para actuar eficientemente.
La virtualización a nivel de sistema operativo no es tan flexible como otros enfoques de virtualización porque no puede hospedar un sistema operativo diferente del anfitrión o un kernel distinto.
Los Sistemas Distribuidos permiten que los recursos de la red no se encuentren centralizados en una sola máquina, pudiendo estar en varias, e incluso en lugares diferentes.
Como se mencionó anteriormente, los contenedores son una forma de virtualización del sistema operativo.
Estos pueden llegar a utilizarse para ejecutar cualquier cosa, desde un micro servicio hasta una aplicación de mayor nivel.
Docker se basa en estándares abiertos y funciona en la mayoría de los entornos operativos más comunes, incluidos Linux, Microsoft Windows y otras infraestructuras locales o basadas en la nube.
Durante la producción, muchas pueden requerir cientos o miles de contenedores independientes.