Чем LXC отличается от Docker и виртуальной машины

Чем контейнер LXC отличается от Docker и виртуальной машины

Марина
Марина
📅 26 сентября 2026
Чем контейнер LXC отличается от Docker и виртуальной машины

Контейнер LXC — это системный контейнер: внутри него работает полноценная операционная система со своими пользователями и службами, но ядро (главную программу, которая управляет железом) он делит с хостовой машиной — тем сервером, на котором запущен. Из-за общего ядра такой контейнер съедает примерно 10–30 МБ оперативной памяти вместо 200–500 МБ, которые уходят на полноценную виртуальную машину с той же ОС. Поэтому на сервере с 4 ГБ памяти реально держать 15–20 контейнеров вместо трёх-четырёх виртуалок, и по той же причине контейнерные тарифы дешевле. Разворачивают их на VPS с Linux, где есть root-доступ.

Материал для тех, кто впервые встретил слово LXC в панели провайдера или в документации Proxmox. Разберём устройство изоляции, сравнение накладных расходов в цифрах, ограничения общего ядра, установку на Ubuntu с набором команд, лимиты по памяти и процессору и типовые ошибки новичков.

Что такое системный контейнер и чем он отличается от контейнера приложения

LXC расшифровывается как Linux Containers — это набор инструментов, который запускает изолированное окружение поверх ядра хоста. Когда контейнер стартует, внутри него поднимается настоящий init-процесс (systemd или SysV) — первая программа системы, которая запускает все остальные службы, ведёт логи и крутит задачи по расписанию. Вы заходите внутрь и видите привычный Debian или Ubuntu: работает apt, есть каталог /etc с настройками, есть свои учётные записи.

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

LXC ведёт себя как маленький сервер, который живёт годами: перезагружается, накапливает данные, обновляется через apt. Docker ведёт себя как программа: её убивают и поднимают заново из образа десятки раз в день. Правило простое: нужен «ещё один сервер» — LXC, нужен «ещё один сервис в сборке» — Docker.

Обе технологии стоят на одном фундаменте — механизмах ядра Linux namespaces («пространства имён») и cgroups («контрольные группы»). Первые дают контейнеру своё дерево процессов, свою сеть и свою файловую систему. Вторые режут потолок по памяти и процессорному времени, чтобы один контейнер не задушил соседей.

Почему общее ядро экономит память и что за это приходится отдать

Полноценная виртуальная машина под управлением KVM получает эмулированное железо: свой BIOS, свои виртуальные диски, свою сетевую карту. Поверх этого железа грузится отдельное ядро, которое сразу занимает память под собственные структуры, кеши и драйверы. Даже пустая виртуалка с Debian после загрузки показывает 200–500 МБ занятой памяти, из которых полезной нагрузки почти нет.

Контейнер не грузит ядро — он им пользуется. Запуск LXC-контейнера с той же Debian — это, по сути, старт нескольких десятков процессов в изолированном пространстве имён. Отсюда 10–30 МБ накладных расходов и старт за 1–2 секунды против 20–40 секунд у виртуальной машины, которой нужно пройти полный цикл загрузки.

Плата за экономию — потеря независимости. Версия ядра у вас ровно та, что стоит на хосте, и поменять её изнутри нельзя. Если провайдер работает на ядре 5.15, а софту нужны возможности 6.6, вариантов два: просить провайдера или переезжать на виртуалку. Устройство слоёв разобрано в материале о том, что такое виртуализация серверов.

Второе следствие общего ядра — контейнер всегда Linux. Windows Server в LXC не запустится ни при каких настройках: ему нужно собственное ядро NT.

LXC, Docker и KVM: таблица различий по восьми признакам

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

Признак LXC Docker KVM
Что внутри Полная ОС с init Один процесс Полная ОС со своим ядром
Накладные расходы памяти 10–30 МБ 5–20 МБ 200–500 МБ
Время старта 1–2 с меньше 1 с 20–40 с
Ядро Общее с хостом Общее с хостом Своё
Данные после перезапуска Сохраняются Теряются без тома Сохраняются
Своя версия ядра и модули Нет Нет Да
Windows внутри Нет Нет Да
Плотность на 8 ГБ RAM 30–50 штук 50–100 штук 6–10 штук

Цифры плотности приблизительные: они считаются от накладных расходов, а не от потребления вашего софта. Если каждому контейнеру нужен PostgreSQL с буфером 256 МБ, экономия на оболочке роли уже не играет.

Накладные расходы и плотность LXC, Docker и KVM в цифрах
Плотность считается от накладных расходов, а не от вашего софта: контейнер с базой и буфером на 256 МБ съедает всю экономию на оболочке.

Когда выбирать Docker, а когда LXC: разбор по задачам

Спор «Docker или LXC» решается вопросом: вам нужна изоляция приложения или изоляция окружения. Если вы разворачиваете Python-бота, Node-сервис или связку из пяти небольших сервисов, которую описывает один compose-файл (текстовый файл с перечнем контейнеров и их настроек), — это территория Docker. Образ собирается один раз, переносится куда угодно, откат к прошлой версии занимает секунды.

Если вам нужен отдельный «сервер» под клиента, тестовый стенд с полным набором LAMP (Linux, Apache, MySQL, PHP), машина под 1С или окружение, куда несколько человек ходят по SSH и ставят пакеты руками, — это LXC. Внутри работает systemd, запускаются службы, живёт cron, и весь привычный опыт администрирования Linux переносится без переучивания.

На практике это не конкуренты, а слои. Частая схема: на сервере поднимают LXC-контейнеры под разные проекты, а внутри контейнера крутят Docker с сервисами. Граница между клиентами проходит по контейнеру, между сервисами — по образам. Если Docker вы ещё не ставили, начните с инструкции о том, как установить Docker.

Есть и обратная ситуация, когда контейнеры не подходят вовсе. Нужны свои модули ядра, вложенная виртуализация, Windows, отладка через собственный отладчик ядра или жёсткое требование по изоляции от соседей — берите KVM и не экономьте. Что именно даёт полная аппаратная виртуализация, разобрано в гайде о том, что такое KVM-виртуализация.

OpenVZ, LXC и «плавающая» память в тарифах провайдеров

У хостеров контейнерная виртуализация встречается в двух видах. Исторически это OpenVZ — давняя российская разработка, устроенная по тому же принципу общего ядра. Сейчас её постепенно вытесняет LXC, часто под управлением Proxmox VE, но в прайсах старое название ещё живёт.

Контейнерные тарифы дешевле KVM при тех же гигабайтах — разница по каталогу составляет примерно 30–50 % за сопоставимую конфигурацию. Причина в плотности: на одну физическую машину провайдер помещает в 4–6 раз больше контейнеров, чем виртуалок, и делит стоимость железа на большее число клиентов.

Обратная сторона — «плавающая» память: гигабайты не закрепляются за клиентом жёстко, а выдаются из общего котла. Пока соседи спят, доступно больше заявленного, а в час пик процесс получает отказ в выделении памяти, хотя лимит формально не выбран. У KVM 2 ГБ означают ровно 2 ГБ, выделенные при старте машины.

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

На каком сервере разворачивать LXC и сколько это стоит

Для запуска своих LXC-контейнеров нужен сервер с root-доступом и правом загружать модули ядра — дополнения, которые добавляют ядру поддержку устройств и функций. Такие права даёт KVM-виртуалка или физическая машина. Внутри чужого контейнера вложенный LXC чаще всего не поднимется: провайдеры отключают такую возможность. Если же вы просто хотите арендовать готовый контейнер как VPS, подойдут недорогие VPS на контейнерной виртуализации — они и стоят меньше всего.

Под три-четыре лёгких контейнера хватит 2 ядер, 2 ГБ памяти и 20 ГБ диска. Под десяток контейнеров с базами закладывайте 4 ядра, 8 ГБ и 80 ГБ NVMe: каждый шаблон Ubuntu занимает 400–600 МБ, а после установки пакетов вырастает до 1,5–2 ГБ.

Провайдер Стартовая цена Что входит в младший тариф Тарифов в каталоге
Cloudcore от 59 ₽/мес 1 ядро, 1 ГБ RAM, 10 ГБ NVMe 12
Hosting-Russia от 99 ₽/мес стартовая контейнерная конфигурация —
4VPS от 110 ₽/мес 1 ядро, 1 ГБ RAM, 5 ГБ NVMe 568
HostVDS от 127 ₽/мес 1 ядро, 1 ГБ RAM, 10 ГБ NVMe 12

Данные проверены 04.09.2026.

Цены собраны по 44 площадкам каталога и относятся к младшим тарифам. Для собственного хоста под контейнеры смотрите на конфигурации от 8 ГБ памяти: там начинается смысл держать свой LXC вместо аренды нескольких мелких VPS.

Установка LXC на Ubuntu и запуск первого контейнера

Дальше — рабочая последовательность для Ubuntu 22.04 или 24.04. Команды выполняются от root или через sudo, подключение к серверу — по SSH.

  1. Обновите список пакетов и поставьте сам LXC вместе с утилитами для сетевого моста: apt update && apt install -y lxc lxc-templates bridge-utils. Пакет lxc-templates даёт шаблоны дистрибутивов, bridge-utils нужен для сети между контейнерами.
  2. Проверьте, что ядро готово к контейнерам: lxc-checkconfig. Команда выводит список возможностей ядра: нужные строки должны быть в состоянии enabled, а красные missing означают, что такой опции в ядре нет.
  3. Создайте первый контейнер из готового образа: lxc-create -n web1 -t download -- -d ubuntu -r jammy -a amd64. Здесь web1 — имя контейнера, download — шаблон, который качает готовый образ, а после двойного дефиса идут дистрибутив, релиз и архитектура.
  4. Запустите его: lxc-start -n web1. Контейнер поднимется за 1–2 секунды и продолжит работать в фоне — никакого вывода в вашу консоль при этом не появится.
  5. Проверьте состояние и адрес: lxc-ls -f. Ключ -f выводит таблицу со статусом RUNNING и полученным IP-адресом вида 10.0.3.x.
  6. Зайдите внутрь: lxc-attach -n web1. Вы попадаете в оболочку контейнера от имени root и работаете как на обычном сервере — ставите nginx, правите конфиги, добавляете пользователей.

Дальше контейнер живёт своей жизнью. Файловая система лежит на хосте в каталоге /var/lib/lxc/web1/rootfs и правится прямо оттуда, пока контейнер остановлен, — это спасает, если вы сломали конфиг SSH и потеряли доступ внутрь.

Команды управления контейнером: что вызывать в каких случаях

Набор утилит LXC компактен: десяток команд закрывает почти все задачи. Ниже те, что понадобятся в первую неделю, с пояснением, что происходит при вызове.

Команда Что делает Когда нужна
lxc-ls -f Список контейнеров со статусом и IP Первая команда при разборе проблемы
lxc-info -n web1 PID, потребление памяти и трафик Когда нужно понять, кто ест ресурсы
lxc-start -n web1 Запускает контейнер в фоне После создания или перезагрузки хоста
lxc-stop -n web1 Корректно гасит службы внутри Перед бэкапом или правкой конфига
lxc-attach -n web1 Открывает оболочку внутри Ежедневная работа с контейнером
lxc-destroy -n web1 Удаляет контейнер вместе с диском Только после проверки бэкапа

Команда lxc-destroy не спрашивает подтверждения и не кладёт данные в корзину — каталог с файловой системой удаляется сразу. Перед удалением скопируйте /var/lib/lxc/web1 на другой диск, если там есть что-то ценное.

Управление контейнером LXC из консоли: список, статус, вход и запуск
Лимит памяти прописывают в файле конфигурации контейнера, но на лету он не подхватывается — значение применится только после перезапуска.

Как ограничить контейнеру память и процессор

По умолчанию контейнер видит всю память хоста и может забрать её целиком, уронив соседей. Лимиты задаются в файле конфигурации /var/lib/lxc/web1/config — это обычный текстовый файл, который система читает при старте контейнера.

На современных системах с cgroup второй версии строки выглядят так:

lxc.cgroup2.memory.max = 512M
lxc.cgroup2.memory.swap.max = 256M
lxc.cgroup2.cpu.max = 50000 100000
lxc.start.auto = 1

Первая строка ставит потолок оперативной памяти в 512 МБ: при попытке выйти за него ядро убьёт процесс внутри контейнера — это и называют срабатыванием OOM, «нехватки памяти». Вторая разрешает вытеснить в файл подкачки ещё 256 МБ. Третья ограничивает процессор половиной ядра: 50000 микросекунд работы на каждые 100000 микросекунд периода. Четвёртая включает автозапуск контейнера при перезагрузке хоста.

После правки файла контейнер нужно перезапустить командами lxc-stop -n web1 и lxc-start -n web1 — на лету значения не подхватываются. Проверить, что лимит применился, проще всего изнутри: lxc-attach -n web1 -- free -m покажет память с учётом ограничения, а не всю память хоста.

Proxmox VE: когда веб-интерфейс удобнее консоли

Proxmox VE — бесплатная платформа виртуализации, которая умеет одновременно и KVM-виртуалки, и LXC-контейнеры, и управляется через браузер. Ставится она на голое железо или на выделенный сервер и занимает около 4 ГБ диска и 2 ГБ памяти под сам гипервизор.

Смысл перехода появляется, когда контейнеров больше пяти-шести. В интерфейсе видно потребление каждого, лимиты правятся мышью, снимки делаются в один клик, бэкапы ставятся на расписание. Восстановление из архива занимает 1–3 минуты против ручной пересборки.

Терминология там своя: контейнеры называются CT и получают числовые идентификаторы вроде 101 и 102, а виртуальные машины — VM. Под капотом это тот же LXC, поэтому конфигурации при желании правятся из консоли. Если контейнеров два-три и меняются они раз в квартал, ставить Proxmox незачем — набор команд lxc-* закрывает задачу и не отъедает ресурсы.

Частые ошибки при работе с LXC

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

  • Ожидать, что в контейнере заработает Windows или другая не-Linux система. Общее ядро делает это невозможным по устройству, а не по настройке.
  • Пытаться загрузить свой модуль ядра или поднять вложенную виртуализацию внутри арендованного контейнера — провайдеры такие вызовы блокируют.
  • Не ставить лимит памяти: один контейнер с утечкой забирает все 8 ГБ хоста и роняет остальные вместе с самим сервером.
  • Считать снимок состояния бэкапом. Снимок лежит на том же диске и исчезнет вместе с ним при отказе накопителя.
  • Хранить базу данных на контейнерном тарифе с плавающей памятью и удивляться отказам в выделении памяти в часы пиковой нагрузки.
  • Вызывать lxc-destroy до проверки резервной копии: команда удаляет файловую систему без подтверждения и без возможности отката.

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

LXC или Docker — что выбрать новичку? Ориентируйтесь на объект изоляции. Если вы упаковываете конкретное приложение и хотите переносить его между машинами — Docker. Если вам нужно окружение, похожее на отдельный сервер, куда вы ходите по SSH и ставите пакеты руками, — LXC.

Сколько памяти реально экономит контейнер по сравнению с виртуалкой? Накладные расходы LXC составляют 10–30 МБ против 200–500 МБ у KVM с той же ОС. На десяти экземплярах разница доходит до 2–5 ГБ, то есть примерно до половины памяти среднего сервера.

Можно ли запустить Windows в LXC-контейнере? Нет. Контейнер использует ядро Linux хоста, а Windows требует собственное ядро NT. Единственный вариант — полноценная виртуальная машина на KVM или Hyper-V.

Почему провайдер не даёт загрузить модуль ядра? Модули грузятся в общее ядро и действуют на всех соседей по физической машине. Разрешить это одному клиенту означало бы дать ему контроль над остальными, поэтому загрузка модулей в контейнерах закрыта.

Что означает «плавающая память» в контейнерном тарифе? Память не резервируется за вами при старте, а выдаётся из общего пула по факту запроса. В спокойное время доступно больше заявленного, в пиковое — процесс может получить отказ, даже если формально лимит не выбран.

Сохранятся ли данные в LXC после перезапуска? Да, файловая система контейнера лежит на диске хоста в /var/lib/lxc и переживает и перезапуск контейнера, и перезагрузку сервера. Это принципиальное отличие от Docker, где без подключённого тома изменения теряются.

Какая конфигурация нужна, чтобы держать свои контейнеры? Под три-четыре лёгких контейнера хватит 2 ядер, 2 ГБ памяти и 20 ГБ диска. Под десяток с базами и веб-серверами закладывайте 4 ядра, 8 ГБ памяти и 80 ГБ NVMe.

Итог

LXC — это отдельный Linux-сервер за 10–30 МБ накладных расходов, который стартует за пару секунд и хранит данные между перезапусками. Он выигрывает у KVM по плотности и цене, но не даёт ни своего ядра, ни Windows, ни собственных модулей. Docker решает другую задачу — упаковку одного приложения, и спокойно живёт внутри LXC-контейнера вторым слоем.

Выбирайте контейнер под сайты, ботов, стенды и мониторинг, а виртуальную машину — под базы данных, 1С и всё, где нужны гарантированные ресурсы. Сравнить конфигурации и цены по обеим схемам виртуализации можно в каталоге VPS и VDS: там собраны тарифы 44 площадок с фильтрами по памяти, дискам и локациям.

Поделиться:
👁 14 просмотров
Марина
Редактор · FREEHOSTING
Главный редактор FREEHOSTING. С 2020 года тестирует VDS, VPS и хостинг-провайдеров — арендует серверы, нагружает их реальными проектами и пишет честные обзоры по итогам. Помогает читателям выбирать хостинг под свои задачи: от Telegram-бота до production-сайта.