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


31

Цікаво, чому, крім старого хорошого chroot, для Mac OS X не існує жодної реалізації віртуалізації на рівні операційної системи (або контейнерів, якщо ви віддаєте перевагу).

Це може бути пов’язано з обмеженнями ядра чи ліцензійними обмеженнями? Або просто ще ніхто не запускав подібний проект?

Відповіді:


16

Ключовим елементом, необхідним для контейнеризації, є ізоляція мереж та інших послуг, але не лише ізоляція, а й віртуалізація . FreeBSD Jails, "контейнери" Linux (або, вірніше, "простори імен"), і зони Solaris / lightos, все це пропонує певну ступінь "віртуалізації" цих служб операційної системи.

За допомогою віртуалізації це означає, що ці сервери доступні (або потенційно доступні ) для речей всередині "контейнера", але таким чином, що захищає інші речі на тому ж хості поза контейнером. (Наприклад, контейнер може мати власний стек TCP / IP із власною IP-адресою, кешем ARP тощо)

Віртуалізація ОС (операційної системи) - це, як правило, ми посилаємось на цей тип "легкої" віртуалізації, де процеси думають, що вони бачать віртуальне ядро, але всі вони мають однакове реальне ядро ​​під кришкою; що ядро ​​діє як своєрідний гіпервізор, забезпечуючи, щоб межі контейнера / віртуалізації не були перекреслені. (По-іншому, служби ОС віртуалізовані.) Порівняйте це з віртуалізацією обладнання, де віртуалізується апаратне забезпечення - наприклад, пристрої емулюються програмним забезпеченням та подаються в операційну систему, що працює в контейнері. Це дуже потужно, але досить ресурсомістко - кожна віртуальна машина повинна мати свою копію операційної системи.

Останні macOS мають вбудовану підтримку гіпервізора через Hypervisor.framework, який дозволяє програмне забезпечення типу "XHyve" [Порт FreeBSD's BHyve] (докер на macOS використовує це), але не має необхідних сервісів під капотом, щоб повністю віртуалізувати послуги операційної системи.

По правді кажучи, багато того, що потрібно, мабуть, вже є, оскільки робота зі створення пісочниць означає, що вже є логічні пункти, де системні виклики перехоплюються та обробляються по-різному для різних програм. Однак це далеко не повна історія - реалізація справжньої окремої мережі, IPC та інших просторів імен - це дуже багато роботи.

Найкраща причина, чому Apple цього не зробила, ймовірно, та сама причина, що Apple протягом багатьох років не випустила платформу, придатну для роботи macOS в центрі обробки даних - відсутність попиту на ринку або сприйняття відсутності попиту на ринку з боку керівництва Apple. Настільний і мобільний фокус, де вони зосередили свою увагу, просто не потребують таких віртуальних примірників macOS. (Це сумно, тому що я хотів би мати підтримку віртуальних macOS - наприклад, запуск macOS на VM в Travis CI дійсно забирає багато часу в порівнянні з контейнерами Linux).


1
хороша відповідь ... я здогадуюсь, що Apple уникає підтримки OSX на сервері, оскільки це зірве їх ринок MBP, якщо розробники iOS зможуть запустити дешевий потужний ноутбук Linux і скласти свій apk на хостинг-провайдері VPS
Scott Stensland

6

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


2
Це, однак, пісочниці, а не віртуалізація ОС (наприклад, контейнери, зони, тюрми), правда?
smdvlpr

1
Докер також не є віртуалізацією. Контейнери! = VM. Docker в основному коралює купу різних функцій ядра, груп, chroot, шаруватих файлових систем, маршрутизації iptables тощо, щоб виділити групу процесів, щоб програма бачила себе як система, яка займається собою, а виділяючи ці середовища для підвищення безпеки і мінімізувати здатність контейнерів втручатися один у одного та систему. Контейнери OSX досягають певної функції, але не всі. Це, мабуть, щось, що могло б реалізувати досить хитрий кодер.
Шейне

3
@Technologeeks, чи можете ви вказати на будь-який довідковий матеріал на контейнерах / пісочницях в ОС X?
Кен Вільямс

3

Я б міг би відповісти такою, що її ніхто не хоче. Це здається виконати. Ці речі робляться в основному з однією метою, економлячи продуктивність для постачальників VPS. І насправді ніхто не хоче, щоб екземпляр VPS був на базі ОС X.


5
Дякую за вашу думку. IMHO існує принаймні інший випадок використання контейнерів, тобто створення середовищ розробки. До речі, я знайшов і це старе полум'я: groups.google.com/forum/#!topic/darwin-dev/6-FP9GCsBG4
Еміль

Підвищена щільність є приємним побічним ефектом виділення процесів у власні простори імен. Контейнери дозволяють вам більш безпечно запускати кілька додатків і мати більший контроль над тим, що вони можуть робити на машині. Ці переваги використовуються iOS для підвищення безпеки та не дозволяють додаткам наступати один на одного, наприклад, що має мало спільного з щільністю VPS. Навіть однообслуговувальні машини можуть скористатися безпекою. Там немає поліпшення щільності, але контейнери все ще можуть бути корисними.
GargantuChet

2

Хоча він використовує "старий добрий chroot (8)", я розпочав проект, який, як правило, імітує поведінку докера в OS X та NetBSD. Це безкоштовно в мовленні і доступне на GitHub . Як говорить README, цей проект не стосується ні безпеки, ні виробництва, але допоможе протестувати повний стек на вашому робочому місці.


0

docker (наскільки я розумію) це лише "віртуалізація" (розшарування) файлової системи та мережі (процесор / пам'ять обмежений), тому всі ті ж функції повинні бути там, але просто не продаватися однаково.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.