Ключевым элементом, необходимым для контейнеризации, является изоляция сетевых и других сервисов, но не только изоляция, но и виртуализация . FreeBSD Jails, Linux-контейнеры (или, точнее, «пространства имен») и зоны Solaris / illumos предлагают некоторую степень «виртуализации» этих служб операционной системы.
Под виртуализацией это означает, что эти серверы доступны (или потенциально доступны ) для вещей внутри «контейнера», но таким образом, чтобы защитить другие вещи на том же хосте за пределами контейнера. (Например, контейнер может иметь свой собственный стек TCP / IP с собственным IP-адресом, ARP-кешем и т. Д.)
Виртуализация ОС (операционной системы) - это то, как мы обычно называем этот тип «облегченной» виртуализации, когда процессы думают, что видят виртуальное ядро, но все они совместно используют одно и то же реальное ядро; это ядро действует как своего рода гипервизор, гарантируя, что границы контейнера / виртуализации не пересекаются. (Другими словами, службы ОС виртуализированы.) Сравните это с виртуализацией оборудования, где виртуализируется оборудование - например, устройства эмулируются программно и представляются операционной системе, работающей в контейнере. Это очень мощный, но достаточно ресурсоемкий - у каждой виртуальной машины должна быть своя копия операционной системы.
Последние macOS имеют встроенную поддержку гипервизора через Hypervisor.framework, которая позволяет использовать программное обеспечение, такое как «XHyve» [порт BHyve FreeBSD] (используется докер на macOS), но не имеет необходимых служб для полной виртуализации служб операционной системы.
По правде говоря, многое из того, что необходимо, вероятно, уже присутствует, поскольку работа по созданию песочниц означает, что уже есть логические точки, где системные вызовы перехватываются и обрабатываются по-разному для разных приложений. Тем не менее, это далеко не полная история - реализация настоящей отдельной сети, IPC и других пространств имен - это довольно много работы.
Лучшая причина, по которой Apple этого не сделала, - это, вероятно, та же причина, по которой Apple много лет не выпускала платформу, подходящую для работы macOS в центре обработки данных - отсутствие рыночного спроса или предполагаемое отсутствие рыночного спроса со стороны руководства Apple. Настольные и мобильные устройства, на которых они сосредоточили свое внимание, просто не нуждаются в виртуальных экземплярах macOS. (Это печально, потому что я хотел бы иметь поддержку виртуальных macOS - например, запуск macOS на виртуальных машинах в Travis CI действительно занимает больше времени по сравнению с контейнерами Linux).