Ключевым элементом, необходимым для контейнеризации, является изоляция сетевых и других сервисов, но не только изоляция, но и виртуализация . 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).
Вы будете удивлены - контейнеры на самом деле являются поддерживаются - ОС X (и IOS) Песочница эволюционировали , чтобы использовать их. Они были введены в 10.7, и теперь де-факто являются стандартом в 10.10 и iOS 8. В последнем они более строго соблюдаются (прежде всего из-за соображений безопасности приложения), вплоть до того, что приложение может видеть только себя, и предыдущий методы перечисления процессов или ресурсов теперь возвращают результаты на основе контейнера - аналогично пространству имен Linux ipc - но более мощные.
источник
Я думаю, что ответом будет то, что никто этого не хочет. Это кажется выполнимым. Это делается главным образом для одной цели, сохраняя производительность для поставщиков VPS. И действительно, никто не хочет, чтобы экземпляр VPS был основан на OS X.
источник
Хотя он использует «старый добрый chroot (8)», я начал проект, который имитирует поведение докера в OS X и NetBSD. Это бесплатно как в речи и доступно на GitHub . Как говорит README, этот проект не связан ни с безопасностью, ни с производством, но поможет непосредственно тестировать полные стеки на вашей рабочей станции.
источник
docker (насколько я понимаю) только «виртуализирует» (наслоение) файловую систему и сеть (cpu / mem только ограничены), поэтому должна присутствовать одна и та же функция, но только не продаваться одинаково.
источник