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. Soweit ich verstanden habe, ist ein Container nur eine Sandbox, in der ein ganzes isoliertes Dateisystem ausgeführt wird.
Ich habe auch gelesen, dass in einem Container kein Gastbetriebssystem installiert ist. Stattdessen stützt es sich auf den zugrunde liegenden Betriebssystemkernel.
All das ist in Ordnung. Was mich verwirrt, ist, 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 unterscheidet es sich, 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, basieren wir sie auf einem Image, das nach einem Betriebssystem benannt ist.
Auch in Beispielen habe ich gesehen, wann wir es tun docker run ubuntu echo "hello world"
, es scheint, dass wir eine VM mit Ubuntu hochfahren und sie den Befehl ausführen lassen echo "hello world"
.
Auf die gleiche Weise, wenn wir es tun docker run -it ubuntu /bin/bash
, es scheint, dass wir eine VM mit Ubuntu hochfahren und über die Befehlszeile darauf zugreifen.
Wie auch immer, worum geht es bei diesen Bildern, die nach Betriebssystemen benannt sind? Wie anders ist es, einen Container mit einem dieser Images auszuführen und eine VM mit dem entsprechenden Gastbetriebssystem hochzufahren?
Ist die Idee, dass wir nur teilen Sie den Kernel mit dem Host-Betriebssystem (und folglich haben wir Zugriff auf die zugrunde liegenden Hardwareressourcen der Maschine, ohne dass Hardware virtualisiert werden muss), verwenden Sie jedoch weiterhin die Dateien und Binärdateien jedes anderen Systems auf den Containern, um die Anwendung zu unterstützen, die wir ausführen möchten?