Un élément clé requis pour la conteneurisation est l'isolement du réseau et d'autres services, mais pas seulement l' isolement mais aussi la virtualisation . Les prisons FreeBSD, les «conteneurs» Linux (ou plus exactement les «espaces de noms») et les zones Solaris / illumos offrent tous un certain degré de «virtualisation» de ces services du système d'exploitation.
Par virtualisation, cela signifie que ces serveurs sont disponibles (ou potentiellement disponibles ) pour les choses à l'intérieur du "conteneur", mais d'une manière qui protège les autres choses sur le même hôte à l'extérieur du conteneur. (Par exemple, un conteneur peut avoir sa propre pile TCP / IP, avec sa propre adresse IP, son cache ARP, etc.)
La virtualisation de système d'exploitation (OS) est la façon dont nous nous référons généralement à ce type de virtualisation "légère", où les processus pensent qu'ils voient un noyau virtuel, mais partagent tous le même noyau réel sous le capot; ce noyau agit comme une sorte d'hyperviseur en garantissant que les frontières conteneur / virtualisation ne sont pas franchies. (Autrement dit, les services du système d'exploitation sont virtualisés.) Comparez cela à la virtualisation matérielle, où ce qui est virtualisé est le matériel - par exemple, les périphériques sont émulés dans le logiciel et présentés à un système d'exploitation fonctionnant dans le conteneur. C'est très puissant, mais assez gourmand en ressources - chaque machine virtuelle doit avoir sa propre copie du système d'exploitation.
MacOS récent prend en charge l'hyperviseur natif via Hypervisor.framework qui permet à des logiciels comme "XHyve" [Un port de FreeBSD BHyve] (Docker sur macOS l'utilise), mais il manque les services nécessaires sous le capot pour virtualiser entièrement les services du système d'exploitation.
En vérité, une grande partie de ce qui est nécessaire est probablement déjà présente, car le travail pour fournir des bacs à sable signifie qu'il existe déjà des points logiques où les appels système sont interceptés et traités différemment pour différentes applications. Cependant, c'est loin de l'histoire complète - la mise en œuvre d'un véritable réseau séparé, IPC et d'autres espaces de noms représente beaucoup de travail.
La meilleure raison pour laquelle Apple n'a pas fait cela est probablement la même raison pour laquelle Apple n'a pas publié de plate-forme adaptée à l'exécution de macOS dans le centre de données depuis de nombreuses années - manque de demande du marché ou manque perçu de demande du marché par la direction d'Apple. Les ordinateurs de bureau et les appareils mobiles sur lesquels ils ont concentré leur attention n'ont tout simplement pas autant besoin d'instances macOS virtuelles. (C'est triste, car j'aimerais avoir une prise en charge virtuelle de macOS - par exemple, exécuter macOS sur des machines virtuelles à Travis CI prend beaucoup de temps par rapport aux conteneurs Linux).