Quelle est la relation entre le système d'exploitation hôte Docker et le système d'exploitation d'image de base du conteneur?

122

Je ne suis pas sûr de poser la bonne question ... mais pendant que j'ai lu tout ce que je peux mettre la main sur docker, je vois que je peux installer Docker sur Ubuntu 12.04 (par exemple) et ensuite je peux installer un conteneur Fedora ou une version différente d'ubuntu? (il y a un exemple où l'utilisateur a installé busybox dans le conteneur.)

Et bien sûr, je pourrais me tromper complètement.

Mais je m'attendrais à ce qu'il y ait une connexion éphémère entre le système de base et le conteneur.

reformulé: quelle est la relation entre l'OS hôte et l'OS de l'image de base du conteneur?

Richard
la source

Réponses:

100

Comme mentionné par BraveNewCurrency, la seule relation entre le système d'exploitation hôte et le conteneur est le noyau.

C'est l'une des principales différences entre les machines virtuelles docker et `` normales '', il n'y a pas de surcharge, tout se déroule directement dans le noyau de l'hôte.

C'est pourquoi vous ne pouvez exécuter que des distributions / binaires basés sur Linux dans le conteneur. Si vous voulez exécuter autre chose, ce n'est pas impossible, mais vous auriez besoin d'une sorte de virtualisation dans le conteneur (qemu, kvm, etc.)

Docker gère les images qui sont la représentation du système de fichiers. Vous pouvez installer n'importe quelle distribution Linux ou simplement mettre des binaires.

En effet, pour la commodité de l'exemple, nous nous appuyons souvent sur les images de base, mais vous pouvez également créer votre image sans aucune des bibliothèques / binaires de distribution. De cette façon, vous auriez un conteneur vraiment minuscule mais fonctionnel.

Un autre point concernant les distributions: comme le noyau est toujours le noyau de l'hôte, vous n'aurez pas de module / correctif de noyau spécifique fourni par la distribution.

craquer
la source
2
Donc, si le système d'exploitation hôte est Ubuntu, le conteneur sera également Ubuntu?
Richard
21
Le noyau du conteneur sera celui d'ubuntu, mais rien de plus. Vous pouvez facilement exécuter centos, archlinux, debian ou toute autre distribution basée sur Linux en tant que conteneurs.
creack le
37
Bien que ces informations puissent être déclarées directement / indirectement sur le site Web de docker, je pense vraiment qu'elles devraient rendre cela un peu plus clair. J'avais parcouru la page d'accueil, la vue d'ensemble, le tutoriel interactif et la plupart des tutoriels de base. Malgré cela, j'étais confus sur ce sujet et commençais à supposer que les meilleures performances de docker (basées sur les diagrammes d'architecture du site) nécessiteraient une correspondance sur le système d'exploitation hôte et conteneur. Je suis nouveau dans le concept de "noyau linux" donc cela ne m'est pas apparu immédiatement. Sachant cela fait instantanément docker double de bad-ass.
ctrlplusb
2
Docker est un projet assez complexe qui tire parti des fonctionnalités avancées. À un moment donné, nous supposons que l'utilisateur a des connaissances telles que la différence entre le système d'exploitation et la distribution. Si vous pensez que cela ajouterait de la valeur, la documentation est open source et vous pouvez soumettre une pull request.
creack
3
Cela semble indiquer que seules les parties de l'espace utilisateur d'un système d'exploitation (bibliothèques, commandes, applications) peuvent être conteneurisées. Si l'application nécessite une révision de noyau différente (par exemple 3.10 contre 4.9), elle ne pourra peut-être pas s'exécuter dans un conteneur. Est-ce correct?
David C.
23

Littéralement, la seule chose qu'ils ont en commun est le noyau. Leur monde entier (système de fichiers) est dans le conteneur du docker.

BraveNewCurrency
la source
1

Il y a une autre considération - même si les deux noyaux sont identiques, il y a un problème si le système d'exploitation hôte ne prend pas en charge Docker, comme RHEL 6: https://access.redhat.com/solutions/1378023

Vous ne pourrez donc pas faire tourner un conteneur sur RHEL 6, même si l'image est une image Linux.

flow2k
la source