103 votes

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

Je vois que beaucoup d'images docker dans le dépôt docker sont faites avec une base Ubuntu.

Qu'est-ce que cela signifie ? Est-ce que chaque conteneur contient une version allégé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 (qui dans certains cas est boot2docker, une construction personnalisée de Tiny Core Linux, et dans d'autres quelque chose comme CoreOS).

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

Réponse : Ahh, ça m'est venu à l'esprit. Il s'agit des processus de la terre de l'utilisateur 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, juste une entrée unique. Donc pour ces distributions, le point d'entrée est une sorte de processus init qui génère d'autres processus.

57voto

osgx Points 6257

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 fonctionnent sur une machine partagent ce noyau "hôte".

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

Docker utilise les fonctionnalités d'isolation des ressources du noyau Linux, telles que les cgroups et les espaces de noms du noyau, pour permettre à des "conteneurs" indépendants de fonctionner au sein d'une seule instance Linux, en évitant les frais généraux liés 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 y a toujours un seul noyau, un seul planificateur et une seule 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 ; elles peuvent être utilisées pour charger des conteneurs Docker.

http://boot2docker.io/

boot2docker est une distribution Linux légère basée sur Tiny Core Linux, conçue spécifiquement pour faire fonctionner les conteneurs Docker. Elle fonctionne entièrement en RAM, pèse ~27MB et démarre en ~5s (YMMV).

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

Un hôte de contrôle unique (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 sous-jacentes du noyau Linux au niveau du système d'exploitation. ... Cette approche s'appuie sur la fonctionnalité cgroups du noyau Linux, qui fournit une isolation de l'espace de noms et des capacités pour limiter, comptabiliser et isoler l'utilisation des ressources (CPU, mémoire, E/S de disque, etc.) pour les collections de processus.

29voto

JeremiahBarrar Points 945

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

"Le conteneur Docker Engine comprend uniquement l'application et ses dépendances. Il s'exécute comme un processus isolé dans l'espace utilisateur du système d'exploitation hôte, partageant le noyau avec les autres conteneurs. Ainsi, il bénéficie des avantages de l'isolation et de l'allocation des ressources des VM, mais il est beaucoup plus portable et efficace."

Cela pourrait aider à expliquer comment cela fonctionne : enter image description here

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

6voto

peterh Points 2332

Tous les conteneurs docker utilisent le noyau de l'hôte.

Cela signifie également qu'une incompatibilité entre le noyau hôte et la distro du conteneur pourrait causer des problèmes. En théorie. Par exemple, si un logiciel conteneurisé voulait utiliser une fonctionnalité du noyau qui n'est pas compilée dans le noyau hôte, il ne fonctionnerait pas.

La pratique veut que cela ne se produise pas. La principale source de problèmes des conteneurs Docker sont les limitations (souvent inexplicables) du Docker lui-même, et non une quelconque incompatibilité entre le noyau de l'hôte et celui de l'invité.

(P.s. C'est parce que pratiquement toutes les distros Linux fonctionnent avec n'importe quel noyau Linux).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X