Определение простыми словами
Виртуальная машина — это «компьютер внутри компьютера». Программа-гипервизор делит ресурсы физического сервера (хоста) и создаёт виртуальные «железки», на которые ставится обычная операционная система. Гостевая ОС считает, что у неё своё «настоящее» железо, и не догадывается, что работает поверх другого.
На практике именно так устроены VPS и VDS: одна физическая машина в дата-центре делится гипервизором на десятки виртуальных, и каждая продаётся как «свой сервер».
Сравнение: VM vs контейнер vs физический сервер
| Параметр | VM (KVM) | Контейнер (Docker) | Физический сервер |
|---|---|---|---|
| Своё ядро ОС | Да | Нет (общее с хостом) | Да |
| Стартует за | 10–60 секунд | ~1 секунду | Минуты |
| Накладные расходы | 5–15% | ~0% | 0% |
| Изоляция | Полная | Слабее (общее ядро) | Полная |
| Можно поставить Windows | Да | Только Windows-контейнеры на Windows-хосте | Да |
Кейсы использования
- Тестовый стенд. На ноутбуке поднимается VirtualBox с Linux/Windows для проверки скриптов без риска для основной системы.
- Изоляция приложений. Нестабильное или подозрительное ПО запускается в VM, чтобы откатиться через снапшот.
- Хостинг сайтов. Каждый клиент — отдельная VM, упавший сосед не уронит остальных.
- Live-миграция. VM «на лету» переезжает между физическими хостами без остановки.
- Negative case. Запускать stateless-микросервис в VM, когда хватает Docker-контейнера, — лишний расход RAM и CPU на ядро гостевой ОС, а старт замедляется в десятки раз.
Технические детали
Создание VM через KVM/QEMU и virt-install на хосте Ubuntu Server:
# 1. установить гипервизор и тулинг
sudo apt install -y qemu-kvm libvirt-daemon-system virtinst bridge-utils
sudo usermod -aG libvirt,kvm $USER
# 2. проверить поддержку аппаратной виртуализации
egrep -c '(vmx|svm)' /proc/cpuinfo
# любое число > 0 — поддержка есть
# 3. создать VM Ubuntu 22.04 из cloud-image
sudo virt-install
--name web-01
--memory 4096
--vcpus 2
--disk path=/var/lib/libvirt/images/web-01.qcow2,size=20
--location 'http://archive.ubuntu.com/ubuntu/dists/jammy/main/installer-amd64/'
--os-variant ubuntu22.04
--network bridge=br0
--graphics none --console pty,target_type=serial
--extra-args 'console=ttyS0,115200n8 serial'
# 4. список VM и управление
sudo virsh list --all
sudo virsh start web-01
sudo virsh shutdown web-01
sudo virsh snapshot-create-as web-01 snap-$(date +%F)
🔥 Где это применяется
Частые вопросы
Чем VM отличается от контейнера?
У VM своё ядро ОС и полная изоляция через гипервизор; стартует медленнее, ест больше RAM. Контейнер использует ядро хоста, стартует за секунду, но изоляция слабее, и нельзя смешивать ОС (Linux-контейнер на Windows только через WSL).
Что такое снапшот VM?
Снапшот — фиксация состояния диска и (опционально) RAM на момент времени. Позволяет откатиться к предыдущему состоянию за секунды. Не заменяет полноценный backup, потому что хранится на том же сторадже.
Можно ли запустить VM внутри VM?
Да, это называется nested virtualization. На современных Intel/AMD CPU поддерживается; используется в CI/CD, при разработке гипервизоров и в облачных лабораториях. Производительность вложенной VM ниже на 10–30%.