Les conteneurs Docker ont-ils leur propre noyau ou pas?

66

Je vois que beaucoup d'images de docker dans le référentiel de docker sont créées avec une base Ubuntu.

Qu'est-ce que ça veut dire? Chaque conteneur regroupe-t-il une version simplifiée du noyau Linux?

Les conteneurs reposent-ils sur leurs propres noyaux? Mais je pensais que les conteneurs partageaient le noyau de l'hôte (ce qui dans certains cas était boot2docker, une version personnalisée de Tiny Core Linux et, dans d'autres, quelque chose comme CoreOS).

EDIT: Clarifier un peu la question. Oui, je sais que docker est un conteneur de processus, pas une machine virtuelle complète. Mais comme il existe des conteneurs "Ubuntu" dans le registre officiel du docker hub et dans d'autres systèmes d'exploitation tels que CentOS, que signifie exécuter Ubuntu dans un conteneur?

Réponse: Ah, ça vient de me paraître. Il s’agit des processus utilisateurs d’Ubuntu, contenant apt-get et d’autres processus de configuration pour une construction Ubuntu particulière. De même pour CentOS. Docker n'est pas un processus unique, mais une seule entrée. Donc, pour ces distributions, le point d’entrée est une sorte de processus init qui engendre d’autres processus.

stewart99
la source
2
"Ce sont les processus utilisateurs de Ubuntu" - non seulement les processus, mais également les bibliothèques.
osgx

Réponses:

38

Docker utilise le noyau du système d'exploitation hôte. Il n'y a pas de noyau personnalisé ou supplémentaire dans le conteneur. Tous les conteneurs qui s'exécutent sur une machine partagent ce noyau "hôte".

Wikipedia dit http://en.wikipedia.org/wiki/Docker_(software) que

Docker utilise des fonctionnalités d'isolation des ressources du noyau Linux, telles que des groupes de contrôle et des espaces de noms de noyau, pour permettre à des "conteneurs" indépendants de s'exécuter au sein d'une seule instance Linux, évitant ainsi le temps système nécessaire au démarrage de machines virtuelles.

cgroups, namespaces et LXC sont des fonctionnalités du noyau Linux permettant d’isoler des groupes de processus; il existe toujours un seul noyau, un seul planificateur et une instance du gestionnaire de mémoire du noyau.

Boot2docker et CoreOS ne sont que des distributions Linux légères avec un noyau hôte; ils peuvent être utilisés pour charger des conteneurs Docker.

http://boot2docker.io/

boot2docker est une distribution Linux légère basée sur Tiny Core Linux spécialement conçue pour exécuter les conteneurs Docker. Il fonctionne entièrement à partir de la RAM, pèse environ 27 Mo et démarre en environ 5 secondes (YMMV).

http://en.wikipedia.org/wiki/CoreOS

Un seul hôte de contrôle (instance CoreOS) exécute plusieurs systèmes Linux isolés (conteneurs), en utilisant Docker comme couche supplémentaire d'abstraction et d'interface [14] avec les fonctionnalités de virtualisation du noyau Linux au niveau du système d'exploitation sous-jacentes. ... Cette approche repose sur la fonctionnalité cgroups du noyau Linux, qui fournit une isolation d'espace de nom et des capacités de limitation, de comptabilisation et d'isolement de l'utilisation des ressources (CPU, mémoire, E / S de disque, etc.) pour les collections de processus.

osgx
la source
1
Cela ne répond pas à la question.
EML
2
EML, quelle question? Par défaut, tous les conteneurs Docker ne possèdent pas de noyaux propres. Il n'y a qu'un seul noyau hôte pour tous les conteneurs Docker.
osgx
Bien sûr, votre réponse est correcte dans la mesure où elle va, mais le PO voulait savoir pourquoi il lui fallait FROMune image de base Ubuntu alors que l'hôte exécute déjà Ubuntu. Pour répondre à la question, vous devez expliquer en quoi consiste une image de base.
EML
2
EML, la question a été modifiée avec "Clarifying" ( superuser.com/posts/889472/revisions ) après la publication de ma réponse. Il s'agit donc d'une réponse à la question d'origine sans précision. Si vous avez des informations à partager sur les images de base et les noyaux de docker, ajoutez une autre réponse.
osgx
17

Dans presque tous les cas, le noyau du système d'exploitation hôte est partagé. Pour exécuter un autre noyau, vous devez utiliser la virtualisation. Ceci est rare et n'est utilisé que lorsque cela est nécessaire en raison de la dégradation des performances.

"Le conteneur Docker Engine comprend uniquement l'application et ses dépendances. Il s'exécute en tant que processus isolé dans l'espace utilisateur sur le système d'exploitation hôte, partageant le noyau avec d'autres conteneurs. Il bénéficie donc des avantages liés à l'isolation et à l'allocation des ressources des ordinateurs virtuels, mais bien plus portable et efficace. "

Cela pourrait aider à expliquer comment cela fonctionne: entrez la description de l'image ici

Source: https://www.docker.com/whatisdocker/

JeremiahBarrar
la source
4
N'importe quel source pour "Les paquets peuvent utiliser des noyaux différents" ??? Docker lui-même ne peut pas utiliser plusieurs noyaux, il n'y a toujours qu'un seul noyau hôte. Ce n’est qu’associé à un hyperviseur (virtualisation) que nous pouvons démarrer plusieurs hôtes avec leur propre version de noyau et exécuter un Docker par hôte virtuel; mais pour tout hôte, il n'y aura qu'un seul noyau pour l'hôte et pour ses conteneurs
ancrés
2
Quel est le paquet? Le conteneur Docker ne contient pas de noyau; il vient d'installer et de démarrer sur le noyau qui est utilisé sur l'hôte. Donc: un Docker = un serveur = un noyau, comme indiqué dans l'image. Pas moyen d'utiliser deux noyaux avec un seul moteur Docker; tous les conteneurs de ce moteur utiliseront le même noyau. Je pense que la réponse correcte est "Non, les conteneurs Docker ne peuvent pas utiliser différents noyaux au sein d'une seule instance de Docker Engine"
osgx
1
Chaque conteneur Docker peut exécuter le code de son choix, y compris un logiciel de virtualisation capable de charger le noyau dont votre logiciel a besoin. Vous pouvez exécuter Windows dans un conteneur si vous le souhaitez.
JeremiahBarrar
1
JeremiahBarrar, compris, merci pour l'explication. L'exécution du logiciel de virtualisation depuis le conteneur Docker est-elle documentée et est-elle prise en charge par Docker? Quel type de virtualisation fonctionnera avec Docker (logiciel qemu, qemu + kvm, xen, ...)?
osgx
2
La première phrase est trompeuse. L'utilisation d'une machine virtuelle dans un type de conteneur fait échec à l'utilisation de Docker.
user2707671