Назад | Перейти на главную страницу

Запуск контейнеров linux (lxc) на ubuntu для изоляции процессов веб-сервера (ruby / thin)

Я пытаюсь настроить сервер, на котором я буду запускать несколько приложений. В основном внутренние, но также могут быть проекты с открытым исходным кодом, такие как Redmine. Все они будут Rails / Ruby-приложениями / тестовыми скриптами, работающими в безголовых браузерах. По сути, я пытаюсь настроить внутреннюю среду, похожую на heroku, и мне нужна какая-то изоляция между этими запущенными процессами.

Сначала я наткнулся на тюрьмы chroot, а потом узнал о LXC. LXC, кажется, предлагает лучший контроль над обычными chroot-тюрьмами. У меня есть интерфейс nginx, и я хотел бы запускать процессы приложения веб-сервера (thin / mongrel / webrick) в изолированных контейнерах. Обычно мы просто запускаем эти процессы на локальном IP-адресе и подключаем к ним прокси-сервер nginx. Как лучше всего это сделать? Устанавливают ли люди статический мостовой IP-адрес для контейнера и указывают ли на него nginx? Как сделать так, чтобы веб-серверы, работающие в контейнерах, были доступны только для внешнего размещения?

Документация по LXC кажется немного скудной. Мы будем очень признательны за указатели на хорошие учебные руководства или HOWTO. Моя целевая среда развертывания - это 64-разрядная версия Lucid.

P.S. Я не гуру Linux. Так что будь нежным.

Предположим, что ваш собственный IP-адрес - 192.168.1.1, ваш шлюз - 192.168.1.254, а ваша сеть - 192.168.1.0/24.

Вы должны создать мостовой интерфейс на вашем хост-компьютере, как в / и т.д. / сеть / интерфейсы файл

 auto lo
 iface lo inet loopback

 auto br0
 iface br0 inet static
     address 192.168.1.1
     network 192.168.1.0
     netmask 255.255.255.0
     broadcast 192.168.1.255
     gateway 192.168.1.254
     bridge_ports eth0
     bridge_stp off
     bridge_fd 3
     bridge_hello 1
     bridge_maxage 5

а затем установите базовый ubuntu в LXC:

 apt-get install lxc vlan bridge-utils python-software-properties screen
 mkdir /lxc
 debootstrap oeniric /lxc/ubuntu
 chroot ubuntu
 locale-gen en_US.UTF-8
 apt-get update
 apt-get install lxcguest ssh
 passwd
 rm /etc/mtab
 ln -s /proc/mounts /etc/mtab
 exit

создать файл /lxc/ubuntu.config с содержанием

 lxc.utsname = ubuntu
 lxc.tty = 8
 lxc.rootfs = /lxc/ubuntu
 lxc.mount = /lxc/ubuntu.fstab
 lxc.network.type = veth
 lxc.network.flags = up
 lxc.network.link = br0
 lxc.network.name = eth0
 lxc.network.mtu = 1500
 lxc.network.ipv4 = 192.168.1.10/24

/lxc/ubuntu.fstab с участием

 none /lxc/ubuntu/dev/pts devpts defaults 0 0
 none /lxc/ubuntu/proc proc defaults 0 0
 none /lxc/ubuntu/sys sysfs defaults 0 0
 none /lxc/ubuntu/run tmpfs defaults 0 0

добавить к /lxc/ubuntu/etc/rc.local

 route add default gw 192.168.1.254

редактировать /lxc/ubuntu/etc/resolv.cont в соответствии с вашими потребностями.

Затем вы можете создать свою машину с

 lxc-create -f /lxc/ubuntu.config -n ubuntu

тогда начни

 lxc-start -n ubuntu

или остановить

 lxc-stop -n ubuntu

или, наконец, уничтожить

 lxc-destroy -n ubuntu

Ваша новая виртуальная машина будет иметь IP 192.168.1.10 и будет доступна в сети.

Если вы не хотите давать контейнеру внешние IP-адреса или не можете:

В Страница Debian Wiki на LXC упоминает два варианта выполнения этого с помощью NAT на хост-машине. Я использую подход с libvirt и до сих пор не испытывал с этим проблем.

Я не знаю, каково это под Ubuntu, но, вероятно, там все не так уж и сильно.

Страница Wiki может показаться хорошим источником информации, но сам сопровождающий говорит, что вам лучше обратиться к файлу. /usr/share/doc/lxc/README.Debian для получения актуальной информации.