Ich sehe, dass viele Docker-Images im Docker-Repository auf Ubuntu-Basis erstellt werden.
Was bedeutet das? Bündelt jeder Container eine abgespeckte Version des Linux-Kernels?
Sitzen Container auf ihren eigenen Kerneln? Aber ich dachte, Container teilen sich den Kernel des Hosts (in einigen Fällen ist das boot2docker, ein benutzerdefinierter Tiny Core Linux-Build, und in anderen etwas wie CoreOS).
BEARBEITEN:Um die Frage etwas zu klären. Ja, ich weiß, dass Docker ein Prozesscontainer und keine vollständige VM ist. Aber da es „Ubuntu“-Container im offiziellen Docker-Hub-Register und in anderen Betriebssystemen wie CentOS gibt, was bedeutet es, Ubuntu in einem Container auszuführen?
Antwort:Ahh, mir ist gerade eingefallen. Es sind die Ubuntu-Userland-Prozesse, die apt-get und andere Konfigurationsprozesse für einen bestimmten Ubuntu-Build enthalten. Ähnliches gilt für CentOS. Docker ist kein einzelner Prozess, sondern nur ein einzelner Eintrag. Für diese Distributionen ist der Einstiegspunkt also eine Art Init-Prozess, der andere Prozesse erzeugt.
Antwort1
Docker verwendet den Kernel des Host-Betriebssystems. Im Container gibt es keinen benutzerdefinierten oder zusätzlichen Kernel. Alle Container, die auf einer Maschine laufen, teilen sich diesen „Host“-Kernel.
Wikipedia sagthttp://en.wikipedia.org/wiki/Docker_(software)Das
Docker verwendet Ressourcenisolationsfunktionen des Linux-Kernels wie Cgroups und Kernel-Namespaces, um die Ausführung unabhängiger „Container“ innerhalb einer einzigen Linux-Instanz zu ermöglichen und so den Aufwand beim Starten virtueller Maschinen zu vermeiden.
cgroups, Namespaces und LXC sind Funktionen des Linux-Kernels zum Isolieren von Prozessgruppen; es gibt immer noch einen einzelnen Kernel, einen einzelnen Scheduler und eine Instanz des Kernel-Speichermanagers.
Boot2docker und CoreOS sind lediglich leichte Linux-Distributionen mit einem Host-Kernel; sie können zum Laden von Docker-Containern verwendet werden.
boot2docker ist eine leichte Linux-Distribution auf Basis von Tiny Core Linux, die speziell für die Ausführung von Docker-Containern entwickelt wurde. Sie läuft vollständig aus dem RAM, wiegt ca. 27 MB und bootet in ca. 5 s (Ihre Abweichung ist unterschiedlich).
http://en.wikipedia.org/wiki/CoreOS
Ein einzelner Steuerhost (CoreOS-Instanz) führt mehrere isolierte Linux-Systeme (Container) aus und verwendet Docker als zusätzliche Abstraktionsebene und Schnittstelle[14] zu den zugrunde liegenden Virtualisierungsfunktionen auf Betriebssystemebene des Linux-Kernels. ... Dieser Ansatz basiert auf der Cgroups-Funktionalität des Linux-Kernels, die eine Namespace-Isolierung und die Möglichkeit bietet, die Ressourcennutzung (CPU, Speicher, Festplatten-E/A usw.) für die Prozesssammlungen zu begrenzen, zu erfassen und zu isolieren.
Antwort2
In fast allen Fällen wird der Kernel des Host-Betriebssystems gemeinsam genutzt. Um einen anderen Kernel auszuführen, müssen Sie Virtualisierung verwenden. Dies ist selten und wird nur verwendet, wenn es aufgrund von Leistungseinbußen unbedingt erforderlich ist.
„Der Docker Engine-Container umfasst nur die Anwendung und ihre Abhängigkeiten. Er läuft als isolierter Prozess im Benutzerbereich auf dem Host-Betriebssystem und teilt den Kernel mit anderen Containern. Somit profitiert er von den Vorteilen der Ressourcenisolierung und -zuweisung von VMs, ist aber viel portabler und effizienter.“
Dies könnte helfen, die Funktionsweise zu erklären:
Antwort3
Alle Docker-Container verwenden den Host-Kernel.
Dies würde auch bedeuten, dass eine gewisse Inkompatibilität zwischen einem Host-Kernel und der Container-Distribution Probleme verursachen könnte. Theoretisch. Wenn beispielsweise eine containerisierte Software eine Kernel-Funktion verwenden möchte, die nicht in den Host-Kernel kompiliert wurde, würde dies nicht funktionieren.
In der Praxis passiert das nicht. Die Hauptproblemquelle der Docker-Container sind die (oft unerklärlichen) Einschränkungen des Dockers selbst und nicht eine Inkompatibilität zwischen Host- und Gast-Kernel.
(P.S.: Das liegt daran, dass praktisch alle Linux-Distributionen mit jedem Linux-Kernel funktionieren.)