Виртуализация на уровне ОС (контейнеры) для OS X

31

Интересно, почему, кроме старого доброго chroot, для Mac OS X не существует никакой реализации виртуализации на уровне операционной системы (или контейнеров, если вы предпочитаете).

Может ли это быть из-за ограничений ядра или лицензионных ограничений? Или просто никто еще не запустил подобный проект?

Emyl
источник

Ответы:

16

Ключевым элементом, необходимым для контейнеризации, является изоляция сетевых и других сервисов, но не только изоляция, но и виртуализация . 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).

Гаррет д'Амор
источник
1
хороший ответ ... я думаю, что Apple избегает поддержки OSX на сервере, потому что это приведет к краху их рынка MBP, если разработчики iOS смогут запустить дешевый мощный Linux-ноутбук и скомпилировать свои apk на VPS-хостинге
Скотт Стенсланд
6

Вы будете удивлены - контейнеры на самом деле являются поддерживаются - ОС X (и IOS) Песочница эволюционировали , чтобы использовать их. Они были введены в 10.7, и теперь де-факто являются стандартом в 10.10 и iOS 8. В последнем они более строго соблюдаются (прежде всего из-за соображений безопасности приложения), вплоть до того, что приложение может видеть только себя, и предыдущий методы перечисления процессов или ресурсов теперь возвращают результаты на основе контейнера - аналогично пространству имен Linux ipc - но более мощные.

Technologeeks
источник
2
Это песочницы, а не виртуализация ОС (например, контейнеры, зоны, тюрьмы), верно?
smdvlpr
1
Докер тоже не виртуализация. Контейнеры! = ВМ. Docker в основном объединяет множество различных функций ядра: cgroups, chroot, многоуровневые файловые системы, маршрутизацию iptables и т. Д., Чтобы изолировать группу процессов таким образом, чтобы приложение воспринимало себя как систему для себя, в то же время изолируя эти среды для повышения безопасности. и минимизировать способность контейнеров вмешиваться друг в друга и в систему. Контейнеры OSX выполняют некоторые из этих функций, но не все. Это, вероятно, что-то, что может быть реализовано достаточно хитрым кодером.
Шейн
3
@ Technologeeks, можете ли вы указать какой-либо справочный материал по контейнерам / песочницам в OS X?
Кен Уильямс
3

Я думаю, что ответом будет то, что никто этого не хочет. Это кажется выполнимым. Это делается главным образом для одной цели, сохраняя производительность для поставщиков VPS. И действительно, никто не хочет, чтобы экземпляр VPS был основан на OS X.

Шейн Хсу
источник
5
Спасибо за вашу точку зрения. ИМХО, по крайней мере, есть еще один вариант использования контейнеров - создание сред разработки. Кстати, я нашел также это старое пламя: groups.google.com/forum/#!topic/darwin-dev/6-FP9GCsBG4
Эмиль
Увеличение плотности является хорошим побочным эффектом изоляции процессов в их собственных пространствах имен. Контейнеры позволяют более безопасно запускать несколько приложений и лучше контролировать то, что они могут делать на компьютере. Эти преимущества используются iOS для повышения безопасности и предотвращения приложений, например, друг от друга, что имеет мало общего с плотностью VPS. Даже машины с одним обслуживанием могут извлечь выгоду из безопасности. Там нет улучшения плотности, но контейнеры все еще могут быть полезны.
GargantuChet
2

Хотя он использует «старый добрый chroot (8)», я начал проект, который имитирует поведение докера в OS X и NetBSD. Это бесплатно как в речи и доступно на GitHub . Как говорит README, этот проект не связан ни с безопасностью, ни с производством, но поможет непосредственно тестировать полные стеки на вашей рабочей станции.

IMIL
источник
0

docker (насколько я понимаю) только «виртуализирует» (наслоение) файловую систему и сеть (cpu / mem только ограничены), поэтому должна присутствовать одна и та же функция, но только не продаваться одинаково.

МОС
источник