OpenVZ это виртуальная система на уровне ОС которая позволяет виртуализировать Linux-на-Linux, что делает ее более лучшим решением чем chroot. Вы не можете полностью виртуализировать Linux, как в VMWare или KVM, но вы можете запускать другие дистрибутивы Linux ОС которые поддерживаемые OpenVZ на основном Linux сервере, например CentOS. Это позволяет разделять ОС в безопасном режиме, без затрат ресурсов на виртуализацию оборудования. Это отличный способ для изоляции областей пользователей в общеиспользуемых услугах таких как web-хостинг и dns-хостинг, не подвергая опасности основной сервер.
OpenVZ работает по принципу контейнеров а не виртуальных машин. Каждый контейнер представляет собой законченную Linux систему, способной выполнять необходимые задачи, в том числе авторизацию пользователей. Для этого нужно всего лишь запустить контейнер OpenVZ.
Вы можете создать свой контейнер “с нуля” или взять уже готовые шаблоны, которые доступны для скачивания. В разделе скачивания http://download.openvz.org/template/precreated/ , вы найдете шаблоны CentOS, Debian, Fedora, SuSE и Ubuntu. Так же в этом же разделе в директории Contrib вы найдете дополнительные шаблоны Gentoo, AltLinux и Slackware.
Чтобы начать прямо сейчас загрузите один из этих предварительно созданных шаблонов, которые представляют собой операционную систему сжатую в tar-архив. После того как вы загрузили шаблон, убедитесь что вы запустили ядро OpenVZ и сервис vz запущен. Только после этого вы сможете создать свой первый контейнер. используя следующие команды. В этом примере используется контейнер с CentOS 5.3. Замените имя моего контейнера на контейнер, который скачали вы.После выполнения всех шагов ваш контейнер OpenVZ будет запущен.
# mkdir /vz/template/cache
# cd /vz/template/cache
# mv ~/centos-5-x86_64-minimal-5.3-20090330.tar.gz .
# vzctl create 101 –ostemplate centos-5-x86_64-minimal-5.3-20090330
Creating container private area (centos-5-x86_64-minimal-5.3-20090330)
Performing postcreate actions
Container private area was created
# vzctl set 101 –ipadd 192.168.251.175 –save
Saved parameters for CT 101
# vzctl set 101 –nameserver 192.168.250.12 –save
Saved parameters for CT 101
# vzctl set 101 –hostname vz.example.com –save
Set hostname: vz.example.com
Saved parameters for CT 101
# vzctl start 101
Starting container …
Container is mounted
Adding IP address(es): 192.168.251.175
Setting CPU units: 1000
Configure meminfo: 65536
File resolv.conf was modified
Container start in progress…
# vzctl exec 101 ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 init [3]
18298 ? S<s 0:00 /sbin/udevd -d
19556 ? Ss 0:00 syslogd -m 0
19579 ? Ss 0:00 /usr/sbin/sshd
19596 ? Ss 0:00 sendmail: accepting connections
19603 ? Ss 0:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
19614 ? Ss 0:00 crond
19706 ? Rs 0:00 ps ax
# vzctl enter 101
entered into CT 101
В начале я создал контейнер основанный на шаблоне CentOS 5.3 и назначил ID контейнера 101 (по умолчанию OpenVZ ставит 0, но рекомендуется не использовать номера от 0 до 100). Установил IP-адрес контейнеру, указал nameserver и имя хоста.
И наконец запустил его. Когда контейнер был запущен я проверил его запустив с помощью команды exec утилиты vzctl команду ps -ax
Изнутри контейнера процесс init имеет PID 1, а снаружи это выглядит по другому:
# ps ax|grep init|grep -v grep
1 ? Ss 0:01 init [3]
17152 ? Ss 0:00 init [3]
Получается что процесс init в контейнере является потомком процесса init основной системы. В результате таблица процессов контейнера и основной системы будут различаться - это надо учитывать. Вы можете войти в контейнер используя ssh или “с черного входа” без использования пароля используя утилиту vzctl enter [ID контейнера]. При этом вы можете выдать административные права в рамках контейнеров их владельцам без опасности нанесения вреда вашему серверу, и одновременно можете управлять контейнерами без необходимости знания пароля root контейнера.
OpenVZ очень удобная и простая в эксплуатации система. С помощью нее можно легко организовать свой хостинг или другие публичные сервисы создавая индивидуальные контейнеры.