Контейнеризация

Перейти к навигацииПерейти к поиску

Контейнеризация (виртуализация на уровне операционной системы, контейнерная виртуализация, зонная виртуализация[1]) — метод виртуализации, при котором ядро операционной системы поддерживает несколько изолированных экземпляров пространства пользователя вместо одного. Эти экземпляры (обычно называемые контейнерами или зонами) с точки зрения выполняемых в них процессов идентичны отдельному экземпляру операционной системы. Для систем на базе Unix эта технология похожа на улучшенную реализацию механизма chroot. Ядро обеспечивает полную изолированность контейнеров, поэтому программы из разных контейнеров не могут воздействовать друг на друга.

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

Существуют реализации, ориентированные на создание практически полноценных экземпляров операционных систем (Solaris Containers, контейнеры Virtuozzo, OpenVZ), так и варианты, фокусирующиеся на изоляции отдельных сервисов с минимальным операционным окружением (jail, Docker).

Реализации

Механизм Операционная система Лицензия Дата выпуска Особенности
Изоляция файловой системы Квоты на пространство хранения Лимиты на ввод-вывод Лимиты на память Квоты ЦПУ Изоляция сети Живая миграция
chrootвстроено в большинство Unix-подобных операционных систем в зависимости от лицензии на операционную систему 1982 Частично НетНет Нет Нет Нет Нет
DockerLinux, FreeBSD, Windows, macOSApache 2.0 2013 Да Да Да Да Да Да Нет
Solaris ContainersSolaris, OpenSolarisCDDL01/2005 Да Да Нет Да Да Да[2]Нет[3]
FreeVPS LinuxGNU GPL- Да Да Нет Да Да Да Нет
iCore Virtual AccountsWindows XPПроприетарное06/2008 Да Да Нет Нет Нет Да Нет
Linux-VServer[англ.]
LinuxGNU GPL v.2- Да Да Да Да Да Да[4]Нет
LXC
LinuxGNU GPL v.22008 Да Нет Да Да Да Да Нет
OpenVZLinuxGNU GPL v.22005 Да Да Да[5]Да Да Да[6]Да
Virtuozzo Containers Linux, Microsoft Windows Проприетарное- Да Да Да[7]Да Да Да[6]Да
FreeBSD JailFreeBSDBSD 03/2000 Да Да Нет Да Частично Да Нет
sysjail[англ.]OpenBSD, NetBSDBSD - Да Нет Нет Нет Нет Да Нет
WPAR[англ.]AIXПроприетарное10/2007 Да Да Да Да Да Да[8]Да[9]

Примечания

  1. В Solaris
  2. Контейнеры Solaris 10 имеют изолированную сеть, когда конкретный NIC приписывается контейнеру («exclusive IP»). Сеть не изолирована, но виртуализирована, то есть каждая виртуальная среда имеет свой IP-адрес, брандмауэр и так далее. Изоляция сети должна достигаться на аппаратном уровне. В OpenSolaris изоляция сети реализована, см. OpenSolaris Network Virtualization and Resource Control и Архивированная копия. Дата обращения: 1 июня 2010. Архивировано из оригинала 1 июня 2008 года..
  3. Реализована холодная миграция.
  4. Сеть изолирована.
  5. Доступна в ядре 2.6.18-028stable021.
  6. 1 2 Сеть не изолирована, а виртуализована, то есть каждая виртуальная среда имеет свой IP-адрес, файрвол и так далее. Изоляция сети не поддерживается и должна быть реализована на аппаратном уровне.
  7. С версии 4.0, январь 2008.
  8. С версии TL 02. См. [1] Архивная копия от 1 марта 2012 на Wayback Machine.
  9. См. [2] Архивная копия от 8 июля 2017 на Wayback Machine

Ссылки