Vagrant

Теория: Жизненный цикл окружения Vagrant

Как происходит работа с проектом в Vagrant? Здесь важно разделить то, за что Vagrant отвечает и то, где он не участвует. Начнем с кода. Работа с ним происходит снаружи. Вам будет нужно установить, как минимум, git и редактор кода. Затем все по обычной схеме: клонируем репозиторий (в который добавлен Vagrantfile), открываем его в редакторе и начинаем менять.

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

Для входа внутрь используется команда vagrant ssh. После выполнения терминал подключается к машине в домашнюю директорию пользователя по умолчанию. Традиционно в Vagrant это пользователь с именем vagrant.

# выполняется в корне проекта
vagrant ssh
Welcome to Ubuntu 21.10 (GNU/Linux 5.13.0-22-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri Dec 17 08:23:46 UTC 2021

  System load:  0.33              Processes:               114
  Usage of /:   3.2% of 38.71GB   Users logged in:         0
  Memory usage: 17%               IPv4 address for enp0s3: 10.0.2.15
  Swap usage:   0%


0 updates can be applied immediately.


vagrant@ubuntu-impish:~$

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

Возникает вопрос, каким образом код снаружи оказывается внутри машины и где его найти? Vagrant автоматически "прокидывает" его внутрь машины в директорию /vagrant. Поэтому первым делом после vagrant ssh нужно выполнить переход cd /vagrant:

vagrant ssh
cd /vagrant
vagrant@ubuntu-impish:/vagrant$ ls -la
total 16
drwxrwxr-x  1 vagrant vagrant 4096 Dec 17 08:16 .
drwxr-xr-x 20 root    root    4096 Dec 17 08:23 ..
drwxrwxr-x  1 vagrant vagrant 4096 Dec 17 08:16 .vagrant
-rw-rw-r--  1 vagrant vagrant 3022 Dec 17 08:15 Vagrantfile

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

Теперь мы можем устанавливать любые библиотеки, зависимости, запускать на выполнение тесты и так далее.

asciicast

Рекомендуемые программы