Ich habe gerade angefangen, Docker zu studieren und es gibt etwas, das für mich ziemlich verwirrend ist. Wie ich auf der Docker-Website gelesen habe, unterscheidet sich ein Container von einer virtuellen Maschine. Wie ich verstanden habe, ist ein Container nur eine Sandbox, in der ein gesamtes isoliertes Dateisystem ausgeführt wird.
Ich habe auch gelesen, dass auf einem Container kein Gastbetriebssystem installiert ist. Stattdessen stützt es sich auf den zugrunde liegenden Betriebssystemkern.
All das ist in Ordnung. Ich bin verwirrt, dass es Docker-Images gibt, die nach Betriebssystemen benannt sind. Wir sehen Bilder wie Ubuntu, Debian, Fedora, CentOS und so weiter.
Mein Punkt ist: Was sind diese Bilder wirklich? Wie ist es anders, einen Container basierend auf dem Debian-Image zu erstellen als eine virtuelle Maschine zu erstellen und Debian zu installieren?
Ich dachte, Container hätten kein Gastbetriebssystem installiert, aber wenn wir Images erstellen, stützen wir sie auf ein Image, das nach einem Betriebssystem benannt ist.
In den Beispielen, die wir gesehen haben docker run ubuntu echo "hello world"
, scheint es, als würden wir eine VM mit Ubuntu hochfahren und den Befehl ausführen lassen echo "hello world"
.
Genauso docker run -it ubuntu /bin/bash
scheint es , als würden wir eine VM mit Ubuntu hochfahren und über die Befehlszeile darauf zugreifen.
Worum geht es bei diesen Images, die nach Betriebssystemen benannt sind? Wie unterschiedlich ist es, einen Container mit einem dieser Images auszuführen und eine VM mit dem entsprechenden Gastbetriebssystem hochzufahren?
Ist die Idee, dass wir nur den Kernel mit dem Host-Betriebssystem teilen (und folglich Zugriff auf die zugrunde liegenden Maschinenhardwareressourcen haben, ohne dass Hardware virtualisiert werden muss), aber trotzdem die Dateien und Binärdateien jedes unterschiedlichen Systems auf den Containern in der richtigen Reihenfolge verwenden zur Unterstützung aller Anwendungen, die wir ausführen möchten?
quelle
Antworten:
Da alle Linux-Distributionen den gleichen Linux-Kernel ausführen (yup, es ist ein bisschen vereinfacht) und sich nur in der Userland-Software unterscheiden, ist es ziemlich einfach, eine andere Distributionsumgebung zu simulieren - indem Sie einfach diese Userland-Software installieren und so tun, als wäre es eine andere Distribution. Wenn Sie CentOS-Container in Ubuntu OS installieren, erhalten Sie das Userland von CentOS, während derselbe Kernel ausgeführt wird, nicht einmal eine andere Kernelinstanz.
So leichtgewichtige Virtualisierung ist wie im gleichen O isoliert Abteile. Au contraire echte Virtualisierung hat ein anderes vollwertiges Betriebssystem im Host-Betriebssystem. Deshalb kann docker unter Linux weder FreeBSD noch Windows ausführen.
Wenn das einfacher wäre, können Sie sich vorstellen, dass Docker eine sehr ausgefeilte und fortschrittliche Chroot-Umgebung ist.
quelle
Container laufen auf einem Kernel. Mit anderen Worten, alle Container haben einen einzelnen Kernel (Host-Betriebssystem). Andererseits haben Hypervisoren mehrere Kernel. Jede virtuelle Maschine läuft auf einem anderen Kernel.
Und "Docker Run Ubuntu" ist wie das Erstellen einer Chroot-Umgebung.
quelle