Контейнер Docker по сравнению с Unikernel

Недавно я развернул крошечное приложение на Haskell с докером, используя "scratch-haskell" в качестве базового образа.

Затем я прочитал об Unikernels и HALVM. И я немного запутался.

Мой док-контейнер имеет размер около 6 МБ. Я думаю, что Unikernel (с тем же приложением на haskell) будет примерно того же размера.

Unikernel работает непосредственно на гипервизоре Xen, тогда как образ Docker (или обычный LXC) работает в обычном дистрибутиве Linux, который работает на голом железе.

Теперь у меня есть "выбор" запуска Linux с несколькими минимальными контейнерами ИЛИ машины Xen с несколькими маленькими Unikernels.

Но каковы преимущества и недостатки этих двух решений? Один безопаснее другого? И есть ли существенные различия в производительности между ними?

3 ответа

Решение

С http://wiki.xenproject.org/wiki/Unikernels

Что предоставляют Unikernels?

Unikernels обычно генерируют единственную среду выполнения, предназначенную для поддержки отдельных приложений, созданных исключительно с этой средой. Как правило, в этой среде отсутствует возможность порождения подпроцессов, выполнения команд оболочки, создания нескольких потоков или процессов ветвления. Вместо этого они обеспечивают чистое воплощение целевого языка исполнения, будь то OCaml, Haskell, Java, Erlang или какая-либо другая среда.

Unikernels против Linux-контейнеров

В последнее время много сделано из преимуществ решений Linux Container по сравнению с традиционными виртуальными машинами. Сторонники контейнеров утверждают, что их легкое использование памяти, быстрое время загрузки и простота упаковки делают контейнеры будущим виртуализации. Хотя эти аспекты контейнеров, безусловно, примечательны, они не означают конец света гипервизора. На самом деле, Unikernels может снизить долгосрочную полезность контейнеров.

Unikernels облегчают те же самые желательные атрибуты, которые описываются сторонниками контейнера, с добавлением абсолютно великолепной истории безопасности, которой могут соответствовать немногие другие решения.

Так что, если вы хотите просто запустить приложение на Haskell, Unikernels могут работать на вас, и они должны иметь даже меньшие накладные расходы, чем docker (и издержки docker очень малы в любом случае), но если вашему приложению потребуется некоторая подготовленная среда, необходимо взаимодействовать с не-Unikernels Докер - лучший выбор. Полагаю, еще рано говорить о том, будут ли Unikernels полезными или широко распространенными или нет, покажет только время.

Unikernals отлично подходят для вещей без гражданства. Когда вы начинаете нуждаться в доступе к диску, вам лучше использовать Docker.

Вот почему все "убийственные" приложения для unikernals являются статически настроенными ядрами, такими как статические веб-страницы или программно определенные сетевые стеки.

Есть много хороших объяснений, вот простой:

Unikernel - это виртуальные машины, но они специализированы и оптимизированы для конкретного приложения.

введите описание изображения здесь

Другие вопросы по тегам