Vagrant — open-source инструмент HashiCorp для автоматизированного управления виртуальными машинами в разработке. Описывает конфигурацию VM (ОС, ресурсы, проброс портов, provisioning) в файле Vagrantfile на Ruby-подобном DSL. Команда vagrant up создаёт и настраивает VM за несколько минут, vagrant destroy — удаляет. Устраняет проблему «работает на моей машине»: идентичное окружение у всех членов команды.
Типичный Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/jammy64"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 2
v.name = "dev-server"
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update -q
apt-get install -y nginx php-fpm
systemctl start nginx
SHELL
end
После vagrant up VM доступна по IP 192.168.56.10, порт 80 VM смаппирован на 8080 хоста. vagrant ssh открывает SSH-сессию без пароля (Vagrant автоматически управляет ключами).
Providers и Provisioners
Vagrant поддерживает несколько типов виртуализации (providers):
- VirtualBox — бесплатный, по умолчанию. Работает на Windows, macOS, Linux.
- VMware (Workstation/Fusion) — коммерческий, более быстрый. Требует платного плагина vagrant-vmware-desktop.
- Hyper-V — встроен в Windows 10/11 Pro, Server.
- libvirt/KVM — для Linux-разработчиков через vagrant-libvirt. Наибольшая производительность на Linux.
- Docker — контейнер вместо VM. Только для Linux-гостей.
Provisioners (инструменты настройки внутри VM): Shell-скрипты, Ansible, Chef, Puppet, Salt. Ansible — самый популярный provisioner для сложных конфигураций.
Vagrant Boxes
Vagrant Box — готовый базовый образ VM, хранимый на Vagrant Cloud (app.vagrantup.com). Команда vagrant box add ubuntu/jammy64 скачивает образ (~500 МБ–2 ГБ). Популярные boxes: ubuntu/jammy64 (Ubuntu 22.04), debian/bookworm64 (Debian 12), generic/rocky9 (Rocky Linux 9). Boxes кэшируются локально: повторный vagrant up работает без скачивания.
История
Vagrant создал Митчелл Хашимото (Mitchell Hashimoto) в 2010 году как студенческий проект. В 2012 году основана HashiCorp для коммерциализации — сначала Vagrant, затем Terraform, Vault, Consul, Nomad. Версия 1.0 вышла в 2012 году. В 2023 году HashiCorp изменила лицензию большинства инструментов на BSL (Business Source License), но Vagrant остался под MIT. В 2024 году HashiCorp приобретена IBM за $6,4 млрд.
Vagrant vs Docker Dev Containers
Docker Dev Containers (VS Code Remote) в 2023–2024 годах вытеснил Vagrant во многих сценариях разработки: контейнеры запускаются за секунды против минут для VM, потребляют меньше ресурсов. Однако Vagrant незаменим для тестирования изменений на уровне ОС: ядро, init-система (systemd), сетевые драйверы, RAID-конфигурации. На VM можно тестировать Kickstart-скрипты, Ansible-плейбуки и конфигурацию Nginx в точном соответствии с production-сервером, включая то же ядро и init-систему.
Multi-machine конфигурация
Vagrant позволяет описать несколько связанных VM в одном Vagrantfile — например, имитация production-стека с веб-сервером, базой данных и балансировщиком:
Vagrant.configure("2") do |config|
config.vm.define "db" do |db|
db.vm.box = "ubuntu/jammy64"
db.vm.network "private_network", ip: "192.168.56.11"
end
config.vm.define "web" do |web|
web.vm.box = "ubuntu/jammy64"
web.vm.network "private_network", ip: "192.168.56.10"
web.vm.network "forwarded_port", guest: 80, host: 8080
end
end
Оба хоста запускаются командой vagrant up. Это позволяет тестировать многоуровневую архитектуру: репликацию PostgreSQL, кластер Nginx + backend, конфигурацию NFS-хранилища.