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?