Unterschied zwischen Chroot und Docker


14

Ich verstehe den Unterschied zwischen Docker und Chroot nicht. Ja, es ist schön in Bezug auf die Verpackung der Registrierung. Aber irgendwie habe ich das Gefühl, dass es nur mit zusätzlichen Schnickschnack ist.

Ich weiß, dass mir etwas fehlt. Es wäre großartig zu wissen, wie unterschiedlich sie sind und wie wichtig Docker sind, wenn Chroot etwas Ähnliches tun könnte.

Ich konnte diesen Chroot Vs Docker auch nicht klar genug finden.


Ja, Docker tut nichts, was der Kernel noch nicht für Sie erledigt. Es verpackt es einfach in ein mehr oder weniger kohärentes und ziemlich einfach zu bedienendes Tool. Sie könnten Ihren eigenen Docker erstellen, wenn Sie sich die Mühe machen könnten, Chroot, Namespaces, Quoten, NAT und alles andere selbst zu erledigen.
Gaius

Antworten:


8

Nun, die zusätzlichen Schnickschnack werden als Prozessisolation bezeichnet. Ein Container erhält einen eigenen Namespace vom Host-Kernel. Das bedeutet, dass das Programm im Container nicht versuchen kann, den Kernel-Speicher zu lesen oder mehr RAM als zulässig zu verbrauchen.

Außerdem werden Netzwerkstapel isoliert, sodass beispielsweise zwei Prozesse Port 8080 überwachen können. Sie müssen das Routing auf Hostebene abwickeln. Hier gibt es keine Magie, aber dies ermöglicht die Abwicklung des Routings an einem Ort und vermeidet Änderungen an der Prozesskonfiguration Hören Sie sich einen freien Port an.

Zweitens wird eine Chroot immer noch gelesen / geschrieben, jede Änderung ist dauerhaft, ein Docker-Container, der verwendet aufswird, startet jedes Mal, wenn Sie den Container starten, aus einem sauberen Dateisystem (Änderungen werden beibehalten, wenn Sie ihn IIRC stoppen / starten).

Während ein Container als process namespace+ betrachtet werden kann chroot, ist die Realität etwas komplexer.


Beachten Sie, dass dies aufsnicht mehr standardmäßig verwendet wird. Jetzt ist esoverlay2
Vitalii Vitrenko

Stimmt, aber ich denke, es gibt im Moment mehr Lehrmaterialien, die auf aufs als auf overlay2 verweisen :)
Tensibai

Ein normaler Prozess kann keinen Speicher lesen, den er auch nicht lesen soll. Wenn Sie sich aus Sicherheitsgründen auf Docker verlassen, machen Sie es falsch ...
Gaius

@Gaius, du liest mich falsch, ich versuche nur, dem OP Suchhinweise zu geben ... Das Hinzufügen von Docker in einer Lieferpipeline mit all der Freiheit, die es Entwicklern gibt, was sie darin verwenden, ist absolut kein Sicherheitspunkt. Nichtsdestotrotz schützen Namespaces von Natur aus vor einer Reihe von Stapelüberläufen und Pufferüberläufen.
Tensibai

5

Ja, es steckt absolut mehr dahinter als chrootder Punkt, dass sie wenig bis gar nichts gemeinsam haben.

  • Ein standardisiertes Skriptdateiformat mit Semantik für die jeweilige Aufgabe
  • Bilder (einschließlich anonymer Zwischenbilder), Zwischenspeichern, Benennen, Herunterladen usw. einschließlich leistungsstarker Verwaltung ( docker image prune...)
  • Container (einschließlich ihrer eigenen temporären Dateisysteme, Benennung, Einbindung docker execin sie usw.)
  • Prozessmanagement ( docker container ...)
  • Vernetzung mit nur einer einfachen Option, einschließlich Intra-Docker-Container-Vernetzung usw.
  • Volumes (einschließlich speziell verwalteter Volumes)
  • docker-compose oder schwärmen als Low-Profile-Upgrades auf viel mehr.
  • Der große Zoo anderer Lösungen, die auf Docker-Containern (OpenShift usw.) basieren.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.