Der Docker-Client, Server, Machine, Images, Hub und Composes sind alles Projekte und Tools, die zusammenkommen, um eine Plattform zu bilden, die ein Ökosystem rund um die Erstellung und Ausführung von sogenannten Containern ermöglicht. Wenn du den Befehl docker run redis ausführst, greift etwas namens Docker CLI auf den Docker Hub zu und lädt eine einzelne Datei namens Image herunter. ![enter image description here]()
Docker Image:
Ein Image ist eine einzelne Datei, die alle Abhängigkeiten und Konfigurationen enthält, die zum Ausführen eines sehr spezifischen Programms erforderlich sind, zum Beispiel redis ist das Image, das du gerade heruntergeladen hast (indem du den Befehl docker run redis ausgeführt hast).
Dies ist eine einzelne Datei, die auf deiner Festplatte gespeichert wird und zu einem bestimmten Zeitpunkt kannst du dieses Image verwenden, um etwas namens Container zu erstellen. ![enter image description here]()
Ein Container ist eine Instanz eines Image und du kannst es als eine Art laufendes Programm mit seinem eigenen isolierten Satz von Hardware-Ressourcen betrachten, es hat also seinen eigenen kleinen Speicherbereich, sein eigenes Netzwerk und seine eigene Festplattenkapazität.
Nun schauen wir uns an, wenn du den folgenden Befehl gibst: sudo docker run hello-world
Der obige Befehl startet den Docker-Client oder Docker CLI. Der Docker CLI ist dafür zuständig, Befehle von dir entgegenzunehmen, sie ein wenig zu verarbeiten und dann die Befehle an etwas namens den Docker-Server zu übermitteln. Der Docker-Server führt dann die eigentliche Arbeit aus, wenn du den Befehl Docker run hello-world ausführst. ![enter image description here]()
Das bedeutet, dass wir einen neuen Container starten wollten, der das Image mit dem Namen hello world verwendet. Das hello world Image enthält ein kleines Programm, dessen einziger Zweck darin besteht, die Nachricht auszudrucken, die du auf dem Terminal siehst.
Als wir diesen Befehl ausführten und er an den Docker-Server übermittelt wurde, erfolgten im Hintergrund schnell eine Reihe von Aktionen. Der Docker-Server sah, dass wir versuchten, einen neuen Container mit einem Image namens hello world zu starten.
Das erste, was der Docker-Server tat, war zu überprüfen, ob er bereits eine lokale Kopie des hello world Images oder dieser Datei auf deiner persönlichen Maschine hatte. Der Docker-Server schaute also in den sogenannten Image-Cache. ![enter image description here]()
Weil du und ich gerade Docker auf unseren persönlichen Computern installiert haben, ist dieser Image-Cache derzeit leer. Wir haben keine Bilder, die zuvor heruntergeladen wurden.
Weil der Image-Cache leer war, entschied sich der Docker-Server, auf einen kostenlosen Dienst namens Docker Hub zuzugreifen. Der Docker Hub ist ein Repository kostenloser öffentlicher Images, die du frei auf deinen persönlichen Computer herunterladen und ausführen kannst. Der Docker-Server griff also auf den Docker Hub zu, lud die hello world Datei herunter und speicherte sie auf deinem Computer im Image-Cache, wo sie später schnell wieder verwendet werden kann, ohne sie erneut vom Docker-Hub herunterladen zu müssen.
Danach wird der Docker-Server sie verwenden, um eine Instanz eines Containers zu erstellen. Ein Container ist eine Instanz eines Image und hat den alleinigen Zweck, ein bestimmtes Programm auszuführen. Der Docker-Server hat also im Grunde genommen diese Image-Datei aus dem Image-Cache geladen, um eine Instanz eines Containers daraus zu erstellen und dann ein einzelnes Programm darin auszuführen. Und das alleinige Ziel dieses einzelnen Programms war es, die Nachricht auszudrucken, die du siehst.
Was ist ein Container: Zunächst einmal ist ein Image eine Blaupause dafür, wie man einen Container erstellt.
Ein Container ist ein Prozess oder eine Gruppe von Prozessen, die speziell zugewiesene Ressourcen haben. Im Diagramm unten haben wir eine laufende Prozessinstanz, die einen Systemaufruf an einen Kernel sendet. Der Kernel prüft dann diesen eingehenden Systemaufruf und leitet ihn auf einen sehr spezifischen Teil der Festplatte, des RAMs, der CPU oder auf was auch immer es benötigt, und ein Teil jeder dieser Ressourcen wird für diesen einzelnen Prozess zur Verfügung gestellt.