Skip to content

Сравнение LXC, LXD, Docker, Podman и systemd-nspawn

Ключевые концепции

  • Системные контейнеры (LXC, LXD, systemd-nspawn): Эмулируют полноценную ОС (свои init, сервисы, пользователи).
  • Прикладные контейнеры (Docker, Podman): Заточены под запуск одного процесса/приложения с зависимостями.
  • OCI (Open Container Initiative): Стандарт формата контейнеров (образы, runtime), поддерживаемый Docker/Podman.

Детализация технологий

1. LXC (Linux Containers)

  • Уровень: Низкоуровневый инструментарий
  • Архитектура: Набор CLI-утилит (lxc-create, lxc-start)
  • Основа: Ядро Linux (cgroups + namespaces)
  • Цель: Ручное создание изолированных ОС-окружений
  • Особенности:
    • Требует глубокого знания cgroups/namespaces
    • Минимальные абстракции (сеть, хранилище)
    • Нет встроенной безопасности, образов, снапшотов
  • Использование: База для LXD, низкоуровневые задачи

2. LXD

  • Уровень: Высокоуровневый менеджер
  • Архитектура: Демон (lxd) + клиент (lxc)
  • Основа: LXC (контейнеры) + KVM (ВМ)
  • Цель: Управление системными контейнерами/ВМ как сервисом
  • Особенности:
    • Централизованные образы ОС (Alpine, Ubuntu, CentOS)
    • Снапшоты, live-миграция, кластеризация
    • Гибкие сети (OVN, bridge) и хранилища (ZFS, Ceph)
    • AppArmor/SECCOMP "из коробки"
  • Использование: Альтернатива ВМ, изолированные среды разработки

3. Docker

  • Уровень: Менеджер приложений
  • Архитектура: Демон (dockerd) + клиент (docker)
  • Основа: containerd/runc (OCI-совместимый)
  • Цель: Упаковка и доставка приложений
  • Особенности:
    • Dockerfile для сборки образов
    • Docker Hub (публичный реестр)
    • Слоистая файловая система (OverlayFS)
    • Интеграция с Kubernetes
  • Использование: Микросервисы, CI/CD, PaaS

4. Podman

  • Уровень: Менеджер приложений
  • Архитектура: Без демона (daemonless)
  • Основа: libpod (OCI-совместимый)
  • Цель: Безопасная замена Docker
  • Особенности:
    • Нативный rootless-режим (без SUID)
    • Поддержка Pod-ов (групп контейнеров)
    • Совместимость с Docker CLI (podmandocker)
    • Интеграция с systemd (генерация unit-файлов)
  • Использование: Безопасные среды, Kubernetes-разработка

5. systemd-nspawn

  • Уровень: Системная утилита
  • Архитектура: Компонент systemd (machinectl)
  • Основа: cgroups/namespaces
  • Цель: Легковесная контейнеризация для администрирования
  • Особенности:
    • Запуск из корневой ФС (без образов)
    • Глубокая интеграция с journald, networkd
    • Автомонтирование /proc, /sys
    • Нет снапшотов, сетевых драйверов
  • Использование: Отладка пакетов, тестирование сервисов

Сравнительная таблица

КритерийLXCLXDDockerPodmansystemd-nspawn
Тип контейнераСистемныйСистемный/ВМПрикладнойПрикладнойСистемный
АрхитектураИнструментыДемонДемонБез демонаУтилита
Требует rootДаОпциональноЧастичноНетОпционально
Поддержка OCI
Стандартные образыШаблоны ОСОС/ВМDocker HubOCI-репозитории
Снапшоты
СетьРучнаяSDN (OVN)BridgeCNI PluginsHost-only
КластерыSwarmчерез K8s
ИнтеграцияЯдроOpenStackK8sK8s, systemdsystemd

Когда что использовать?

  • 🖥️ Сервер/инфраструктура: LXD (системные контейнеры/ВМ)
  • 🚀 Микросервисы/CI/CD: Docker или Podman (прикладные контейнеры)
  • 🔒 Повышенная безопасность: Podman (rootless + daemonless)
  • 🛠️ Администрирование/отладка: systemd-nspawn (быстрая изоляция)
  • ⚙️ Низкоуровневый контроль: LXC (ручная работа с namespaces/cgroups)

seccomp

Контакты: bystrovno@basealt.ru