run - ¿Deseas ejecutar un sistema operativo Linux diferente en Docker Container?
dockers images (2)
He estado tratando de aprender Docker y una cosa que me desconcierta es cómo una versión diferente de Linux (para el sistema operativo host) realmente se ejecuta en el contenedor de Docker.
Si asumimos que mi host Docker está ejecutando RedHat y comienzo un contenedor desde una imagen de Ubuntu, ¿son verdaderos los siguientes ?:
- lógicamente, si la huella de la imagen de Ubuntu es de aproximadamente 550 MB, ¿el Docker Daemon realmente descargará (de un registro de imágenes) una imagen de Ubuntu de 550 MB para crear el Contenedor?
- ¿Es la instancia de Ubuntu ejecutándose en el contenedor esencialmente diferente a si hubiera descargado e instalado la misma versión manualmente?
Soy consciente de que el contenedor Docker comparte el mismo kernel utilizado por el sistema operativo host y que uno de los puntos fundamentales de Docker fue el aumento de la eficiencia del contenedor que utiliza el sistema operativo subyacente. Así que estoy un poco confundido acerca de lo que realmente sucede cuando inicia un contenedor creado a partir de una versión de Linux diferente a la del host.
Creo que esta publicación anterior puede ayudarlo a entenderlo un poco más: el aislamiento del contenedor Docker, ¿le importa el sistema operativo Linux subyacente? .
El quid de la cuestión es que si el SO Host es RedHat, entonces es el kernel RedHat el que será utilizado por cualquier compilación de Linux que ejecute en su contenedor Docker, es decir. Ubuntu en tu ejemplo.
Esto se reduce a comprender cuál es la diferencia entre un sistema operativo Linux y una imagen de Linux. No estarás ejecutando un sistema operativo completo de Ubuntu dentro del contenedor Docker, sino una imagen de Ubuntu.
Para el propósito de su pregunta piense:
OS = kernel + sistema de archivos / bibliotecas
Imagen = sistema de archivos / bibliotecas
La imagen de Ubuntu que se ejecuta dentro de su contenedor de Docker es solo el sistema de archivos / bibliotecas de Ubuntu, no contendrá el núcleo de Ubuntu. Esto explica en parte las eficiencias que obtiene de un contenedor Docker que aprovecha el Kernel (entre otras cosas) del Host subyacente.
La imagen de Ubuntu que se ejecuta dentro del contenedor Docker se ejecuta en lo que se denomina espacio de usuario para ese contenedor. Esta imagen puede hacer llamadas al sistema del kernel al kernel del sistema operativo RedHat (como parte de la transferencia del control del espacio del usuario al espacio del kernel para algunas operaciones del usuario). Dado que el núcleo central es una tecnología común, se espera que las llamadas del sistema sean compatibles incluso cuando la llamada se realiza desde un código de espacio de usuario de Ubuntu a un código del núcleo de Redhat. Esta compatibilidad hace posible compartir el kernel a través de contenedores que pueden tener diferentes imágenes de SO base.