web-dev-qa-db-fra.com

Exécuter un système d'exploitation Linux différent dans un conteneur Docker?

J'essaie d'apprendre Docker et une chose qui me surprend est la façon dont une version différente de Linux (du système d'exploitation hôte) s'exécute réellement dans le conteneur Docker.

Si nous supposons que mon hôte Docker exécute RedHat et que je commence un conteneur à partir d'une image Ubuntu, les éléments suivants sont-ils vrais ?:

  • logiquement, si l'empreinte de l'image Ubuntu est d'environ 550 Mo, le démon Docker téléchargera-t-il réellement (à partir d'un registre d'images) 550 Mo d'image Ubuntu afin de créer le conteneur?
  • l'instance d'Ubuntu s'exécutant dans le conteneur n'est-elle pas fondamentalement différente de celle que j'avais si j'avais téléchargé et installé la même version manuellement?

Je suis conscient que le conteneur Docker partage le même noyau que celui utilisé par le système d'exploitation hôte et que l'un des points fondamentaux de Docker réside dans les gains d'efficacité du conteneur utilisant le système d'exploitation sous-jacent. Je suis donc un peu confus quant à ce qui se passe réellement lorsque vous démarrez un conteneur créé à partir d'une version de Linux différente de celle de l'hôte.

36
JamieP

L'image Ubuntu s'exécutant dans le conteneur Docker s'exécute dans ce qu'on appelle l'espace utilisateur de ce conteneur. Cette image peut effectuer des appels système au noyau RedHat Host OS (dans le cadre du transfert du contrôle de l'espace utilisateur vers l'espace noyau pour certaines opérations utilisateur). Étant donné que le noyau principal est une technologie commune, les appels système devraient être compatibles, même lorsqu'ils sont passés d'un code d'espace utilisateur Ubuntu à un code de noyau Redhat. Cette compatibilité permet de partager le noyau entre des conteneurs pouvant tous avoir des images de système d'exploitation de base différentes.

0
Srikanth N