Представлен первый стабильный выпуск инструментария LXC 1.0, официально объявленный пригодным для промышленного применения. В рамках проекта развивает набор выполняющихся в пространстве пользователя инструментов для организации работы изолированных контейнеров, позволяющих изолировать процессы и ресурсы при помощи штатных механизмов ядра Linux, таких как пространства имён (namespaces) и группы управления (cgroups). Поддержка выпуска исправлений для ветки LXC 1.0 будет осуществляться в течение пяти лет. Готовые пакеты с LXC 1.0 подготовлены для Ubuntu Linux.

В отличие от технологий виртуализации на основе гипервизоров, контейнеры выполняются под управление единого ядра Linux, без необходимости запуска отдельного ядра и набора драйверов в каждом окружении. По своим возможностям контейнеры занимают нишу между изоляцией при помощи chroot и полноценными средствами виртуализации. В состав инструментария LXC входит библиотека liblxc, набор утилит (lxc-create, lxc-start, lxc-stop, lxc-ls и т.п.), шаблоны для построения контейнеров и набор биндингов для различных языков программирования.

Для изоляции процессов, сетевого стека ipc, uts и точек монтирования используется механизм пространств имён (namespaces). Для ограничения ресурсов применяются cgroups. Кроме того, для понижения привилегий и ограничения доступа задействованы такие возможности ядра, как профили Apparmor и SELinux, политики Seccomp, Chroots (pivot_root) и capabilities.

Ключевые улучшения в LXC 1.0:

  • Поддержка полностью непривилегированных контейнеров, работающих без возможности получения прав суперпользователя внутри;
  • Стабилизация API (liblxc1) для создания и управления контейнерами;
  • Поставка официальных биндингов для использования API в программах на языках python3, lua, ruby и Go;
  • Гибкая система размещения контейнеров в различных типах хранилищ. Поддерживается размещение контейнеров в обычном дереве директорий, в ФС btrfs и zfs, в lvm, loop-устройствах, aufs и overlayfs;
  • Поддержка клонирования работающих контейнеров и возможность заморозки их состояния через создание снапшотов;
  • Сокращенный, но более целостный, набор утилит;
  • Обновлённая и полноценная документация;
  • Поддержка нескольких методов создания контейнеров на основе недавно сгенерированных образов;
  • Поставка шаблонов для создания контейнеров на основе популярных дистрибутивов Linux. Шаблоны подготовлены для Alpine Linux, Alt Linux, Arch Linux, busybox, CentOS, Cirros, Debian, Fedora, OpenMandriva, OpenSUSE, Oracle, Plamo, sshd, Ubuntu Cloud и Ubuntu. В контейнере также можно запустить окружение Android;
  • Возможность запуска графического окружения внутри контейнера. Пример запуска Google Chrome, Steam и Skype в отдельных контейнерах.

Пример использования контейнеров:


# Создадим контейнер с именем "p1", используя шаблон "ubuntu"
sudo lxc-create -t ubuntu -n p1

# Запустим контейнер в фоне
sudo lxc-start -n p1 -d

# Войдём в контейнер через консоль (для выхода нужно набрать ctrl-a + q)
sudo lxc-console -n p1

# Войдём в контейнер через запуск bash, минуя логин
sudo lxc-attach -n p1

# Войдём в контейнер через SSH:
sudo lxc-info -n p1
ssh ubuntu@полученный_ip

# Заморозим состояние контейнера
sudo lxc-freeze -n p1

# Разморозим состояние контейнера
sudo lxc-unfreeze -n p1

# Пробросим устройства в контейнер
sudo lxc-device add -n p1 /dev/ttyUSB0 /dev/ttyS0

# Создадим снапшот (при размещении контейнера в LVM или Btrfs)
sudo lxc-snapshot -n p1 -c snap-comment
sudo lxc-snapshot -n p1 -L -C

# Откатим состояние на созданный снапшот
sudo lxc-snapshot -n p1 -r snap0

# Создадим новый контейнер на основе снапшота
sudo lxc-snapshot -n p1 -r snap0 p1-snap0

# Завершим работу контейнера
sudo lxc-stop -n p1

# Принудительно закроем контейнер
sudo lxc-stop -n p1 -k


# Для настройки сети создадим файл конфигурации
 cat /var/lib/lxc/p1/config
# Проброс физического сетевого интерфейса
lxc.network.type = phys
lxc.network.link = eth2
lxc.network.name = eth1

# Создание виртульного сетевого интерфейса
lxc.network.type = veth
lxc.network.hwaddr = 00:16:3e:3a:f1:c1
lxc.network.flags = up
lxc.network.link = lxcbr0
lxc.network.name = eth0


Источник: http://www.opennet.ru/opennews/art.shtml?num=39154