LXC (Linux Containers) — что это и как работает на VPS | Глоссарий FREEHOSTING

LXC

Linux Containers
LXC — LXC (Linux Containers) — технология контейнерной виртуализации на уровне ОС, использующая cgroups и namespaces ядра Linux для изоляции процессов без накладных расходов полной виртуализации.

Определение простыми словами

LXC — это инструмент для запуска изолированных Linux-окружений (контейнеров) на одном физическом или виртуальном сервере. В отличие от KVM или VMware, где каждая машина получает собственное ядро, все LXC-контейнеры используют ядро хост-системы. Это даёт почти нулевые накладные расходы: контейнер стартует за 1-2 секунды и потребляет от 5 МБ RAM на idle.

Изоляция достигается двумя механизмами ядра: namespaces (pid, net, mnt, uts, ipc, user) и cgroups (лимиты CPU, RAM, I/O). С точки зрения приложения внутри контейнера — это полноценная Linux-система со своим /etc, /proc, сетевым стеком и пользовательским пространством. Снаружи — просто группа процессов на хосте.

Сравнение

Параметр LXC Docker KVM
Ядро Общее с хостом Общее с хостом Своё на каждую VM
Старт 1-3 с 0.5-2 с 10-60 с
Overhead RAM ~5-20 МБ ~10-30 МБ ~128-512 МБ
Изоляция Средняя (namespace) Средняя (namespace) Высокая (аппаратная)
Типичный сценарий Системные контейнеры, VPS-хостинг Микросервисы, CI/CD Полная изоляция, Windows-гости

Кейсы использования

  • VPS-хостинг на базе Proxmox VE: провайдеры размещают десятки LXC-контейнеров на одном сервере вместо 10-15 KVM-машин — плотность растёт в 3-5 раз.
  • Изолированные среды разработки: разработчик получает контейнер с Ubuntu 22.04, полным стеком LAMP и доступом по SSH, не затрагивая хост.
  • Тестирование конфигураций: создать, протестировать и уничтожить контейнер с новой версией nginx занимает менее минуты.
  • Лёгкие сервисы: DNS-резолверы, почтовые relay, мониторинговые агенты — всё, что не требует собственного ядра.
  • Негативный пример: запускать Windows-гостей или приложения, требующие загрузки кастомных модулей ядра (например, ZFS внутри контейнера), через LXC нельзя — все контейнеры разделяют ядро хоста, и несовместимая нагрузка положит весь хост.

Технические детали

Управление контейнерами через CLI:

lxc-create -t download -n mycontainer -- -d ubuntu -r jammy -a amd64
lxc-start -n mycontainer
lxc-attach -n mycontainer -- bash
lxc-stop -n mycontainer
lxc-destroy -n mycontainer

Лимитирование ресурсов через конфиг /var/lib/lxc/mycontainer/config:

lxc.cgroup2.memory.max = 512M
lxc.cgroup2.cpu.max = 50000 100000
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up

Проверка статуса и потребления ресурсов:

lxc-ls --fancy
lxc-info -n mycontainer
lxc-top

Непривилегированные контейнеры (unprivileged) запускаются от имени обычного пользователя: uid 0 внутри контейнера маппируется на uid 100000 на хосте через LXD или файлы /etc/subuid и /etc/subgid. Это существенно снижает риск escape-атак при компрометации контейнера.

Частые вопросы

Чем LXC отличается от Docker?

LXC — системные контейнеры: внутри работает полноценная Linux-система с init, cron, SSH. Docker ориентирован на запуск одного процесса на контейнер и управляется через образы. Для хостинга виртуальных серверов используют LXC/LXD, для деплоя приложений — Docker.

Безопасно ли использовать LXC для мультиарендных сред?

Привилегированные контейнеры несут риск: root внутри = root на хосте. В продакшн-хостинге используют непривилегированные контейнеры (uid mapping) и AppArmor-профили. Proxmox VE включает эти меры по умолчанию.

Можно ли запустить LXC внутри KVM-машины?

Да, это стандартная схема у VPS-провайдеров: физический сервер → KVM-гипервизор → виртуальные машины → LXC-контейнеры внутри каждой VM. Для вложенной виртуализации потребуется включить параметр nested в настройках KVM-гостя.

Какая минимальная версия ядра нужна для LXC?

Минимум — Linux 3.8 (поддержка user namespaces). Рекомендуется 5.4+: в этих версиях cgroups v2 стабилен, а cgroupv1 продолжает работать для совместимости. Ubuntu 22.04 с ядром 5.15 — оптимальный выбор.