Ein Schlüsselelement für die Containerisierung ist die Isolierung von Netzwerken und anderen Diensten, aber nicht nur die Isolierung, sondern auch die Virtualisierung . FreeBSD-Jails, Linux- "Container" (oder genauer gesagt "Namespaces") und Solaris / Illumos-Zonen bieten alle einen gewissen Grad an "Virtualisierung" dieser Betriebssystemdienste.
Durch die Virtualisierung bedeutet dies, dass diese Server für Dinge innerhalb des "Containers" verfügbar (oder potenziell verfügbar ) sind, aber auf eine Weise, die die anderen Dinge auf demselben Host außerhalb des Containers schützt. (Beispielsweise kann ein Container einen eigenen TCP / IP-Stack mit eigener IP-Adresse, ARP-Cache usw. haben.)
Unter Betriebssystemvirtualisierung versteht man im Allgemeinen diese Art der "leichten" Virtualisierung, bei der Prozesse den Eindruck haben, dass sie einen virtuellen Kernel sehen, sich aber alle denselben realen Kernel unter der Haube teilen. Dieser Kernel fungiert als eine Art Hypervisor, der sicherstellt, dass die Container- / Virtualisierungsgrenzen nicht überschritten werden. (Anders ausgedrückt, die Betriebssystemdienste werden virtualisiert.) Vergleichen Sie dies mit der Hardwarevirtualisierung, bei der die Hardware virtualisiert wird - z. B. werden Geräte in Software emuliert und einem im Container ausgeführten Betriebssystem präsentiert. Dies ist sehr leistungsfähig, aber sehr ressourcenintensiv. Jede virtuelle Maschine muss über eine eigene Kopie des Betriebssystems verfügen.
Neuere Versionen von macOS bieten native Hypervisor-Unterstützung über Hypervisor.framework, mit der Software wie "XHyve" (ein Port von FreeBSDs BHyve) (Docker unter macOS verwendet dies) unterstützt wird. Es fehlen jedoch die erforderlichen Dienste, um die Betriebssystemdienste vollständig zu virtualisieren.
In der Tat ist wahrscheinlich bereits viel von dem vorhanden, was benötigt wird, da die Arbeit zur Bereitstellung von Sandkästen bedeutet, dass es bereits logische Punkte gibt, an denen Systemaufrufe für verschiedene Anwendungen unterschiedlich abgefangen und behandelt werden. Das ist jedoch noch lange nicht alles - die Implementierung eines echten separaten Netzwerks, IPCs und anderer Namespaces ist ziemlich aufwändig.
Der beste Grund, warum Apple dies nicht getan hat, ist wahrscheinlich derselbe Grund, warum Apple seit vielen Jahren keine geeignete Plattform für den Betrieb von macOS im Rechenzentrum herausgebracht hat - mangelnde Marktnachfrage oder vermeintlich mangelnde Marktnachfrage durch die Apple-Führung. Der Desktop- und Mobile-Fokus, auf den sie ihre Aufmerksamkeit gerichtet haben, erfordert einfach nicht so viele virtuelle macOS-Instanzen. (Das ist traurig, weil ich gerne virtuelle macOS-Unterstützung hätte - zum Beispiel ist das Ausführen von macOS auf VMs bei Travis CI im Vergleich zu Linux-Containern sehr zeitaufwendig.)
Sie würden überrascht sein - Container tatsächlich werden unterstützt - die OS X (und iOS) Sandbox hat sich weiterentwickelt , sie zu nutzen. Sie wurden in 10.7 eingeführt und sind jetzt in 10.10 und iOS 8 de facto Standard. In letzterem Fall werden sie strenger durchgesetzt (hauptsächlich aus Gründen der Anwendungssicherheit), bis zu dem Punkt, an dem eine App nur sich selbst sehen kann, und in früheren Versionen Methoden zum Auflisten von Prozessen oder Ressourcen geben jetzt container-basierte Ergebnisse zurück - ähnlich dem Linux-IPC-Namespace - aber leistungsfähiger.
quelle
Ich würde mir vorstellen, dass die Antwort so ist, dass niemand es wirklich will. Es scheint machbar zu sein. Diese Aufgaben werden hauptsächlich zu einem Zweck ausgeführt, um die Leistung der VPS-Anbieter zu erhalten. Und wirklich niemand möchte, dass eine VPS-Instanz auf OS X basiert.
quelle
Während es "good old chroot (8)" verwendet, habe ich ein Projekt gestartet, das das Verhalten von Docker unter OS X und NetBSD nachahmt. Es ist redefrei und auf GitHub verfügbar . Wie in der README-Datei angegeben, geht es bei diesem Projekt weder um Sicherheit noch um Produktion, sondern um das Testen vollständiger Stapel auf Ihrer Workstation.
quelle
docker (so wie ich es verstehe) "virtualisiert" nur das Dateisystem und das Netzwerk (CPU / Mem sind nur begrenzt), daher sollte dasselbe Feature vorhanden sein, aber nicht auf die gleiche Weise vermarktet werden.
quelle