Контейнеры Linux ( LXC ) — это метод виртуализации на уровне операционной системы для запуска нескольких изолированных систем Linux (контейнеров) на управляющем хосте с использованием одного ядра Linux.
Ядро Linux предоставляет функциональность cgroups , которая позволяет ограничивать и приоритезировать ресурсы (ЦП, память, блочный ввод-вывод, сеть и т. д.) без необходимости запуска каких-либо виртуальных машин , а также функциональность изоляции пространства имен , которая позволяет полностью изолировать представление приложения об операционной среде, включая деревья процессов , сетевые подключения , идентификаторы пользователей и смонтированные файловые системы . [3]
LXC объединяет контрольные группы ядра и поддержку изолированных пространств имен , чтобы обеспечить изолированную среду для приложений. [4] Ранние версии Docker использовали LXC в качестве драйвера выполнения контейнера, [4] хотя LXC стал необязательным в v0.9, а его поддержка была прекращена в Docker v1.10. [5] [6]
LXC изначально был разработан IBM в рамках сотрудничества между несколькими сторонами, стремящимися добавить пространства имен в ядро. [7] Он обеспечивает виртуализацию на уровне операционной системы через виртуальную среду, которая имеет свой собственный процесс и сетевое пространство, вместо создания полноценной виртуальной машины . LXC опирается на функциональность cgroups ядра Linux [8] , которая была выпущена в версии 2.6.24. Он также опирается на другие виды функциональности изоляции пространств имен, которые были разработаны и интегрированы в основное ядро Linux.
Первоначально контейнеры LXC не были такими безопасными, как другие методы виртуализации на уровне ОС, такие как OpenVZ : в ядрах Linux до версии 3.8 пользователь root гостевой системы мог запускать произвольный код на хостовой системе с привилегиями root, так же, как он мог это делать в chroot- окружениях. [9] Начиная с выпуска LXC 1.0, стало возможным запускать контейнеры как обычные пользователи на хосте, используя «непривилегированные контейнеры». [10] Непривилегированные контейнеры более ограничены в том смысле, что они не могут напрямую получать доступ к оборудованию. Однако даже привилегированные контейнеры должны обеспечивать адекватную изоляцию в модели безопасности LXC 1.0, если они правильно настроены. [10]
LXC похож на другие технологии виртуализации на уровне ОС в Linux, такие как OpenVZ и Linux-VServer , а также на технологии в других операционных системах, таких как FreeBSD jails , AIX Workload Partitions и Solaris Containers . В отличие от OpenVZ, LXC работает в ядре vanilla Linux, не требуя дополнительных исправлений для исходных кодов ядра. Версия 1 LXC, выпущенная 20 февраля 2014 года как долгосрочно поддерживаемая версия, поддерживалась в течение пяти лет. [11] LXC 4.0 будет поддерживаться до 1 июня 2025 года, а LXC 5.0 — до 1 июня 2027 года. [12]
LXD — это альтернативный менеджер контейнеров Linux, написанный на Go . Он построен на основе LXC и призван обеспечить лучший пользовательский интерфейс. [13] Это гипервизор контейнеров , предоставляющий API для управления контейнерами LXC. [14] Проект LXD был начат в 2015 году и с самого начала спонсировался Canonical Ltd. , компанией, стоящей за Ubuntu . 4 июля 2023 года проект LinuxContainers объявил, что Canonical решила взять на себя проект LXD, но был создан форк под названием Incus. [15] [16] 25 августа 2023 года версия LXD 5.17 была официально выпущена под контролем Canonical, обеспечивая поддержку возможностей делегирования OpenZFS 2.2. [17]
, по крайней мере в Ubuntu, наши стандартные контейнеры поставляются с тем, что мы считаем довольно хорошей конфигурацией как доступа cgroup, так и обширного профиля apparmor, который предотвращает все известные нам атаки. [...] LXC больше не работает как root, поэтому даже если злоумышленнику удастся покинуть контейнер, он обнаружит, что у него есть привилегии обычного пользователя на хосте