La palabra contenedor se refiere a una tecnología de virtualización liviana disponible en los núcleos modernos de Linux, esta tecnología es muy similar a las cárceles de FreeBSD.
Un kernel de Linux más antiguo, no apto para contenedores, puede ejecutar procesos simultáneamente. Algunos atributos del sistema son privados de procesar, como el entorno del proceso o la memoria del proceso: solo el proceso que posee estos atributos y el propio sistema operativo pueden acceder a estos datos. (Hay muchas lagunas, como algunas implementaciones de ps , ¡pero eso es esencialmente cierto!) Algunos otros atributos se comparten entre los procesos, como el sistema de archivos y las interfaces de red, por ejemplo.
Un kernel de Linux moderno y apto para contenedores puede manejar más atributos del sistema como datos privados asociados a un proceso o grupo de procesos. El contexto resultante es un contenedor y, en lugar de ejecutar un programa en los "contenedores iniciales" utilizando el sistema de archivos y las interfaces de red inicializadas por el sistema operativo, es posible ejecutar procesos en otros contenedores, para que vean un sistema de archivos diferente y un lista diferente de interfaces de red. Por lo tanto, dos procesos que se ejecutan en contenedores distintos solo comparten el núcleo. Quizás esté familiarizado con el comando chroot que puede ejecutar un proceso en una jerarquía de archivos distinta, los contenedores llevan la idea un paso más allá.
Por supuesto, esta es solo una explicación muy burda, pero espero que ayude a aclarar la idea de qué son los contenedores. Ahora, ¿para qué sirven?
Docker implementa una interfaz popular para las capacidades de contenedor de los núcleos de Linux , una utilidad de línea de comandos que se puede usar para producir artefactos que representan sistemas de archivos ( imágenes de docker ) y ejecutar procesos en contenedores donde estos sistemas de archivos son accesibles. Este paquete de software también puede construir sistemas de redes virtuales ad-hoc para permitir que varios contenedores se comuniquen en una red privada.
Las tecnologías basadas en contenedores son convenientes para:
- Describir implementaciones complejas escalables .
- Proporcione a los desarrolladores de aplicaciones un entorno muy similar al entorno de producción.
- Implemente un patrón de servidor inmutable, ya que los artefactos de software generalmente describen un sistema operativo completo, no solo un paquete de aplicación.
(Como parece familiarizado con otras tecnologías de virtualización como Virtual Box, puede observar que estas tecnologías también pueden abordar convenientemente los tres puntos anteriores. Hoy en día, existe un espectro bastante pequeño de tecnologías de virtualización, y podemos comparar la cuestión de su popularidad en ciertos contextos con la popularidad de los lenguajes de computadora: probablemente depende de los méritos técnicos de cada solución individual, pero también de muchos factores que simplemente denominaré "oportunidad".)