LXF162:Контейнеры Linux
|
|
|
Виртуализация. Запускайте несколько систем Linux, не истощая ресурсы.
Содержание |
LXC: Малая виртуализация
Не хватает буквально одного компьютера для нового проекта? Джон Лэйн показывает, как Контейнеры Linux снижают загрузку.
Мы часто слышим о виртуализации и о преимуществах, которые можно получить, разместив несколько систем на одном компьютере. Обычно это подразумевает запуск разных операционных систем – например, Windows и Linux, и требует наличия программ виртуализации, типа VirtualBox или VMWare. Программы эти эмулируют устройства и довольно требовательны к системным ресурсам. Однако, если вам нужно запустить несколько рабочих столов Linux на одном компьютере, лучше воспользоваться Linux Containers (LXC): это гораздо более легкое и эффективное решение, и оно является компонентом ядра Linux.
LXC позволяет изолировать сервисы в отдельных контейнерах. Контейнер – нечто вроде виртуальной машины, загружаемой и управляемой независимо от основной системы. Его можно создать и для целой системы, и для одного приложения – например, изолировать браузер или почтовые сервисы от web-сервисов, создав для них отдельные контейнеры.
Контейнерами можно управлять независимо друг от друга: запускать, останавливать, обновлять, переустанавливать, перемещать и удалять. Эта гибкость позволяет упростить работу с большой системой, разбив ее на меньшие, а стало быть, и легче управляемые части.
На нашем уроке мы рассмотрим настройку LXC и создадим базовый контейнер, который можно будет загрузить и войти в него. Затем мы расширим его – пусть поддерживает графический рабочий стол. LXC имеется в репозиториях большинства дистрибутивов. Ubuntu в своем последнем релизе – 12.04 Precise Pangolin – продвинулась еще на шаг вперед и теперь полностью поддерживает LXС «прямо из коробки». Тем не менее, чтобы воспользоваться всеми возможностями LXC, нам обязательно нужно понять, как они работают.
LXC, с помощью контрольных групп ядра Linux, сужает возможности дерева процессов, выставляя ограничения атрибутов процесса, таких как потребление процессора и памяти. При запуске контейнера создается контрольная группа на основе настроек контейнера, затем управление передается процессу init корневой файловой системы контейнера. Процесс init выполняет обычную загрузку системы, которая завершается появлением строки входа в систему.
Настройка хоста
Итак, с чего начнем? LXC состоит из двух частей – компонентов ядра и пользовательских утилит. Поэтому убедитесь, что у вас подходящее ядро, версии не менее 2.6.27 (командой uname -r), и установите пользовательские утилиты из менеджера пакетов дистрибутива. В Ubuntu можно выполнить команду sudo apt-get install lxc. В Arch Linux они находятся в пользовательском репозитории Arch (Arch User Repository), поэтому нужно скомпилировать и собрать их там.
Установив утилиты, проверьте, что необходимые компоненты ядра включены:
- lxc-checkconfig
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled
--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
§File capabilities: enabled
Если параметр Cgroup namespace имеет значение required вместо enabled, это известная ошибка, которую можно проигнорировать. Если есть другие отличия, перекомпилируйте ядро, включив эти опции. В большинстве дистрибутивов они включены по умолчанию, и проблем тут не должно быть.
Затем убедитесь, что файловая система ядра cgroup смонтирована. Делается это командой
# mount | grep cgroup
Если она не смонтирована, смонтируйте ее. Ее обычная точка монтирования – /cgroup:
# mkdir /cgroup
# echo “none /cgroup cgroup defaults 0 0” >> /etc/fstab
# mount /cgroup
Следующее, что нам понадобится – сетевой стек, который поддерживает хост и все контейнеры. Есть несколько способов его реализации, но проще всего применить мост. В Ubuntu 12.04 при установке LXC мост создается автоматически. В других дистрибутивах установите и настройте bridgeutils (советы найдутся в наших архивах – www.linuxformat.com/archives). Итак, пусть наш мост создан и называется br0.
Наш первый контейнер
Попробуем запустить наш первый контейнер, просто для проверки, что все работает:
# lxc-execute -n mycontainer /bin/bash
# pstree
lxc-init---bash---pstree
# exit
Может показаться, что команда lxc-execute ничего не сделала; но она запустила Bash внутри контейнера и оставила вас в командной строке Bash этого контейнера. Взгляните на дерево процессов – в контейнере их всего три. Наш контейнер весьма примитивен, и он по-прежнему пользуется общей корневой файловой системой и сетью. Но с несложным файлом конфигурации это можно изменить. Создайте новый файл с именем /etc/lxc/mycontainer.conf:
lxc.utsname = mycontainer
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.ipv4 = 10.0.3.1/8
Он дает нашему контейнеру собственное имя (его имя хоста – mycontainer) и сетевой адрес (выберите подходящий свободный IP-адрес). Тип сети veth велит LXC использовать сетевой мост, а сетевая ссылка – это имя моста, в данном случае br0. Запустите контейнер и загляните внутрь:
# lxc-execute -n mycontainer -f /etc/lxc/mycontainer.conf
/bin/bash
# hostname
mycontainer
# ping myhost
У вас есть доступ к компьютерам локальной сети, но не более того. Чтобы выйти за пределы локальной сети, понадобится создать маршрут к шлюзу по умолчанию – например, так: route add default gw myrouter. По окончании работы с контейнером выйдите из него комндой exit.
Загружаем его
Наш пример рассматривал контейнер приложений – в нем в контейнере запускалось одно приложение (Bash). Уже замечательно; но по-настоящему-то полезны системные контейнеры, в которых своя корневая файловая система и которые выглядят как отдельные компьютеры.
Продемонстрируем это: создадим системный контейнер. Позже мы добавим к нему графический рабочий стол, но пока в нем будет базовая загружаемая система. Изменим файл /etc/lxc/mycontainer.conf, чтобы дать контейнеру доступ к необходимым ресурсам:
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
lxc.utsname = mycontainer
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0
# only explicit device access
lxc.cgroup.devices.deny = a
# Memory Devices
lxc.cgroup.devices.allow = c 1:3 rwm # /dev/null null stream
lxc.cgroup.devices.allow = c 1:5 rwm # /dev/zero zero stream
lxc.cgroup.devices.allow = c 1:7 rwm # /dev/full full stream
lxc.cgroup.devices.allow = c 1:8 rwm # /dev/urandom blocking random stream
lxc.cgroup.devices.allow = c 1:9 rwm # /dev/random non blocking stream
# Terminals
lxc.tty = 2 # local ttys: /dev/tty1 and /dev/tty2
lxc.cgroup.devices.allow = c 4:0 rwm # /dev/tty0 current virtual terminal
lxc.cgroup.devices.allow = c 4:3 rwm # /dev/tty3 host’s /dev/tty3
lxc.cgroup.devices.allow = c 5:0 rwm # /dev/tty current tty device
lxc.cgroup.devices.allow = c 5:1 rwm # /dev/console system console
lxc.cgroup.devices.allow = c 5:2 rwm # /dev/ptmx pseudo terminal creator
lxc.cgroup.devices.allow = c 136:* rwm # /dev/pts/* psuedo terminal slaves
# root filesystem
lxc.rootfs = /srv/lxc/mycontainer
# mounts
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
lxc.mount.entry = noPress ALT-F3 to switch to tty3 or sne /n LXCsrv/lxc/mycontainer/dev/pts devpts defaults 0 0
lxc.mount.entry = none /srv/lxc/mycontainer/dev/shm tmpfs defaults 0 0
lxc.mount.entry = none /srv/lxc/mycontainer/proc proc defaults 0 0
lxc.mount.entry = none /srv/lxc/mycontainer/sys sysfs defaults 0 0
Теперь в файле конфигурации гораздо больше параметров. Настройки сети похожи на предыдущие, только назначение IP-адреса предоставлено процедуре загрузки контейнера.
Затем нам нужно ограничить контейнер в правах, иначе он распояшется и будет покушаться на устройства главного компьютера. Лучше всего запретить все подряд, разрешив только самое необходимое для конкретной конфигурации. В последующих разделах мы разрешим доступ к повсеместно используемым устройствам памяти, предполагаемых в типичной системе.
OpenVZ
Аналогичная технология – OpenVZ, и ее код составляет большую часть кода LXC. Технология OpenVZ является более зрелой, но для ее работы нужно залатать ядро, и ее поддерживают немногие дистрибутивы (в Ubuntu поддержка прекратилась после 8.04 Hardy Heron). Документация OpenVZ основана на Fedora Core, RHEL и CentOS.
Если вы хотите подобраться поближе к «уровню предприятия» и у вас дистрибутив на базе Red Hat, зайдите на www.openvz.org. Однако LXC реализованы в основной версии ядра и находятся в активной разработке, поэтому мы уделяем им внимание.
Знать об OpenVZ полезно еще и потому, что здесь есть готовые шаблоны для различных дистрибутивов, и ими можно воспользоваться в LXC. Ищите шаблоны по ссылке http://wiki.openvz.org/Download/template/precreated.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Три — волшебное число
Внутри контейнеров можно пользоваться терминальными устройствами трех типов. Если процессу необходим терминал, например, при подключении к контейнеру по SSH, то по его запросу создается псевдотерминал. Никаких специальных настроек, кроме настройки доступа в /dev/ptmx и /dev/pts/* аналогично нашему примеру, не требуется.
Два других типа – различные представления базового устройства tty. У правильно настроенного контейнера есть доступ к устройствам tty главного компьютера, а также к собственным локально созданным устройствам tty. Параметр lxc.tty определяет, сколько устройств можно создать локально внутри контейнера. Например, если он равен 2, то в LXC автоматически появятся локальные терминалы /dev/tty1 и /dev/tty2, доступные по команде lxc-console. Чтобы воспользоваться терминалом основного компьютера, выберите устройство с большим номером и настройте доступ к нему (в нашем примере – /dev/tty3). Контейнеру можно пользоваться терминалом главного компьютера, когда главному компьютеру терминал не нужен: сделайте так, чтобы процессы getty не подключались к этому tty (в большинстве дистрибутивов это настраивается в /etc/inittab).
В нашем примере в контейнере взят терминал основного компьютера /dev/tty3, доступный как виртуальный терминал (для его открытия нажмите Alt + F3). В контейнере также есть терминалы /dev/tty1 и /dev/tty2 – доступа к обоим обеспечит команда lxc-console. Последними в нашей конфигурации задаются точки монтирования файловой системы контейнера; главная из них – корневая файловая система контейнера. Это обычный каталог на главном компьютере. Выберите подходящий каталог – скажем, /srv/lxc/mycontainer – и заполните его с помощью соответствущих утилит вашего дистрибутива.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
В Arch Linux вам поможет утилита mkarchroot (предварительно установите пакеты devtools и base-devel):
# mkdir /srv/lxc
# mkarchroot /srv/lxc/mycontainer base
В Debian/Ubuntu для этого служит утилита debootstrap:
debootstrap --arch=i386 precise /srv/lxc/ubuntu_debootstrap http://archive.ubuntu.com/ubuntu
Чтобы подготовиить корневую файловую систему контейнера для LXC, в ней нужно кое-что поменять. При запуске системного контейнера LXC вызывает процесс init внутри контейнера, запускающий загрузочную последовательность. Но чтобы загрузка работала внутри контейнера, ее стоит подправить, так как многое из обычного запуска и выключения системы в контейнере не требуется. Меняют для этого скрипты init, а конкретные действия зависят от дистрибутива.
В Ubuntu версий менее 12.04 есть пакет lxcguest, содержащий необходимые поправки. В версии 12.04 стандартные настройки учли настройки LXC, и никаких поправок не требуется. В наших архивах есть примеры скриптов запуска для Arch Linux. Затем нужно создать файлы для тех устройств, доступ к которым был разрешен в файле конфигурации. Обычно деревом устройств в /dev управляет демон udev, но в контейнере это не работает. Мы должны вручную создать файлы устройств в соответствии с файлом конфигурации. Для начала создадим общие устройства, необходимые большинству контейнеров:
cd /srv/lxc/mycontainer/dev
mknod -m 666 null c 1 3 # null device
mknod -m 666 zero c 1 5 # zero device
mknod -m 666 full c 1 7 # full device
mknod -m 666 random c 1 8 # blocking random device
mknod -m 666 urandom c 1 9 # non blocking random device
mknod -m 666 tty0 c 4 0 # system console
mknod -m 666 tty c 5 0 # process’s current tty device
mknod -m 600 console c 5 1 # system console aka tty0
mknod -m 666 ptmx c 5 2 # pseudo terminal creator
mknod -m 600 initctl p # init control channel
mkdir -m 755 pts # pseudo terminal slaves
mkdir -m 1777 shm # shared memory
ln -s /proc/self/fd fd # for backward compatibility
Также нужно создать устройства tty. В нашей конфигурации их имеется три:
mknod -m 666 tty1 c 4 1 # tty1
mknod -m 666 tty2 c 4 2 # tty2
mknod -m 666 tty3 c 4 3 # tty3 (host vt)
Перед запуском контейнера войдем в него через chroot и выполним все необходимые действия для настройки. Например, можно задать пароль пользователя root, создать пользователей и установить программы. После монтирования нескольких зависимых файловых систем chroot получит функциональность, достаточную для установки пакетов программ:
# mount proc -t proc /srv/lxc/mycontainer/proc
# mount devpts -t devpts /srv/lxc/mycontainer/dev/pts
# chroot /srv/lxc/mycontainer
Задайте пароль пользователя root и создайте учетные записи других пользователей:
echo “root:myrootpassword” | chpasswd
useradd -c ‘My User’ -m -s /bin/bash myuser
echo “myuser:mypassword” | chpasswd
На этом настройка контейнера закончена – остальное можно сделать после его загрузки. Так что пока выйдем из chroot:
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
# exit
# umount /srv/lxc/mycontainer/dev/pts
# umount /srv/lxc/mycontainer/proc
Контейнер настроен; пора его запустить. Создайте его в LXC и выполните команды:
# lxc-create -n mycontainer -f /etc/lxc/mycontainer.conf
‘mycontainer’ created.
# lxc-start -n mycontainer
Если все хорошо, контейнер загрузится. Нажмите Alt + F3, чтобы переключиться на tty3, или откройте консоль LXC для входа в систему:
# lxc-console -n mycontainer
Зайдите в контейнер от имени root с паролем, заданным ранее. Осмотрите новую систему и повыполняйте всякие команды. Закончив, отключитесь от консоли, нажав Ctrl + A, затем q. Если перед отключением не выходить из системы, позже можно подключиться к тому же сеансу.
Вернувшись на главный компьютер, рассмотрим некоторые утилиты LXC. Команда lxc-ls выводит список всех известных контейнеров в одной строке и всех запущенных в следующей. Дерево процессов запущенного контейнера покажет команда lxc-ps -n mycontainer. Это обертка вокруг стандартной команды ps, поэтому вслед за именем контейнера можно указывать любые аргументы ps. Процессы контейнера также прекрасно показывает утилита pstree. Остановить контейнер можно командой lxc-stop -n mycontainer, но это «жесткая» остановка – все равно что выдернуть вилку из розетки. Лучше выполнить внутри контейнера команду shutdown -h now. Теперь проверим-ка наш ssh:
# ssh mycontainer
- shutdown -h now
Рабочий стол внутри контейнера
Пора сделать с нашим контейнером кое-что более полезное. Мы установим базовую версию рабочего стола X и свяжем его с одним из виртуальных терминалов основного компьютера. Это базовая версия Xorg с драйверами VESA – джентльменский набор для запуска рабочего стола внутри контейнера. Употребим нашу мышь и клавиатуру и свяжем рабочий стол с виртуальным терминалом 9 (Alt + F9). Добавьте следующие параметры в файл конфигурации контейнера /etc/lxc/mycontainer.conf:
# VESA XOrg Desktop
lxc.cgroup.devices.allow = c 4:9 rwm # /dev/tty9 X Desktop
lxc.cgroup.devices.allow = c 13:* rwm # /dev/input/* input devices
lxc.cgroup.devices.allow = c 10:63 rwm # /dev/vga_arbiter
lxc.cgroup.devices.allow = c 1:1 rwm # /dev/mem
Указанные права дают доступ к необходимым устройствам ввода и вывода. При настройке другого графического драйвера потребуется доступ к другим устройствам. Создайте соответствующие файлы устройств:
cd /srv/lxc/mycontainer/dev
mkdir -m 755 input # input devices
mknod -m 666 input/mice c 13 63 # mice
mknod -m 666 tty9 c 4 9 # vt for display
mknod -m 666 vga_arbiter c 10 63 # vga display
mknod -m 666 mem c 1 1 # memory
При любых изменениях в файле конфигурации LXC должен удалить и снова создать контейнер. При этом никакие файлы не удаляются. Убедившись, что контейнер остановлен, воссоздайте его, перезапустите и войдите в контейнер:
lxc-destroy -n mycontainer
lxc-create -n mycontainer -f /etc/lxc/mycontainer.conf
screen -dmS mycontainer lxc-start -n mycontainer
ssh root@mycontainer
Внутри контейнера установите необходимые пакеты Xorg для рабочего стола. В Arch Linux:
pacman -S xorg-server xorg-xinit xf86-input-{keyboard,mouse} xf86-video-vesa
pacman -S xorg-twm xorg-xclock xterm
Единственная настройка Xorg нужна для клавиатуры и мыши, потому что для автоматического определения устройств в Xorg используется udev, а в контейнере его нет. Настройки Xorg хранятся в новом файле /etc/X11/xorg.conf.d/10-input.conf:
# /etc/X11/xorg.conf.d/10-input.conf
Section “ServerFlags”
Option “AutoAddDevices” “False”
EndSection
Section “ServerLayout”
Identifier “Desktop”
InputDevice “Mouse0” “CorePointer”
InputDevice “Keyboard0” “CoreKeyboard”
EndSection
Section “InputDevice”
Identifier “Keyboard0”
Driver “kbd”
Option “XkbLayout” “gb”
EndSection
Section “InputDevice”
Identifier “Mouse0”
Driver “mouse”
Option “Protocol” “auto”
Option “Device” “/dev/input/mice”
EndSection
Наконец, теперь можно запустить внутри контейнера Xorg и увидеть рабочий стол:
startx -- :9 vt09
Только что мы создали контейнер с доступом к устройствам главного компьютера. Мы вручную создали необходимые файлы устройств и установили нужные пакеты Xorg. И мы запустили рабочий стол внутри контейнера. А если у вас последняя версия Ubuntu 12.04 Precise Pangolin, вы можете воспользоваться шаблонами Ubuntu Cloud. Создать новый контейнер просто:
$ sudo apt-get install lxc
$ sudo lxc-create -t ubuntu-cloud -n mycontainer
$ sudo lxc-start -n mycontainer
Желая воспользоваться сервисами главного компьютера (как в нашем примере с запуском рабочего стола), как и прежде, нужно изменить настройки LXC. Образы облака можно загрузить и вручную с https://cloud-images.ubuntu.com, но файл настроек LXC придется создать самостоятельно. Примеры – на нашей странице с архивами для этого номера (www.linuxformat.com/archives).
LXC – относительно новый компонент платформы Linux. Это прекрасный проект, и Canonical использует его даже в JuJu. А поскольку LXC получили прописку в основной версии ядра, их ждет большое будущее. |