2015-09-29 3 views
13

Wie kann Docker auf einem Debian-Host laufen, vielleicht einem OpenSUSE in einem Container? Es verwendet einen anderen Kernel mit getrennten Modulen. Auch ältere Debian-Versionen haben ältere Kernel verwendet, also wie kann es auf einer Kernel-Version 3.10+ laufen? Ältere Kernel haben nur ältere eingebaute Funktionen, wie kann eine alte Distro neue Funktionen verwalten? Was ist "der Trick" drin?Wie kann Docker Distributionen mit verschiedenen Kernel ausführen?

Antwort

17

Wie kann

vielleicht ein OpenSUSE in einem Container auf einer Debian-Host ausgeführt Docker Da der Kernel das gleiche ist und den Docker Motor läuft all diese Container Bilder unterstützen: der Host-Kernel sein sollte 3,10 oder mehr, aber seine list of system calls ist ziemlich stabil.

Siehe "Architecting Containers: Why Understanding User Space vs. Kernel Space Matters":

  1. Anwendungen enthalten Business-Logik, sondern verlassen sich auf Systemaufrufe.
  2. Sobald eine Anwendung kompiliert wurde, wird die Menge der Systemaufrufe, die eine Anwendung verwendet (d. H. Auf sie zurückgreift), in die Binärdatei eingebettet (in höheren Sprachen ist dies der Interpreter oder JVM).
  3. Containers abstrahieren nicht die Notwendigkeit, dass der Benutzerbereich und der Kernelraum einen gemeinsamen Satz von Systemaufrufen gemeinsam nutzen.
  4. In einer Containerwelt wird dieser Benutzerbereich gebündelt und an verschiedene Hosts verteilt, von Laptops bis zu Produktionsservern.
  5. In den kommenden Jahren wird dies zu Herausforderungen führen.

https://rhelblog.files.wordpress.com/2015/07/user-space-vs-kernel-space-simple-container.png?w=584&h=231

Von Zeit neue Systemaufrufe Zeit hinzugefügt werden, und alte Systemaufrufe sind veraltet; Dies sollte berücksichtigt werden, wenn Sie über den Lebenszyklus Ihrer Containerinfrastruktur und die darin ausgeführten Anwendungen nachdenken.

Siehe auch "Why kernel version doesn't match Ubuntu version in a Docker container?":

Es gibt keinen Kern in einem Container. Selbst wenn Sie einen Kernel installieren, wird er beim Start des Containers nicht geladen. Der eigentliche Zweck eines Containers besteht darin, Prozesse zu isolieren, ohne einen neuen Kernel ausführen zu müssen.

+0

Ich denke, dass das oben genannte die Frage nicht vollständig beantwortet. Obwohl ich völlig übereinstimme, dass die referenzierten Links eine gute Erklärung dafür liefern, warum die Container keinen eigenen Kernel erzeugen, möchten wir vielleicht einen Container erzeugen, der möglicherweise auf einer bestimmten Kernel-Version beruht. Ich denke, Docker selbst wenn auf einem Linux-Host ausgeführt wird, könnte einen Modus haben, in dem Sie die Kernel-Version auswählen können. – user725408