Je viens juste de commencer à étudier Docker et il y a quelque chose qui me semble assez déroutant. 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 est simplement un bac à sable à l'intérieur duquel est exécuté un système de fichiers isolé complet.
J'ai également lu qu'un conteneur n'a pas de système d'exploitation invité installé. Au lieu de cela, il s'appuie sur le noyau du système d'exploitation sous-jacent.
Tout ça va bien. Ce qui me rend confus, c'est qu'il existe des images Docker nommées d'après des systèmes d'exploitation. Nous voyons des images comme Ubuntu, Debian, Fedora, CentOS, etc.
Mon point est: quelles sont ces images, vraiment? En quoi la création d'un conteneur basé sur l'image Debian diffère-t-elle de la création d'une machine virtuelle et de l'installation de Debian?
Je pensais que les conteneurs n'avaient pas de système d'exploitation invité, 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 les exemples que j'ai vus lorsque nous le faisons docker run ubuntu echo "hello world"
, il semble que nous allumons une machine virtuelle avec Ubuntu et la forçons à exécuter la commande echo "hello world"
.
De la même manière, lorsque nous le faisons docker run -it ubuntu /bin/bash
, il semble que nous allumons une machine virtuelle avec Ubuntu et que nous y accédions via une ligne de commande.
Quoi qu'il en soit, quelles sont les images nommées d'après les systèmes d'exploitation? Quelle différence y a-t-il entre exécuter un conteneur avec l'une de ces images et créer une machine virtuelle avec le système d'exploitation invité correspondant?
C’est l’idée que nous partageons simplement le noyau avec le système d’exploitation hôte (et que nous avons par conséquent accès aux ressources matérielles sous-jacentes de la machine, sans avoir à virtualiser le matériel), tout en utilisant les fichiers et les fichiers binaires de chaque système sur les conteneurs afin soutenir n'importe quelle application que nous voulons exécuter?