LXC (Linux Containers)
Linux Containers (LXC) - это технология виртуализации на уровне операционной системы, которая позволяет запускать несколько изолированных экземпляров Linux (контейнеров) на одном хосте. LXC обеспечивает легковесную альтернативу полной виртуализации, используя функции ядра Linux для изоляции процессов.
Преимущества LXC
Низкие накладные расходы : Контейнеры используют общее ядро с хост-системой
Быстрый запуск : Контейнеры стартуют за секунды
Эффективное использование ресурсов : Несколько контейнеров могут работать на одном хосте с минимальными затратами ресурсов
Изоляция : Каждый контейнер имеет собственное пространство имен процессов, сеть и файловую систему
Установка LXC
Ubuntu/Debian
Bash sudo apt update
sudo apt install lxc lxc-templates lxc-utils
CentOS/RHEL
Bash sudo yum install epel-release
sudo yum install lxc lxc-templates
Проверка установки
Все пункты должны быть отмечены как "enabled". Если есть отметки "disabled", возможно, потребуется настроить или обновить ядро.
Создание контейнеров
Использование шаблона download
Шаблон download позволяет загружать предварительно созданные образы для различных дистрибутивов.
Bash sudo lxc-create -n my-container -t download -- -d debian -r bookworm -a amd64
Где:
- -n my-container - имя контейнера
- -t download - использовать шаблон download
- -d debian - дистрибутив
- -r bookworm - релиз/версия
- -a amd64 - архитектура
Важно для пользователей из России : При создании контейнеров из России может возникать проблема с загрузкой образов с некоторых серверов, например, с https://fra1lxdmirror01.do.letsbuildthe.cloud/images/debian/trixie/amd64/default/. В этом случае включите VPN для успешного скачивания образов.
Альтернативный способ с указанием зеркала
Bash sudo lxc-create -n my-container -t download -- -d debian -r bookworm -a amd64 --server images.linuxcontainers.org
Список доступных образов
Чтобы просмотреть список доступных образов:
Bash sudo lxc-create -n dummy -t download -- --list
Управление контейнерами
Запуск контейнера
Bash sudo lxc-start -n my-container
Запуск с автоматическим подключением к консоли
Bash sudo lxc-start -n my-container -F
Подключение к контейнеру
Bash sudo lxc-attach -n my-container
Выполнение команды в контейнере без подключения
Bash sudo lxc-attach -n my-container -- command
Пример:
Bash sudo lxc-attach -n my-container -- apt update
Остановка контейнера
Bash sudo lxc-stop -n my-container
Принудительная остановка (если обычная остановка не работает)
Bash sudo lxc-stop -n my-container -k
Просмотр списка контейнеров
Просмотр информации о контейнере
Bash sudo lxc-info -n my-container
Клонирование контейнера
Bash sudo lxc-copy -n source-container -N new-container
Удаление контейнера
Bash sudo lxc-destroy -n my-container
Настройка контейнеров
Расположение файлов конфигурации
Файлы конфигурации контейнеров находятся в директории:
Text Only /var/lib/lxc/container-name/config
Основные параметры конфигурации
Сеть
Настройка моста (bridge) для сетевого подключения:
Text Only lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
Лимиты ресурсов
Ограничение CPU:
Text Only lxc.cgroup.cpuset.cpus = 0,1
lxc.cgroup.cpu.shares = 512
Ограничение памяти:
Text Only lxc.cgroup.memory.limit_in_bytes = 512M
lxc.cgroup.memory.memsw.limit_in_bytes = 1G
Автозапуск контейнера
Text Only lxc.start.auto = 1
lxc.start.delay = 5
Настройка AppArmor для расширенных возможностей
Для некоторых задач (например, выполнения команд вроде emerge в Gentoo) может потребоваться настройка профиля AppArmor:
Text Only lxc.apparmor.profile = generated
lxc.apparmor.allow_nesting = 1
Сетевая конфигурация
Настройка сетевого моста (bridge)
Установите необходимые пакеты:
Bash sudo apt install bridge-utils
Создайте файл /etc/network/interfaces.d/lxc-bridge:
Text Only auto lxcbr0
iface lxcbr0 inet static
bridge_ports none
bridge_fd 0
bridge_maxwait 0
address 10.0.3.1
netmask 255.255.255.0
up ip route add 10.0.3.0/24 dev lxcbr0
up iptables -t nat -A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
down iptables -t nat -D POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
down ip route del 10.0.3.0/24 dev lxcbr0
Активируйте интерфейс:
Настройка DHCP для контейнеров
Установите dnsmasq:
Создайте файл /etc/dnsmasq.d/lxc-dhcp:
Text Only interface=lxcbr0
dhcp-range=10.0.3.2,10.0.3.254,1h
dhcp-option=3,10.0.3.1
Перезапустите dnsmasq:
Bash sudo systemctl restart dnsmasq
Продвинутые возможности
Создание снимков (snapshots)
Для снимков LXC можно использовать файловую систему с поддержкой снимков, такую как LVM или BTRFS:
Bash # Создание снимка LXC на LVM
sudo lxc-snapshot -n my-container
# Восстановление из снимка
sudo lxc-snapshot -n my-container -r snap0
Ограничение ресурсов с помощью cgroups
Bash # Ограничение CPU
echo 512 > /sys/fs/cgroup/cpu/lxc/my-container/cpu.shares
# Ограничение памяти
echo 512M > /sys/fs/cgroup/memory/lxc/my-container/memory.limit_in_bytes
Миграция контейнеров между хостами
Остановите контейнер:
Bash sudo lxc-stop -n my-container
Архивируйте контейнер:
Bash cd /var/lib/lxc
sudo tar czf my-container.tar.gz my-container/
Перенесите архив на новый хост:
Bash scp my-container.tar.gz user@new-host:/tmp/
На новом хосте:
Bash cd /var/lib/lxc
sudo tar xzf /tmp/my-container.tar.gz
sudo lxc-start -n my-container
Решение проблем
Контейнер не запускается
Проверьте журналы:
Bash sudo lxc-start -n my-container -l DEBUG -o container.log
cat container.log
Проверьте конфигурацию:
Проблемы с сетью
Проверьте наличие сетевого интерфейса внутри контейнера:
Bash sudo lxc-attach -n my-container -- ip addr
Проверьте настройку моста на хосте:
Bash ip addr show lxcbr0
brctl show
Полезные ресурсы
Сравнение LXC с другими технологиями
Технология
Преимущества
Недостатки
LXC
Легковесность, система Linux в контейнере
Ограничен Linux-системами
Docker
Портативность, экосистема
Ориентирован на одно приложение в контейнере
KVM/QEMU
Полная изоляция, любая ОС
Высокие накладные расходы
LXD
Усовершенствованный LXC с REST API
Дополнительный уровень абстракции