Виртуализация на уровне ОС


Виртуализация на уровне ОС — это парадигма операционной системы (ОС), в которой ядро допускает существование нескольких изолированных экземпляров пользовательского пространства , называемых контейнерами ( LXC , контейнеры Solaris , Docker , Podman ), зонами ( контейнеры Solaris ), виртуальными частными серверами ( OpenVZ ), разделы , виртуальные среды (VE), виртуальные ядра ( DragonFly BSD ) или тюрьмы ( FreeBSD jail ).или chroot-тюрьма ). [1] Такие экземпляры могут выглядеть как настоящие компьютеры с точки зрения работающих в них программ. Компьютерная программа, работающая в обычной операционной системе, может видеть все ресурсы (подключенные устройства, файлы и папки, общие сетевые ресурсы , мощность процессора, измеримые аппаратные возможности) этого компьютера. Однако программы, работающие внутри контейнера, могут видеть только содержимое контейнера и устройства, назначенные контейнеру.

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

Термин « контейнер », чаще всего относящийся к системам виртуализации на уровне ОС, иногда неоднозначно используется для обозначения более полных сред виртуальных машин, работающих в той или иной степени согласованно с основной ОС, например , контейнеров Microsoft Hyper-V .

В обычных операционных системах для персональных компьютеров компьютерная программа может видеть (даже если у нее нет доступа) ко всем системным ресурсам. Они включают:

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

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