Альтернативы Docker: обзор контейнерной платформы

С контейнерной платформой Docker виртуализация на уровне операционной системы (Operating-system-level virtualization) возвращается. Всего за несколько лет команде разработчиков удалось возродить контейнерную технологию на основе базовой функциональности. Docker зарекомендовал себя за пределами вселенной Linux как ресурсосберегающая альтернатива виртуализации с поддержкой гипервизора посредством аппаратной эмуляции.

Благодаря медиальному эху и постоянно растущей экосистеме, Docker стал технологическим лидером рынка в области виртуализации на основе контейнеров. Однако бережливая контейнерная платформа — далеко не единственный программный проект, в котором методы виртуализации разрабатываются на уровне операционной системы.

Какие альтернативы Docker существуют? И чем они отличаются от того, что предлагает лидер рынка?

Контейнерные технологии в Linux

Когда речь идет о Unix-подобных системах, таких как Linux, виртуализация на уровне операционной системы обычно основывается на дальнейшей реализации встроенных механизмов Chroot. Кроме того, контейнерные проекты, такие как Docker, rkt, LXC, LXD, Linux VServer, OpenVZ / Virtuozzo и runC, используют встроенные в ядро Linux функции управления ресурсами для реализации изолированных сред выполнения приложений или всей операционной системы.

Факт

Chroot означает «изменить корень», команда командной строки, доступная в Unix-подобных операционных системах, которая изменяет корневой каталог для запущенного процесса и его дочерних процессов. Приложение, запущенное в такой измененной среде (Chroot jail), не может получить доступ к другим файлам за пределами выбранного каталога. Поскольку Chroot не разрабатывался как средство безопасности, эту изоляцию относительно легко преодолеть.

Docker

Если вы работаете с программными контейнерами, то рано или поздно вы столкнетесь с названием Docker. Проект с открытым исходным кодом от одноименной компании Docker Inc. сумел за несколько лет сделать контейнерную технологию горячей темой в области разработки программного обеспечения, DevOps и непрерывной доставки.

Docker полагается на базовые функции ядра Linux для защиты процессов друг от друга и позволяет параллельно запускать приложения в изолированных контейнерах с помощью самостоятельно разработанной среды выполнения runC — без ресурсоемких гостевых систем. Это делает бережливую контейнерную платформу привлекательной альтернативой виртуализации на базе гипервизора. Подробное описание платформы Docker и ее основных компонентов можно найти в нашем учебнике по Docker для начинающих.

Контейнерная платформа Docker распространяется в виде бесплатной версии Community Edition (CE), но есть и платная версия Enterprise (EE). Платформа обеспечивает поддержку различных дистрибутивов Linux. Кроме того, Docker CE доступен в качестве нативного приложения для Windows и MacOS с момента выпуска версии 1.12. Docker для Mac полагается на гладкий гипервизор xhyve, но для создания среды выполнения для движка Docker и специфических для ядра Linux функций для демона Docker на Windows доступен гипервизор Hyper-V.

С сентября 2016 года Docker EE также доступен нативно для Windows Server 2016. Тесно сотрудничая с командой разработчиков Docker, Microsoft установила несколько расширений в ядро Windows, которые позволяют Docker запускать процессы как контейнеры в песочнице без абстрагирующего гипервизора. Microsoft сделала исходный код специально разработанного драйвера hcsshim доступным для сообщества разработчиков с открытым исходным кодом через GitHub.

В следующей таблице представлены ключевые особенности платформы Docker:

Системные требования и поддерживаемые системы
Требуемое ядро Linux Linux версии 3.10 или выше
Поддерживаемые дистрибутивы Linux Docker Community Edition (CE): Ubuntu, Debian, CentOS и Fedora, Docker Enterprise Edition (EE): Ubuntu, Red Hat Enterprise Linux, CentOS, Oracle Linux и SUSE Linux Enterprise Server.
Другие платформы Docker Community Edition (CE): Microsoft Windows 10 (Pro, Enterprise или Education с 64 бит), macOS (Yosemite 10.10.3 или выше), Microsoft Azure, Amazon Web Services (AWS), Docker Enterprise Edition (EE): Microsoft Windows Server 2016, Microsoft Windows 10 (Pro, Enterprise или Education с 64 бит), Microsoft Azure, Amazon Web Services (AWS).
Формат контейнера Контейнер Docker
Лицензия Apache 2.0
Язык программирования Go

Вокруг основного проекта Docker со временем сформировалась оживленная экосистема. По данным разработчика, движок Docker задействован в более чем 100 000 сторонних проектов.

Основным критерием реализации контейнерной технологии Linux в рамках проекта Docker является степень изоляции отдельных процессов на общей хост-системе. При запуске контейнеров приложений Docker использует встроенные функции ядра Linux, такие как cgroups и namespaces. Однако эти инкапсулированные контейнеры не имеют одинакового размера, что имеет место при полной виртуализации на базе виртуальных машин. Для обеспечения безопасной работы контейнеров приложений на производительных системах новые версии контейнерной платформы поддерживают расширения ядра, такие как AppArmor, SELinux, Seccomp и GRSEC, которые могут дополнительно экранировать изолированные процессы.

Преимущества Недостатки
✔ Docker поддерживает различные операционные системы и облачные платформы ✘ Движок Docker поддерживает только свой собственный формат контейнеров
✔ Платформа Docker предлагает встроенные инструменты оркестровки и управления кластерами Swarm и Compose ✘ Программное обеспечение доступно в виде монолитного программного файла, содержащего все функции
✔ Docker hub предоставляет пользователям центральный реестр для ресурсов Docker ✘ Контейнеры Docker запускают только отдельные процессы. Он не поддерживает работу полносистемных контейнеров
✔ Постоянно развивающаяся экосистема предоставляет пользователям различные инструменты докинга, плагины и компоненты инфраструктуры.  
Факт

Изначально технология контейнеров была разработана с целью запуска нескольких виртуальных операционных систем в изолированных средах на одном ядре. Такие контейнеры известны как полносистемные. Контейнерная платформа Docker, с другой стороны, фокусируется на так называемых контейнерах приложений, в которых каждое приложение запускается в своей собственной виртуальной среде. В то время как полносистемные контейнеры разработаны таким образом, что в них могут выполняться различные процессы, контейнер приложений всегда содержит только один единственный процесс. Поэтому обширные приложения реализуются в виде многоконтейнерных приложений с помощью Docker.

rkt от CoreOS

Главным конкурентом Docker на рынке виртуализации на основе контейнеров является среда выполнения rkt (произносится как «ракета») от дистрибьютора Linux, компании CoreOS. Этот программный проект был представлен в 2014 году.

В качестве причины ухода от платформы Docker, которая до этого момента могла опираться на поддержку команды разработчиков CoreOS, генеральный директор Алекс Полви выразил неудовлетворенность тем, как развивается проект Docker. По словам Полви, лидер рынка перестал стремиться к разработке стандартной контейнерной технологии и вместо этого сосредоточился на маркетинге монолитной платформы для разработки приложений.

В феврале 2016 года CoreOS выпустила первый стабильный релиз среды выполнения контейнеров — rkt версии 1.0. В отличие от Docker, конкурент стремился произвести впечатление своими дополнительными функциями безопасности. К ним относятся, помимо изоляции контейнеров на основе KVM, поддержка расширения ядра SELinux, а также проверка подписи для образов самостоятельно разработанной спецификации контейнеров App Container (appc). Она описывает формат образа App Container Image (ACI), среду выполнения, механизм обнаружения образов и возможность группировки образов в многоконтейнерные приложения, известные как app container pods.

В отличие от Docker, rkt поддерживает другие форматы, помимо собственных образов контейнеров. Среда выполнения совместима с образами Docker, а с помощью инструмента с открытым исходным кодом Quay любой формат контейнера может быть преобразован в ACI.

Системные требования и поддерживаемые системы
Требуемое ядро Linux Любое современное ядро amd64
Поддерживаемые дистрибутивы Linux Arch Linux, CentOS, CoreOS, Debian, Fedora, NixOS, openSUSE, Ubuntu, Void
Другие платформы macOS или Windows с использованием виртуальной машины Vagrant
Формат контейнера appc, Docker-Container; другие образы контейнеров могут быть переведены в формат rkt с помощью Quay.
Лицензия Apache 2.0
Язык программирования Go

В то время как платформа Docker полагается на центральный демон, который работает в фоновом режиме с привилегиями root, rkt обходится без этих фоновых процессов и вместо этого работает с установленными системами init, такими как systemd и upstart, для запуска и управления контейнерами. Это позволяет обойти проблему Docker для пользователей, желающих запустить контейнер с помощью демона, но не имеющих прав root и, следовательно, имеющих лишь ограниченный доступ к хост-системе.

Факт

Начиная с версии 1.11, контейнеры не запускаются напрямую из демонов Docker. Вместо этого используется процесс-демон под названием containerd.

В отличие от Docker, rkt при виртуализации приложений не ограничен функциями ядра Linux, такими как cgroups и namespaces. С помощью среды выполнения CoreOS контейнеры на базе KVM (виртуальная машина на базе ядра, например, LKVM или QEMU) и технологии Intel Clear Container также могут быть запущены как полностью закрытые виртуальные машины.

Спецификация appc и ее реализация rkt поддерживаются такими гигантами индустрии, как Google, Red Hat и VMware.

Преимущества Недостатки
✔ rkt поддерживает контейнеры Docker, а также собственный формат контейнеров и позволяет конвертировать любой образ контейнера через Quay в формат rkt ACI ✘ С rkt доступно меньше сторонних интеграций, по сравнению с Docker
✔ Такие технологии, как KVM и технология Intel Clear Containers, позволяют безопасно экранировать программные контейнеры друг от друга ✘ rkt оптимизирован для работы с контейнерами приложений. Полносистемные контейнеры не поддерживаются

LXC

Альтернатива Docker, LXC, представляет собой набор инструментов, шаблонов, библиотек и языковых привязок, которые вместе представляют собой интерфейс пользовательского пространства к встроенным контейнерным функциям ядра Linux. Для пользователей Linux LXC предоставляет удобный способ создания и управления контейнерами приложений и систем.

Факт

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

Чтобы оградить процессы друг от друга, LXC использует следующие методы изоляции:

  • IPC, UTS, Mount, PID, сетевые и пользовательские пространства имен.
  • Cgroups
  • AppArmor и профиль SELinux
  • Правила Seccomp
  • Chroots
  • Возможности ядра  

Целью проекта LXC является создание программной контейнерной среды, максимально похожей на стандартную установку Linux. LXC разрабатывается вместе с проектами с открытым исходным кодом LXD, LXCFS и CGManager в рамках проекта LinuxContainers.org.

Системные требования и поддерживаемые системы
Требуемое ядро Linux Linux версии 2.6.32 или выше
Поддерживаемые дистрибутивы Linux LXC включен в большинство дистрибутивов Linux, требуются следующие библиотеки: Библиотеки C: glibc, musl libc, uclib или bionic, Дополнительные библиотеки: libcap, libapparmor, libselinux, libseccomp, libgnutls, liblua, python3-dev.
Другие платформы Нет
Формат контейнера Linux-контейнер (LXC)
Лицензия GNU LGPLv2.1+
Язык программирования C, Python 3, Shell, Lua

LXC был разработан для запуска различных системных контейнеров (полносистемных контейнеров) на общей хост-системе. Контейнер Linux обычно запускает полный дистрибутив из образа операционной системы в виртуальной среде. Пользователи взаимодействуют с ним так же, как с виртуальной машиной.

Приложения редко запускаются в контейнерах Linux. Это существенно отличает данное программное обеспечение от проекта Docker. В то время как LXC в основном занимается виртуализацией систем, Docker фокусируется на виртуализации отдельных приложений и их развертывании. Вначале также использовались контейнеры Linux, но сегодня Docker полагается на самостоятельно разработанный формат контейнеров.

Основное различие между обеими технологиями виртуализации заключается в том, что контейнеры Linux могут содержать любое количество процессов, тогда как в контейнерах Docker выполняется только один процесс, поэтому сложные приложения Docker обычно состоят из нескольких контейнеров. Для эффективного развертывания таких многоконтейнерных приложений требуются дополнительные инструменты.

Кроме того, контейнеры Docker и контейнеры Linux отличаются по переносимости. Если пользователь разрабатывает программное обеспечение на основе LXC на локальной тестовой системе, он не может просто предположить, что контейнер будет безупречно работать на других системах (например, на производительной системе). Платформа Docker, однако, гораздо сильнее абстрагирует приложения от качества базовой системы. Это позволяет запускать один и тот же контейнер Docker на любом хосте Docker (система, на которой установлен движок Docker), независимо от операционной системы и конфигурации оборудования.

LXC также поставляется без центрального процесса-демона. Вместо этого контейнерное программное обеспечение интегрируется в системы init, такие как systemd и upstart, для запуска и управления контейнерами.

Преимущества Недостатки
✔ LXC оптимизирован для работы полносистемных контейнеров ✘ Работа контейнеров приложений не относится к стандартным приложениям
  ✘ Нет собственной реализации для операционных систем, отличных от Linux

LXD от Canonical

В качестве продолжения проекта LXC дистрибьютор Linux компания Canonical в ноябре 2014 года запустила альтернативу Docker — LXD (произносится как «лексди»). Проект основан на контейнерной технологии Linux и расширяет ее за счет процесса-демона LXD. Программное обеспечение рассматривает себя как своего рода гипервизор контейнеров. Техническая структура контейнерного решения состоит из трех компонентов: LXC служит в качестве клиента командной строки. Кроме того, nova-compute-lxd представлен как OpenStack-Nova-Plug-in. а также niova-compute-lxd. Связь между клиентом и демоном осуществляется через REST API.

Факт

Nova является центральным вычислительным компонентом облачной операционной системы OpenStack с открытым исходным кодом, которая используется для развертывания и управления виртуальными системами в облачных архитектурах. OpenStack Nova поддерживает различные технологии виртуализации на базе гипервизора и на уровне операционной системы.

Целью проекта программного обеспечения является обеспечение пользовательского опыта на основе контейнерной технологии Linux, аналогичного работе виртуальных машин, без необходимости принимать накладные расходы на эмуляцию аппаратных ресурсов.

Системные требования и поддерживаемые системы
Требуемое ядро Linux как LXC
Поддерживаемые дистрибутивы Linux Клиент командной строки (lxc): Ubuntu 14.04 LTS, Ubuntu 16.04 LTS, nova-compute-lxd: Ubuntu 16.04 LTS
Другие платформы Нет
Формат контейнера Linux-контейнер (LXC)
Лицензия Apache 2.0
Язык программирования Go

Как и LXC, LXD фокусируется на поставке полносистемных контейнеров. Эта роль, как инструмента управления машинами, отличает LXD от Docker и rkt, основные функции которых лежат в области развертывания программного обеспечения. LXD использует ту же технологию изоляции, что и лежащий в основе проект LXC.

Для работы демона контейнерного решения требуется ядро Linux. Другие операционные системы не поддерживаются. Поскольку взаимодействие с демоном происходит через REST API, к нему можно получить удаленный доступ через клиент Windows или MacOS. В статье в блоге от февраля 2017 года руководитель проекта LXD Стефан Грабер описывает, как стандартный клиент LXD можно настроить для нужной операционной системы.

Преимущества Недостатки
✔ LXD оптимизирован для работы с полносистемными контейнерами ✘ Работа контейнеров приложений не является стандартным приложением
✔ Клиент LXD может быть настроен для Windows и macOS и позволяет управлять демоном LXD удаленно через REST API ✘ Для работы демона LXD требуется ядро Linux

Linux-VServer

Linux-VServer — это технология виртуализации на уровне операционной системы, которая, как и программные контейнеры, основана на технологиях изоляции ядра Linux. На общем ядре Linux работает несколько виртуальных единиц, ресурсы которых (файловая система, процессор, сетевые адреса и память) разделены на отдельные разделы с помощью механизма jail. В терминологии Linux-VServer такие разделы называются «контекст безопасности» и создаются с помощью стандартных технологий, таких как сегментированная маршрутизация, chroot и quota. Виртуализированная система в таком контексте безопасности называется Virtual Private Server (VPS).

Поскольку VPS работают как изолированные процессы на одной хост-системе и используют один и тот же интерфейс системных вызовов, дополнительных накладных расходов за счет эмуляции не возникает.

Fakt

Виртуализация на уровне операционной системы с помощью Linux-VServer не имеет ничего общего с проектом Linux Virtual Server, в рамках которого разрабатывается техника балансировки нагрузки для кластеров Linux.

Системные требования и поддерживаемые системы
Требуемое ядро Linux Linux версии 2.6.19.7 или выше
Поддерживаемые дистрибутивы Linux все дистрибутивы Linux
Другие платформы Нет
Формат контейнера В Linux-VServer используется похожая на контейнер концепция SecurityContext.
Лицензия GNU GPL v.2
Язык программирования C

Проект с открытым исходным кодом, запущенный Жаком Желинасом, до недавнего времени возглавлял австриец Герберт Пётцль. Технология используется, например, провайдерами веб-хостинга, которые хотят предложить своим клиентам отдельные виртуальные машины на общей аппаратной основе.

Чтобы обеспечить ядро Linux функциями виртуализации на уровне операционной системы, его необходимо пропатчить. Эта модификация ядра Linux обеспечивает принципиальное отличие технологии от контейнеров Linux (LXC), которые полагаются на встроенные функции изоляции с помощью cgroups и пространств имен.

Последним выпуском был VServer 2.2 в 2007 году.

Преимущества Недостатки
✔ В то время как Docker может сохранить изменения в контейнере только путем создания нового образа из работающего контейнера, Linux-VServer предоставляет общую файловую систему для всех VPS на хосте, где можно сохранить текущие версии ✘ Linux-VServer требует модификации ядра Linux
  ✘ Нет новых релизов с 2007 года

OpenVZ/Virtuozzo 7

Версия 7 платформы виртуализации OpenVZ от Parallels доступна в виде отдельного дистрибутива Linux с июля 2016 года. Программное обеспечение основано на Red Hat Enterprise Linux 7 (RHEL) и обеспечивает работу гостевых систем, которые могут быть реализованы как в виде виртуальных машин, так и в виде контейнеров. С новой кодовой базой OpenVZ приближается к Virtuozzo 7, который распространяется компанией Parallels в качестве коммерческого корпоративного продукта. Прямое сравнение обоих решений виртуализации можно найти на OpenVZ Wiki.

По сравнению с предыдущей версией, OpenVZ 7 предлагает набор новых инструментов командной строки, так называемых гостевых инструментов. Они позволяют пользователям выполнять задачи хостинга непосредственно с терминала хост-системы. Кроме того, самостоятельно разработанный гипервизор для работы виртуальных машин был заменен на устоявшиеся стандартные технологии KVM и QEMU.

При использовании контейнеров OpenVZ продолжает использовать свой собственный формат с контейнерами Virtuozzo. Как и LXC, он в первую очередь служит для виртуализации полных систем (VPS) и, таким образом, отделен от Docker и rkt. Однако, в отличие от LXC, OpenVZ предлагает возможность живой миграции через checkpoint/restore in userspace (CRIU) для создания постоянных образов работающего контейнера.

Системные требования и поддерживаемые системы
Требуемое ядро Linux RHEL7 (3.10)
Поддерживаемые дистрибутивы Linux Virtuozzo Linux, RHEL7
Другие платформы Нет
Формат контейнеров Контейнеры Virtuozzo
Лицензия OpenVZ: GNU GPL v.2, Virtuozzo 7: проприетарная лицензия
Язык программирования C

Технически OpenVZ и Virtuozzo представляют собой расширение ядра Linux, которое предоставляет различные инструменты виртуализации на уровне пользователя. Гостевые системы реализуются в так называемых виртуальных средах (VE), которые работают изолированно на одном ядре Linux. Как и в случае с другими контейнерными технологиями, накладных расходов удается избежать благодаря аппаратной эмуляции на базе гипервизора. Однако общее ядро Linux означает, что все виртуализированные гостевые системы определяются системной архитектурой и версией ядра хост-системы.

Основные функции OpenVZ включают динамическое разделение в реальном времени, управление ресурсами и централизованное управление несколькими физическими и виртуальными серверами.

  • Динамическое разделение в реальном времени: каждый VPS является изолированным разделом основного физического сервера. Изоляция включает собственные файловые системы, группы пользователей (включая собственный корневой сервер), деревья процессов, сетевые адреса и объекты IPC.
  • Управление ресурсами: OpenVZ распределяет аппаратные ресурсы с помощью так называемых параметров управления ресурсами, которые управляются системным администратором в глобальном конфигурационном файле и соответствующих конфигурационных файлах контейнеров.

Для управления виртуальными машинами и системными контейнерами OpenVZ и Virtuozzo полагаются на инструмент управления Red Hat libvirt, который состоит из API с открытым исходным кодом, демона libvirtd и утилиты командной строки virsh.

В то время как корпоративный продукт Virtuozzo поставляется с интегрированным графическим интерфейсом Parallels Virtual Automation (PVA), OpenVZ поставляется в базовой комплектации без графического интерфейса пользователя. Однако у пользователей есть возможность установить его с помощью стороннего программного обеспечения. Команда разработчиков OpenVZ рекомендует OpenVZ Web Panel от SoftUnity. Другие альтернативы можно найти на OpenVZ Wiki.

Преимущества Недостатки
✔ Parallels предлагает полный дистрибутив Linux, оптимизированный для сценариев виртуализации с OpenVZ и Virtuozzo ✘ OpenVZ и Virtuozzo предоставляют контейнеры для работы полноценных операционных систем. Тот, кто ищет профессиональную альтернативу Docker для изоляции отдельных процессов, должен выбрать другую платформу
✔ OpenVZ и Virtuozzo позволяют эксплуатировать виртуальные машины с минимальными накладными расходами в дополнение к системным контейнерам ✘ Использование OpenVZ и Virtuozzo ограничено дистрибутивами Linux RHEL7 и Virtuozzo.

runC

runC — это не столько альтернатива Docker, сколько побочный продукт среды выполнения контейнеров, разработанной Docker и превращенной в независимый проект с открытым исходным кодом под патронажем Open Container Initiative (OCI).

Являясь некоммерческой организацией фонда Linux, Docker и другие компании контейнерной индустрии запустили OCI 2015 года с целью создания открытого отраслевого стандарта для программных контейнеров. В настоящее время OCI предоставляет спецификации для среды выполнения контейнеров (runtime-spec) и формата образа контейнера (image-spec).

Среда времени выполнения с открытым исходным кодом runC может рассматриваться как каноническая реализация этих спецификаций.

Системные требования и поддерживаемые системы
Требуемое ядро Linux Любое ядро Linux
Поддерживаемые дистрибутивы Linux Все текущие дистрибутивы Linux
Другие платформы Нет
Формат контейнера Пакет OCI
Лицензия Apache 2.0
Язык программирования Go

Среда выполнения OCI поддерживает только контейнеры в формате OCI bundle и требует только корневую файловую систему и конфигурационный файл OCI для выполнения контейнеров. Инструмент для создания корневых файловых систем для контейнеров в проекте не предусмотрен. Однако пользователи, у которых установлена платформа Docker, могут воспользоваться функцией экспорта, чтобы извлечь корневую файловую систему из существующего контейнера Docker, расширить ее до config.json и, таким образом, создать OCI bundle. Кроме того, для поддержки создания образа можно использовать другие внешние инструменты, такие как oci-image-tools, skopeo и umoci.

Как и в альтернативах Docker, rkt и LXC, в runC не используется центральный процесс-демон. Вместо этого среда выполнения контейнеров интегрирована с процессом init, systemd.

Преимущества Недостатки
✔ runC основан на промышленном стандарте Open Container Initiative (OCI) ✘ Для создания образов контейнеров требуются внешние инструменты

Сравнение альтернатив Docker

В следующей таблице приведено сравнение всех альтернатив Docker, представленных в этой статье.

  Docker rkt LXC LXD
Технологии виртуализации Уровень ОС Уровень ОС, гипервизор Уровень ОС Уровень ОС
Полносистемный контейнер Нет Нет Да Да
Контейнер для приложений Да Да Нет Нет
Лицензия Apache 2.0 Apache 2.0 GNU LGPLv2.1+ Apache 2.0
Формат контейнера Docker-контейнер appc, контейнер Docker Linux-контейнер (LXC) Контейнер Linux (LXC)
Поддерживаемые платформы Linux, Windows, macOS, Microsoft Azure, Amazon Web Services (AWS) Linux, Windows, macOS Linux Linux
Последний релиз 42826 Февраль 2017 Январь 2017 Март 2017
Необходим патч для ядра Linux Нет Нет Нет Нет
Язык программирования Go Go C, Python 3, Shell, Lua Go
  Linux-VServer OpenVZ runC
Технологии виртуализации Уровень ОС Уровень ОС, гипервизор Уровень ОС
Полносистемный контейнер Да Да Нет
Контейнер приложений Нет Нет Да
Лицензия GNU GPL v.2 GNU GPL v.2 Apache 2.0
Формат контейнера Контекст безопасности Контейнеры Virtuozzo Пакет OCI
Поддерживаемые платформы Linux Linux (только Virtuozzo Linux, RHEL7) Linux
Последний релиз 39173 Июль 2016 г. Март 2017
Необходим патч для ядра Linux Да Автономный дистрибутив Нет
Язык программирования C C Go

Технология контейнеров в других операционных системах

Концепция разделения системных ресурсов с помощью механизмов изоляции ядра и предоставления независимо инкапсулированных процессов на одной системе встречается в различных Unix-подобных операционных системах. Сравнимы контейнеры Linux с термином «jail» в системах BSD и зоны, введенные в Solaris 10. Для систем Windows существуют концепции контейнеров: Microsoft Drawbridge, WinDocks, Sandboxie, Turbo и VMware ThinApp.

Тюрьма FreeBSD

Так называемые «тюрьмы» представляют собой одну из наиболее характерных функций безопасности Unix-подобной операционной системы FreeBSD. Jail — это расширенная среда chroot, которая устанавливает полный виртуальный экземпляр операционной системы в отдельном каталоге, и имеет более высокую степень изоляции по сравнению с chroot jail в Linux. Каждый jail имеет свое собственное дерево каталогов. Кроме того, ограничивается пространство процессов, а также доступ к группам пользователей, сетевым интерфейсам и механизмам IPC. Таким образом, процессы в jail не могут получить доступ к другим каталогам или файлам за пределами изолированной среды, а также повлиять на другие процессы в хост-системе. Кроме того, каждой тюрьме может быть присвоено собственное имя хоста и собственный IP-адрес.

Для каждой тюрьмы можно определить независимые группы пользователей (чьи права ограничены средой тюрьмы) с помощью собственного управления пользователями. Например, пользователь, обладающий широкими привилегиями внутри тюрьмы, не может выполнять критические системные операции за пределами виртуальной среды. Это гарантирует, что хакер из взломанной тюрьмы не сможет нанести серьезный ущерб системе.

Факт

FreeBSD — это бесплатная версия с открытым исходным кодом Berkeley Software Distribution (BSD), варианта операционной системы Unix, разработанного в Калифорнийском университете в Беркли в 1977 году.

Преимущества Недостатки
✔ Оптимизирована для полносистемной виртуализации ✘ Изоляция отдельных процессов (как в Docker) не поддерживается
  ✘ Виртуализация через jail требует наличия BSD-системы (NetBSD, FreeBSD и OpenBSD).

Зоны Oracle Solaris

В Solaris ряд экранированных сред времени выполнения также может быть установлен в рамках установки операционной системы. Они известны как зоны и имеют общее ядро операционной системы. Различают глобальные и неглобальные зоны.

  • Глобальные зоны: каждая установка Solaris включает глобальную зону, которая действует как стандартная операционная система для администрирования. В глобальной зоне выполняются все процессы системы, если они не были переданы в неглобальные зоны.
  • Неглобальные зоны: эти зоны представляют собой разделенные виртуальные среды, которые создаются внутри глобальной зоны установки Solaris. Изоляция отдельных неглобальных зон аналогична FreeBSD на основе модифицированного chroot jail. Каждой зоне присваивается собственное имя хоста и виртуальная сетевая карта. Доли ресурсов базового оборудования либо распределяются посредством справедливого планирования, либо фиксируются как часть управления ресурсами.

Подобно другим подходам к виртуализации на уровне операционной системы, зоны Solaris обеспечивают ресурсосберегающий способ реализации различных изолированных операционных систем на общем экземпляре системы.

Преимущества Недостатки
✔ Реализация зон Solaris нативно обеспечивает очень эффективную работу виртуальных сред с минимальными накладными расходами ✘ Для использования зон Solaris требуется проприетарная операционная система Oracle Solaris или ее версия с открытым исходным кодом OpenSolaris.

Контейнерная технология для Windows

С момента интеграции встроенного порта Docker в Windows Server 2016 контейнерная технология вошла и во вселенную Microsoft. Для этого ядро Windows было расширено в тесном сотрудничестве с командой разработчиков Docker, чтобы включить в него функции, аналогичные группам управления и пространствам имен в Linux, позволяющие экономить ресурсы виртуализации на уровне операционной системы.

Встроенный движок Docker для Windows Server 2016 отличается от приложений Docker for Windows и Docker for Mac. В то время как последние позволяют работать с движком Docker, разработанным для Linux, используя бережливую виртуальную машину, версия Docker для Windows Server 2016 использует непосредственно ядро Windows. Классические контейнеры Docker не могут быть запущены на Windows Server 2016. Вместо этого в рамках проекта Docker был разработан новый формат контейнеров под названием WSC (Windows Server Container). Кроме того, Microsoft предлагает вариант контейнера на базе Hyper-V, который обеспечивает лучшую изоляцию.

  • Windows Server Container: с помощью Windows Server Containers (WSC) Microsoft предлагает контейнерную технологию для платформы Docker, которая позволяет изолировать процессы с расширенными функциями ядра Windows. Как и в технологии Linux, серверные контейнеры Windows совместно используют ядро базовой хост-системы (хост-контейнера).
  • Hyper-V-Container: с помощью Hyper-V Containers компания Microsoft предоставляет возможность экранировать контейнерные экземпляры, используя традиционную виртуализацию на базе гипервизора. Hyper-V Containers — это виртуальные машины, которыми можно управлять с помощью платформы Docker, как и Windows Server Containers, но они имеют гораздо более высокую степень изоляции с собственным ядром Windows.

Еще до того, как Microsoft внедрила собственные контейнерные технологии в ядро Windows в рамках сотрудничества с Docker, различные разработчики занимались ресурсосберегающими методами виртуализации для систем Windows. Microsoft Drawbridge, WinDocks, Sandboxie, Turbo и VMware — одни из самых известных проектов.

Microsoft Drawbridge

Под названием Drawbridge компания Microsoft разработала прототип технологии визуализации, основанной на концепции Library OS — операционной системы, реализованной в виде набора библиотек внутри приложения. В Drawbridge приложения запускаются вместе с библиотечной ОС в так называемых процессах Pico. Это контейнеры изоляции на основе процессов с интерфейсом ядра. В документации по контейнерам для серверов Windows компания Microsoft указывает опыт Drawbridge как важный вклад в развитие технологии контейнерных серверов для Windows Server 2016.

WinDocks

WinDocks — это порт Docker для Windows, который используется для создания и управления контейнерами приложений для приложений .NET и контейнерами данных для SQL-серверов. В отличие от серверных контейнеров Windows, которые в настоящее время ограничены системами Windows 10 и Windows Server 2016, WinDocks доступен и для старых операционных систем, таких как Windows Server 2012, Windows Server 2012 R2, а также Windows 8 и 8.1. Программное обеспечение предлагается бесплатно в виде редакции Community и в виде продукта Enterprise с поддержкой клиентов.

Sandboxie

С помощью Sandboxie приложения могут работать на Windows в изолированной среде, называемой Sandbox. Подобно технологии контейнеров, этот метод направлен на защиту основной хост-системы и других приложений от программной деятельности изолированных приложений. Для этого инструмент переключается между приложением и операционной системой, чтобы перехватывать обращения к записи на жесткий диск и перенаправлять их в защищенную область. Помимо доступа к файлам, это также предотвращает запросы на запись из базы данных реестра Windows. Sandboxie доступна для всех текущих версий Windows, а также для XP и Vista в виде бесплатной базовой версии. Кроме того, для частных пользователей и коммерческого использования доступны платные версии с расширенным функциональным спектром.

Turbo (ранее Spoon)

Turbo — это альтернатива Docker для Windows, которая упаковывает приложения и все их зависимости, такие как .NET, Java или базы данных, например SQL Server или MongoDB, в изолированные контейнеры. Однако, в отличие от серверных контейнеров Windows, эти контейнеры не поддерживаются ядром Windows, поэтому для компенсации несоответствий необходима виртуальная машина (аналогичная Docker для Windows). Поэтому контейнеры Turbo работают на виртуальной машине Spoon Virtual Machine Engine (SVM), которая выступает в качестве интерфейса к ядру Windows. Обмен контейнерными приложениями также происходит в Turbo через облачный хаб. Программное обеспечение хорошо документировано, но не получает столько внимания по сравнению с Docker.

VMware ThinApp

VMware ThinApp — это инструмент для виртуализации приложений в среде настольных компьютеров. Программное обеспечение позволяет обеспечить бесконфликтность приложений в сложных ИТ-инфраструктурах. Для этого они, включая все зависимости, упаковываются в исполняемый файл EXE или MSI и, таким образом, изолируются от базовой операционной системы и других приложений. Файл, созданный ThinApp, может быть запущен на любой системе Windows без необходимости установки (и, следовательно, без прав администратора) — как вариант, также с переносного носителя (например, флэш-накопителя USB). Альтернативой Docker является ThinApp при переносе устаревших приложений или изоляции критически важных программ.

Оцените статью
cdelat.ru
Добавить комментарий