Решил посмотреть, что же такое lxc-контейнеры.
Материала на эту тему в инете — кот наплакал.
Решил немного сам поделиться, что понял за вечер.
Сетевой мост
Нам обязательно нужен сетевой мост. Как это сделать — написано 100500 раз на разных языках. Например тут.
У меня это выглядит так.
Файл /etc/sysconfig/network-scripts/ifcfg-br0 с таким содержимым:
1 2 3 4 5 6 | DEVICE=br0 TYPE=Bridge BOOTPROTO="dhcp" ONBOOT="yes" NM_CONTROLLED="no" DELAY=0 |
Файл /etc/sysconfig/network-scripts/ifcfg-p2p1 с таким:
1 2 3 4 5 6 7 | DEVICE="p2p1" TYPE="Ethernet" HWADDR=50:E5:49:3E:D4:A8 BOOTPROTO="none" ONBOOT="yes" NM_CONTROLLED="no" BRIDGE="br0" |
И дополнительно я включил службу network:
1 | systemctl enable network.service |
С сетевым мостом, я думаю, ты разберешься сам 😉
Условимся лишь, что наименование интерфейса моста — br0, просто в дальнейшем это будет нужно.
Установка lxc
Все предельно просто:
1 | yum install lxc lxc-templates lxc-extra |
Сразу оговорюсь, что в Fedora 17 шаблонов толком нет никаких, обновляйся.
Проверяем какие есть шаблоны так:
1 | ls -l /usr/share/lxc/templates |
Ага! Начинаешь понимать суть вещей 😉
Создаем контейнер
Контейнер создается тоже достаточно просто, например Debian 6:
1 | lxc-create -t debian -n debian |
Ключи тут:
- -t — какой используем шаблон (имя без lxc- из каталога, предыдущая команда);
- -n — имя контейнера.
Или вот так создадим контейнер Fedora 18:
1 | lxc-create -t fedora -n my-fedora-container -- -R 18 |
Ключи тут:
- -R — ну ты же уже сам догадался, да, это версия.
Синтаксис шаблонов — это простые shell-скрипты.
Так, чтобы получить Debian 7 я скопировал шаблон lxc-debian в lxc-debian7 и изменил:
1 | SUITE=${SUITE:-squeeze} |
на
1 | SUITE=${SUITE:-wheezy} |
Все просто. И создание контейнера будет выглядеть уже так:
1 | lxc-create -t debian7 -n more-debian |
Контейнеры создаются в каталоге /var/lib/lxc.
А просто посмотреть имеющиеся контейнеры можно командой:
1 | lxc-ls |
ОБЯЗАТЕЛЬНО! В конфигурационном файле контейнера надо заменить наименование соединения, иначе не запустится контейнер.
Например для контейнера с именем debian мы сделаем это так:
1 2 | cd /var/lib/lxc/debian vim config |
Вместо vim используй любимый текстовый редактор.
Исправляем строку:
1 | xc.network.link = virbr0 |
вот так:
1 | xc.network.link = br0 |
Помнишь, мы условились об имени интерфейса моста? 😉
Запуск контейнера
Рекомендую запускать контейнер внутри screen. Потому заранее установи его.
А запускается контейнер так:
1 2 | screen lxc-start -n debian |
где надо указать лишь имя контейнера.
Прямо в терминале запустится другой Linux 🙂
Не пугайся, если ты делал это в screen, то можешь выйти нажав Ctrl-A D.
Важно! Не пытайся выключать контейнеры.
У меня какое-то странное было поведение с debian’овским контейнером,
после выключения он не включался больше до перезагрузки хостовой машины.
Может это баг, я еще не разобрался.
Остановка контейнера
Тоже все просто:
1 | lxc-stop -n debian |
Напоследок
У lxc еще полно всяких команд. Я в них не разбирался еще.
Если найдешь что-то интересное — напиши в комментариях, я обновлю пост.
Ну во первых информации не кот наплакал а много (не надо мата тут и даже намека на него), и мы с гренлионом пол года назад это крутили под федорой ( я его заставил ) 🙂
Но дело сейчас в другом. Примерно 2 недели назад Гудман собрал докер под федору и вся информация про лхс потеряла актуальность. Я пытался какого нибудь с конфы про это рассказать но все тормозят как обычно и даже гренлион. Один Тигро это заценил, но ему некогда лхц дергать 🙁
Может в свете этого топика хоть ты оценишь как это прикольно — http://goldmann.pl/blog/2013/09/25/docker-and-fedora/
Не оценил. Для моих задач — lxc выше крыши.
У докера очень специфический способ применения, без грида типа месоса не шибко полезный. Фактически то же даёт запуск средствами systemd
lxc-sl -> lxc-ls
Спасибо, исправил.