web-dev-qa-db-fra.com

Pourquoi utilisons-nous une image de base du système d'exploitation avec Docker si les conteneurs n'ont pas de système d'exploitation invité?

Je viens de commencer à étudier Docker et il y a quelque chose qui me dérange beaucoup. Comme je l'ai lu sur le site Web de Docker, un conteneur est différent d'une machine virtuelle. Si j'ai bien compris, un conteneur n'est qu'un bac à sable à l'intérieur duquel s'exécute un système de fichiers isolé entier.

J'ai également lu qu'un conteneur n'a pas de système d'exploitation invité installé. Au lieu de cela, il repose sur le noyau OS sous-jacent.

Tout ça va bien. Ce que je suis confus, c'est qu'il y a des images Docker nommées d'après les systèmes d'exploitation. Nous voyons des images comme Ubuntu, Debian, Fedora, CentOS et ainsi de suite.

Mon point est: quelles sont vraiment ces images? En quoi est-ce différent de créer un conteneur basé sur l'image Debian que de créer une machine virtuelle et d'installer Debian?

Je pensais que les conteneurs n'avaient pas de système d'exploitation invité installé, mais lorsque nous créons des images, nous les basons sur une image nommée d'après un système d'exploitation.

De plus, dans des exemples que j'ai vus quand nous faisons docker run ubuntu echo "hello world", il semble que nous faisons tourner un VM avec Ubuntu et lui faisons exécuter la commande echo "hello world".

De la même manière lorsque nous faisons docker run -it ubuntu /bin/bash, il semble que nous faisons tourner un VM avec Ubuntu et y accédons en utilisant la ligne de commande.

Quoi qu'il en soit, à quoi ces images portent-elles le nom de systèmes d'exploitation? En quoi est-il différent d'exécuter un conteneur avec l'une de ces images et de faire tourner un VM avec le SE invité correspondant?

Est l'idée que nous juste partageons le noyau avec le système d'exploitation hôte (et par conséquent nous avons accès aux ressources matérielles de la machine sous-jacente, sans avoir besoin de virtualiser le matériel), mais utilisons toujours les fichiers et les binaires de chacun système différent sur les conteneurs afin de prendre en charge l'application que nous voulons exécuter?

93
user1620696

Étant donné que toutes les distributions Linux exécutent le même noyau Linux (ouais, c'est un peu simplifié) et ne diffèrent que par les logiciels utilisateur, il est assez facile de simuler un environnement de distribution différent - en installant simplement ce logiciel utilisateur et en prétendant qu'il s'agit d'une autre distribution. Étant spécifique, l'installation du conteneur CentOS dans Ubuntu OS signifie que vous obtiendrez l'espace utilisateur de CentOS, tout en exécutant le même noyau, pas même une autre instance de noyau.

Ainsi, la virtualisation légère, c'est comme avoir des compartiments isolés dans le même système d'exploitation. Au contraire, la virtualisation réelle a un autre système d'exploitation à part entière dans le système d'exploitation hôte. C'est pourquoi Docker ne peut pas exécuter FreeBSD ou Windows sous Linux.

Si cela était plus facile, vous pouvez penser que le docker est un environnement chroot très sophistiqué et avancé.

74
drookie

Les conteneurs fonctionnent sur un seul noyau. En d'autres termes, tous les conteneurs ont un seul noyau (OS hôte). Alors que d'autre part, les hyperviseurs ont plusieurs noyaux. Chaque machine virtuelle s'exécute sur un noyau différent.

Et "docker run ubuntu" revient à créer un environnement chroot.

1
Shiv sandhu