Определение простыми словами
LXD (Linux Container Daemon) — это надстройка над LXC, которая превращает низкоуровневые системные контейнеры в удобный инструмент с единым API, снапшотами, миграцией и поддержкой образов. В отличие от Docker, LXD запускает полноценное окружение ОС — со своим init-процессом, systemd, сетевыми интерфейсами и демонами — а не один изолированный процесс.
Контейнеры LXD используют пространства имён (namespaces) и cgroups ядра Linux. Накладные расходы минимальны: запуск занимает менее секунды, а потребление памяти на 30–50% ниже, чем у KVM-машины с аналогичной нагрузкой. С версии 4.0 LXD поддерживает также виртуальные машины через QEMU — из единого интерфейса управляются и контейнеры, и ВМ.
Сравнение
| Параметр | LXD | Docker | KVM |
|---|---|---|---|
| Модель изоляции | Системный контейнер (namespace + cgroups) | Контейнер приложения | Полная аппаратная виртуализация |
| Накладные расходы | ~1–3% CPU | ~1–2% CPU | 5–15% CPU |
| Запуск | <1 с | <1 с | 10–30 с |
| Ядро ОС | Общее с хостом | Общее с хостом | Отдельное ядро |
| Live-миграция | Да (CRIU) | Нет | Да (vMotion / virsh) |
| Типичное использование | Мультиарендные среды, VPS-хостинг | Микросервисы, CI/CD | Изолированные ВМ, Windows-гости |
Кейсы использования
- VPS-хостинг на одном сервере — 50–100 контейнеров LXD на bare-metal машине с 128 ГБ RAM: каждый клиент получает изолированную Ubuntu/Debian с root-доступом.
- Dev/staging-окружения — быстрый клон профиля за 2–3 секунды через
lxc copy prod-container staging-container. - CI-пайплайны — эфемерные контейнеры для сборок: создаются, выполняют задачу и удаляются автоматически.
- Тестирование сетевых топологий — встроенная поддержка мостовых и macvlan-сетей позволяет эмулировать сложные топологии без дополнительных инструментов.
- Негативный пример: LXD не подходит для запуска Windows-гостей или нагрузок, требующих другого ядра (кастомные модули, старые дистрибутивы с несовместимым ядром) — в этих случаях нужен KVM или Proxmox VE.
Технические детали
LXD общается через Unix-сокет /var/snap/lxd/common/lxd/unix.socket или HTTPS REST API. Основные операции:
# Установка через snap
snap install lxd
# Инициализация (интерактивный wizard)
lxd init
# Создать и запустить контейнер Ubuntu 22.04
lxc launch ubuntu:22.04 my-container
# Список контейнеров с метриками
lxc list
# Снапшот
lxc snapshot my-container snap0
# Восстановление из снапшота
lxc restore my-container snap0
# Лимиты ресурсов
lxc config set my-container limits.cpu 2
lxc config set my-container limits.memory 2GB
# Проброс порта (NAT)
lxc config device add my-container myport8080 proxy listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:80
# Live-миграция на удалённый хост
lxc move my-container remote-host:my-container --live
Хранилища образов: LXD подключается к публичному серверу образов images.linuxcontainers.org, где доступно более 50 дистрибутивов. Локальный кэш ускоряет повторный запуск одного образа до 0.3 с.
🔥 Где это применяется
Частые вопросы
Чем LXD отличается от LXC?
LXC — низкоуровневые инструменты (liblxc, lxc-create, lxc-start). LXD — демон поверх LXC с REST API, системой образов, профилями, снапшотами и поддержкой кластеров. Управление через единую команду lxc.
Можно ли запустить LXD внутри виртуальной машины?
Да, LXD работает внутри KVM или любой ВМ с ядром Linux ≥ 4.15. Для вложенной виртуализации (nested containers) включите опцию security.nesting=true на уровне контейнера.
Поддерживает ли LXD Windows-контейнеры?
Нет. LXD использует ядро хост-системы (Linux), поэтому запуск Windows-гостей возможен только через встроенную поддержку QEMU-ВМ в LXD 4.0+, а не через контейнеры.
Как LXD управляет сетью?
LXD создаёт мостовой интерфейс lxdbr0 с встроенным DHCP (dnsmasq) и NAT. Поддерживаются также macvlan, SR-IOV и OVN для production-кластеров.