Haben Docker-Container einen eigenen Kernel oder nicht?

Haben Docker-Container einen eigenen Kernel oder nicht?

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.

http://boot2docker.io/

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: Bildbeschreibung hier eingeben

Quelle:https://www.docker.com/whatisdocker/

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.)

verwandte Informationen