Определение простыми словами
Vagrant — обёртка над гипервизорами. Команда vagrant up читает Vagrantfile, скачивает базовый образ (box), создаёт виртуалку, прописывает сеть, синхронизирует папки и запускает provisioner — shell-скрипт, Ansible или Chef. Через vagrant ssh разработчик попадает внутрь, через vagrant destroy уничтожает.
В отличие от Docker, Vagrant поднимает полноценную виртуальную машину со своим ядром. Главная ценность — одинаковая среда у всей команды. Файл лежит в репозитории, новый разработчик клонирует код и через 10 минут получает работающую копию production. Это убирает классическое «у меня работает».
Сравнение Vagrant, Docker Compose и WSL
| Параметр | Vagrant | Docker Compose | WSL2 |
|---|---|---|---|
| Изоляция | Полная VM | Контейнер на ядре хоста | VM с общим ядром |
| Стартовое время | 1–5 минут | 5–15 секунд | 1–3 секунды |
| Расход RAM | 1–4 ГБ на инстанс | 50–500 МБ | 500 МБ–2 ГБ |
| Кросс-платформа | Win/Mac/Linux одинаково | Win/Mac/Linux одинаково | Только Windows 10/11 |
| Где сильнее | Тестирование разных дистрибутивов | Микросервисы | Локальный Linux под Windows |
Кейсы использования
- Команда верстальщиков на Windows получает Ubuntu 22.04 с Nginx, PHP-FPM и MySQL точно как в продакшене.
- Учебные курсы по DevOps: студент скачивает один Vagrantfile и поднимает кластер из 3 нод для отработки Kubernetes.
- Тестирование кросс-дистрибутивных сборок пакета: один Vagrantfile с CentOS, Debian, Alpine.
- Negative: для production не годится — нет HA, мониторинга, нормального оркестратора.
- Negative: на Mac M1/M2 VirtualBox не работает, выручают только VMware Fusion и parallels-провайдер.
Технические детали
# Установка на macOS
brew install --cask vagrant virtualbox
# Минимальный Vagrantfile для Ubuntu 22.04
cat > Vagrantfile <<'EOF'
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/jammy64"
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.synced_folder "./src", "/var/www"
config.vm.provider "virtualbox" do |vb|
vb.memory = 2048
vb.cpus = 2
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx php-fpm
SHELL
end
EOF
vagrant up
vagrant ssh
vagrant halt # выключить
vagrant destroy -f # удалить полностью
Boxes лежат в Vagrant Cloud (app.vagrantup.com) и кэшируются в ~/.vagrant.d/boxes. Свой box собирается через vagrant package или Packer.
🔥 Где это применяется
Частые вопросы
Чем Vagrant лучше Docker?
Vagrant даёт полноценную VM с собственным ядром — нужен для тестирования модулей ядра, разных дистрибутивов и сетевого стека. Docker легче, но делит ядро с хостом.
Работает ли Vagrant на Apple Silicon?
Да, через провайдеры VMware Fusion, Parallels или libvirt-qemu. VirtualBox для arm64 пока в бете и нестабилен.
Где хранить кастомные box-ы команды?
Локальный HTTP-сервер с metadata.json или приватный аккаунт Vagrant Cloud. Для CI удобнее загружать в S3 и раздавать по ссылке.