Используя Vagrant вы ускоряете процесс создания виртуальных машин на многих платформах виртуализации, например Hyper-V, Virtualbox и т.д.

vagrant up

Установка / Провайдер / Создание VM / Файл конфигурации / Запуск VM / Подключение по ssh / Обновление конфигурации / Удаление VM / Копирование файлов / Запуск скриптов /

Установка Vagrant

По ссылке всегда можно получить свежую информацию о установке на различные ОС.

#Centos
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install vagrant

#Ubuntu
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install vagrant

Для Windows как обычно качаем файл установки и устанавливаем.

После установки проверяем что Vagrant работает:

vagrant --version
Vagrant 2.4.1

Провайдер по умолчанию

По умолчанию в качестве провайдера используется VirtualBox, но вы можете это изменить. Все дальнейшие примеры будут предназначены именно для провайдера VirtualBox, для других провайдеров конфигурация может отличаться.

Делается это несложно просто через переменную VAGRANT_DEFAULT_PROVIDER указываем какой провайдер использовать. Либо можно при вызове команд передавать провайдера через опцию --provider.

И ещё одно замечание на момент написания статьи Vagrant не работает с VirtualBox 7.1.0.

The box you’re attempting to add doesn’t support the provider you requested

Если вы видите эту ошибку значит вы хотите использовать образ, предназначенный для другого провайдера, например, VirtualBox вместо Hyper-V. Чтобы такого не было при поиске образа сортируйте их по провайдерам.

Создание виртуальной машины с помощью Vagrant

Для создания виртуального сервера используются шаблоны, список которых можно получить по ссылке.

Также можно выкачать шаблон по любой доступной ссылке в интернете:

Vagrant.configure("2") do |config|
  config.vm.box =  "centos/9"
  config.vm.box_url =  "https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-Vagrant-9-latest.x86_64.vagrant-virtualbox.box"
end

Для начала необходимо создать файл конфигурации, т.е. Vagrant файл, где уже необходимо описать всю конфигурацию виртуального сервера. Я буду использовать образ centos/stream9.

vagrant.exe init roboxes/centos9s

После выполнения этой команды в текущей директории у вас создастся файл Vagrantfile, где необходимо вписать настройки для виртуальной машины. Кстати не нужно удалять этот файл после создания серверов, так как в дальнейшем для подключения к ним по ssh этот файл ещё понадобится.

Весь конфиг помещается внутри блока Vagrant.configure("2") do |config|, эта строка означает старт файла конфигурации.

Базовый файл конфигурации

Вот примерный файл конфигурации:

Vagrant.configure("2") do |config|
  config.vm.box =  "roboxes/centos9s"
  config.vm.hostname =  "just-for-test-centos"
  config.vm.box_check_update = false
  config.vbguest.auto_update =  false
  config.vm.provider "virtualbox" do |vb|
	vb.name =  "just_test"
	vb.cpus =  "4"
	vb.memory =  "4096"
  end
end
  • config.vm.box - тут собственно указываем шаблон для VM
  • vb.name - имя VM (в самом VirtualBox)
  • vb.cpus - сколько cpu выдать для VM
  • vb.memory - сколько выдать ОЗУ для VM (в мб)
  • config.vm.hostname - имя сервера, в самой ОС
  • config.vm.box_check_update - при создании VM по умолчанию происходит установка обновлений, если стоит true
  • config.vbguest.auto_update - устанавливать гостевые дополнения Virtualbox или нет

Старт VM

Для запуска процесса создания нужно выполнить vagrant up. Если вы выполняете команду впервые, то потребуется какое-то время для скачивания образа.

Эта команда создаёт и настраивает будущую виртуальную машину, приводя её к тому состоянию, которое описано в файле конфигурации.

Для применения дальнейших изменений можно использовать vagrant reload, о которой чуть ниже.

Подключение по ssh

По умолчанию создаётся пара, открытого и закрытого ключей для авторизации по ssh. И самым простым вариантом для авторизации на виртуальной машине будет использовать команду vagrant ssh.

Если у вас несколько виртуальных машин в файле конфигурации, то необходимо передать имя.

Обновление конфигурации VM

Если необходимо что-то изменить на уже созданной VM используется команда vagrant reload.

Vagrant.configure("2") do |config|
  config.vm.box =  "roboxes/centos9s"
  config.vm.hostname =  "just-for-test"
  config.vm.box_check_update = false
  config.vm.provider "virtualbox" do |vb|
	vb.name =  "just_test"
	vb.cpus =  "2"
	vb.memory =  "4096"
  end
end
vagrant reload

Команда vagrant reload может принимать дополнительную опцию, одну из:

  • –provision - когда мы делаем reload применяются не все изменение в файле Vagrantfile. Чтобы применились все изменения нужно добавить --provision (скрипты и т.д.)
  • –no-provision - применить только некоторые параметры конфигурации, такие как сетевые настройки, конфигурация VM (скрипты запускаются только если стоит always)
  • –provision-with - указывает какой именно тип запускать, например shell или file

Удаление VM

Чтобы удалить уже созданную VM используется команда vagrant destroy.

Копирование файлов в VM

Можно скопировать файлы в будущую VM добавив файл Vagrantfile одну из следующих строк:

config.vm.provision "file", source: "./scripts/copy.txt ", destination: "/tmp/copy.txt" #one file
config.vm.provision "file", source: "./scripts ", destination: "/tmp/remote" #folder
==> default: Running provisioner: file...
    default: ./scripts  => /tmp/remote

Если нужно скопировать файлы в уже созданную VM используем vagrant upload.

vagrant upload .\scripts\copy.txt /tmp/copy.txt
Uploading .\scripts\copy.txt to /tmp/copy.txt
Upload has completed successfully!

  Source: .\scripts\copy.txt
  Destination: /tmp/copy.txt

Но обратите внимание если по каким-то причинам у вас не установились гостевые дополнения Virtualbox первый вариант может не сработать.

Запуск скриптов внутри VM

Если нужно запустить скрипты при создании VM используем provision.

Vagrant.configure("2") do |config|
  config.vm.provision "shell", path: "./scripts/just_test.sh"
  config.vm.provision "shell", path: "./scripts/just_test2.sh", run: 'always'
end

Первый скрипт just_test.sh выполнится только при создании VM (up или reload –provision), второй будет выполнятся даже если запустить reload без provision.

Если нужно запустить только скрипты можно также воспользоваться vagrant reload --provision-with shell.