Блог Мазепина Василия

Пишу о том, что кажется интересным

LXC, давай дружить?

2015-09-13 22:06 | Комментарии

Доброго времени суток, коллеги и гости.

Как часто приходится решать такую проблему, как необходимость наличия нескольких версий различного ПО. В процессе разработки может возникнуть необходимость иметь множество софта (php различных версий, mysql, mariadb, mongodb, posgres, не дай Бог nodejs и т.д.), которое в конце концов загрязнит вам ваш компьютер.
Эту проблему для Linux-пользователей вполне сносно решает такой инструмент как LXC. Предположим, на моем рабочем инструменте необходимо развернуть сайт, для которого php, nginx, mysql будут отличаться от тех, что у меня на рабочей ОСи.
Можно конечно создать для этого целую виртуальную машину, аля VirtualBox, но в этом варианте я нахожу фатальный недостаток - виртуальные машины эмулируют всё железо, вследствие чего используется просто огромное количество ресурсов компьютера. Хотелось что то полегче.
Итак, представляю вам LXC - новый подход к разработке и организации программного окружения. В отличии от вышеуказанного, LXC не эмулирует железо, и использует уже установленное ядро.
Да да, внутренняя Ось использует часть вашей корневой. Но отсюда выплывает одно ограничение - использовать LXC можно только с ядром Linux (никаких яблочек и окошечек, только пингвин).

Ну чтож, начнем :

Установка LXC

Использую Ubuntu 15.04

terminal
1
sudo apt-get install lxc -y

Создание контейнера

Например, приготовим контейнер с битриксом на основе базового образа ubuntu. Дадим имя нашему контейнеру - bitrix.

terminal
1
sudo lxc-create -t ubuntu -n bitrix

Настройка перед запуском

После того, как будет создан контейнер, нам нужно немного поправить конфигурацию запуска:

terminal
1
sudo vim /var/lib/lxc/bitrix/config
terminal
1
2
3
4
5
6
7
8
lxc.network.type = veth
lxc.network.link = virbr0 # по умолчанию lxcbr0, изменить на virbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:4c:b7:a7
lxc.include = /usr/share/lxc/config/ubuntu.common.conf
lxc.arch = amd64
lxc.rootfs = /var/lib/lxc/bitrix/rootfs
lxc.utsname = bitrix

Если необходимо, чтоб файлы из вашей корневой машины маппились в контейнер, можно его настроить:

terminal
1
lxc.mount.entry=%путь_откуда_маппить% /var/lib/lxc/bitrix/rootfs/%путь_куда_маппить% none bind,create=dir 0 0

Поехали

Запускаем наш контейнер(читай - включи виртуальную машину)

terminal
1
sudo lxc-start -n bitrix

Понаехали

Можно зайти сразу как админ:

terminal
1
sudo lxc-attach -n bitrix

Или как обычный смертный(изначально у обычного смертного login и password “ubuntu”)

terminal
1
sudo lxc-console -n bitrix

Итого

И вот, у вас теперь есть вход в вашу машину, где можно делать всё что угодно) Кстати, подключиться к контейнеру по ssh вам никто не запретит (тыжпрограммист, ёпта). И теперь туда мы можем установить свой веб-сервер, сервер БД, php, и все будет работать в контейнере, а код весь будет храниться “у тебя”. Далее лишь настроим окружение для работы, и все будет работать.

Ах да, чуть не забыл!

С днем программиста, товарищи коллеги!!!

Комментарии