Vagrant: воспроизводимые dev-окружения за 10 минут | Глоссарий FREEHOSTING

Vagrant

Vagrant Provisioning
Vagrant — Инструмент HashiCorp для описания и запуска воспроизводимых dev-окружений на VirtualBox, VMware, Hyper-V, libvirt и Docker. Окружение задаётся одним Vagrantfile.

Определение простыми словами

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 и раздавать по ссылке.