Виртуальная машина (VM) является довольно общим термином для многих технологий виртуализации.
Существует много вариантов технологий виртуализации, но основными из них являются:
- Аппаратный уровень виртуализации
- Виртуализация на уровне операционной системы
qemu-kvm
и VMWare
являются примерами первого. Они используют гипервизор для управления виртуальными средами, в которых работает полная операционная система. Например, в qemu-kvm
системе вы можете иметь одну виртуальную машину с FreeBSD, другую под управлением Windows и другую под управлением Linux.
Виртуальные машины, созданные этими технологиями, ведут себя как отдельные компьютеры для гостя. У них есть виртуальный процессор, оперативная память, сетевая карта, графика и т. Д., Которые, по мнению гостя, являются настоящей статьей. Из-за этого на виртуальных машинах может быть установлено много разных операционных систем, и они работают «из коробки» без каких-либо изменений.
Хотя это очень удобно, поскольку многие ОС устанавливаются без особых усилий, у него есть недостаток, заключающийся в том, что гипервизор должен имитировать все оборудование, что может замедлять работу. Альтернативой является паравиртуализированное оборудование, в котором для гостя разработано новое виртуальное устройство и драйвер, предназначенный для производительности в виртуальной среде. qemu-kvm
предоставьте virtio
ряд устройств и драйверов для этого. Недостатком этого является то, что гостевая ОС должна поддерживаться; но если поддерживается, преимущества в производительности велики.
lxc
пример виртуализации на уровне операционной системы или контейнеров В этой системе установлено только одно ядро - ядро хоста. Каждый контейнер - это просто изоляция пользовательских процессов. Например, веб-сервер (например apache
) установлен в контейнере. Что касается этого веб-сервера, то единственный установленный сервер - сам. В другом контейнере может работать FTP-сервер. Этот FTP-сервер не знает об установке веб-сервера - только его собственный. Другой контейнер может содержать полную пользовательскую установку дистрибутива Linux (если этот дистрибутив способен работать с ядром хост-системы).
Однако при использовании контейнеров не существует отдельных установок операционной системы - только отдельные экземпляры пользовательских служб. Из-за этого вы не можете устанавливать разные платформы в контейнере - без Windows в Linux.
Контейнеры обычно создаются с использованием chroot
. Это создает отдельный закрытый root ( /
) для процесса, с которым можно работать. Создавая множество отдельных частных корней, процессы (веб-серверы или дистрибутив Linux и т. Д.) Выполняются в собственной изолированной файловой системе. Более продвинутые методы, такие как, cgroups
могут изолировать другие ресурсы, такие как сеть и RAM.
Есть плюсы и минусы для обеих и многих длительных дискуссий о том, какой из них лучше.
- Контейнеры легче, потому что не установлена полная ОС для каждого; что имеет место для гипервизоров. Поэтому они могут работать на более низком аппаратном обеспечении. Тем не менее, они могут работать только с гостями Linux (на хостах Linux). Кроме того, поскольку они совместно используют ядро, существует вероятность того, что скомпрометированный контейнер может повлиять на другой.
- Гипервизоры более безопасны и могут запускать разные ОС, поскольку в каждой виртуальной машине установлена полная ОС, а гости не знают о других виртуальных машинах. Однако это использует больше ресурсов на хосте, который должен быть относительно мощным.