Ejecutar Diferentes sistemas operativos Linux en Contenedor Docker?


Han estado tratando de aprender Docker y una cosa que me desconcierta es cómo un sabor diferente de Linux (al sistema operativo host) realmente se ejecuta en el contenedor Docker.

Si asumimos que mi host de Docker está ejecutando RedHat y comienzo un contenedor desde una imagen de Ubuntu, ¿entonces es cierto lo siguiente?:

  • lógicamente hablando, si la huella de imagen de Ubuntu es de alrededor de 550 MB, entonces el Demonio Docker descargará (desde un registro de imágenes) 550 MB de imagen de Ubuntu para crear el Recipiente?
  • ¿la instancia de Ubuntu que se ejecuta en el contenedor no es esencialmente diferente de si hubiera descargado e instalado la misma versión manualmente?

Soy consciente de que el contenedor Docker comparte el mismo núcleo utilizado por el sistema operativo host y que uno de los puntos fundamentales de Docker fue su aumento de la eficiencia del contenedor utilizando el sistema operativo subyacente. Así que estoy un poco confundido acerca de lo que realmente sucede cuando se inicia un contenedor creado a partir de una versión de Linux diferente de host.

 31
Author: JamieP, 2015-10-13

2 answers

Creo que este post anterior puede ayudarte a entenderlo un poco más - Aislamiento de contenedores Docker, ¿le importa el sistema operativo Linux subyacente?.

El quid de la cuestión es que si el sistema operativo Host es RedHat, entonces es el núcleo RedHat el que será utilizado por cualquier compilación de Linux que ejecute en su contenedor Docker ie. Ubuntu en tu ejemplo.

Esto se reduce a entender cuál es la diferencia entre un Linux OS y un Linux Imagen. No se ejecutará un sistema operativo Ubuntu completo dentro del contenedor Docker, sino una imagen de Ubuntu.

Para el propósito de tu pregunta piensa: -

OS = kernel + el sistema de archivos/bibliotecas
Imagen = el sistema de archivos/bibliotecas

La imagen de Ubuntu que se ejecuta dentro de su contenedor 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 está aprovechando el Núcleo (entre otras cosas) del Host subyacente.

 43
Author: Nio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-03 21:18:05

La imagen de Ubuntu que se ejecuta dentro del contenedor Docker se ejecuta en lo que se llama el espacio de usuario para ese contenedor. Esta imagen puede hacer llamadas al sistema del kernel al kernel del sistema operativo RedHat host (como parte de la transferencia de control desde el espacio de usuario al espacio del kernel para algunas operaciones de usuario). Dado que el núcleo del núcleo es una tecnología común, se espera que las llamadas al sistema sean compatibles incluso cuando la llamada se realiza desde un código del espacio de usuario de Ubuntu a un código del núcleo Redhat. Esta compatibilidad hace posible comparta el núcleo entre contenedores que pueden tener diferentes imágenes de SO base.

 0
Author: Srikanth N,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-25 19:38:48