Vagrant
Инициализация
Чтобы инициализировать виртуалку, нужно ввести команду:
vagrant init ubuntu/xenial64
Она создаст файл Vagrantfile в текущей дериктории. В этом файле содержится конфигурация (на ruby). А также после этой команды будет скачан образ указанной системы с серверов vagrant
Примерно по такому пути находится скачанный образ виртуалки: /home/vandud/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-xenial64/20200617.0.0/virtualbox
Вот тут можно выбрать подходящий образ
В конфиге можно редактировать параметры виртуалки (добавить памяти и прочее)
Старт выполняется командой vagrant up
Для подключения к виртуалке нужно использовать команду vagrant ssh
(виртуалка слушает порт для ssh на хостовой машине, но там по-умолчанию доступ только по ключу, который есть у vagrant'a)
Традиционно в вагранте пользователь по-умолчанию - vagrant (пароль такой же как имя)
Директория из которой запускалась виртуалка (в которой лежит Vagrantfile) прокидывается в виртуалку по пути /vagrant (доступ и на чтение и на запись, поэтому нужно быть аккуратным)
[vandud@desktop vagrant]$ touch testfile
[vandud@desktop vagrant]$ vagrant ssh
vagrant@ubuntu-xenial:~$ cd /vagrant/
vagrant@ubuntu-xenial:/vagrant$ ll
total 60
drwxr-xr-x 1 vagrant vagrant 4096 Jun 23 15:01 ./
drwxr-xr-x 24 root root 4096 Jun 23 14:53 ../
-rw-r--r-- 1 vagrant vagrant 0 Jun 23 15:01 testfile
-rw------- 1 vagrant vagrant 42191 Jun 23 14:53 ubuntu-xenial-16.04-cloudimg-console.log
drwxr-xr-x 1 vagrant vagrant 4096 Jun 23 14:32 .vagrant/
-rw-r--r-- 1 vagrant vagrant 3010 Jun 23 15:01 Vagrantfile
Команды управления
- Перезагрузка (выключение и включение, а не просто обновление конфига) -
vagrant reload
- Выключение/приостановка -
vagrant halt/suspend
- Пробуждение приостановленной ВМ -
vagrant resume
- Удаление виртуалки (конф. файлы останутся нетронутыми) -
vagrant destroy
- Чтобы удалить и файлы ВМ нужно добавить ключи -f -
vagrant destroy -f
- Состояние окружения (а также проверка сиснтаксиса Vagrantfile) -
vagrant status
- Подключение -
vagrant ssh
- Конфиг ssh -
vagrant ssh-config
- Управление боксами -
vagrant box
:
$ vagrant box list
ubuntu/xenial64 (virtualbox, 20200617.0.0)
Приватный ключ для подклюлчения по ssh находится примерно по такому пути: /home/vandud/Documents/vagrant/.vagrant/machines/default/virtualbox/private_key
Плагины
vagrant scp
Плагины устанавливаются так (устанавливаю vagrant-scp):
$ vagrant plugin install vagrant-scp
Installing the 'vagrant-scp' plugin. This can take a few minutes...
Fetching vagrant-scp-0.5.7.gem
Installed the plugin 'vagrant-scp (0.5.7)'!
Работа vagrant scp:
$ vagrant scp testfile default:/tmp/testfile
load pubkey "/home/vandud/Documents/vagrant/.vagrant/machines/default/virtualbox/private_key": invalid format
Warning: Permanently added '[127.0.0.1]:2222' (ECDSA) to the list of known hosts.
testfile 100% 0 0.0KB/s 00:00
Информацию о боксе (имя или id) можно получить из $ vagrant global-status
vagrant sahara
vagrant sandbox (sahara-plugin):
Этот плагин позволяет делать снапшоты. Пример использования:
- Включаем режим песочницы -
vagrant sandbox on
- Что-то делаем -
vagrant ssh
- Коммитим изменения или откатываемся -
vagrant sandbox commit/rollback
- Выключаем песочницу -
vagrant sandbox off
(если выйти из песочницы с незакоммиченными изменениями, то они закоммитятся)
Provisioning (подготовка)
Для провижининга (подготовки) можно использовать встроенные средства, или такие системы как ansible/puppet
На примере ansible:
- Редактируем Vagrantfile. Нужно дописать в конец следующее:
config.vm.provision "ansible" do |ansible| ansible.playbook = "playbook.yaml" end
- Далее создаем playbook.yaml, например такой:
$ cat playbook.yaml --- - hosts: all become: yes tasks: - name: test task apt: name: hollywood state: present update_cache: yes
- И запускаем провижининг с помощью команды
vagrant provision
:$ vagrant provision ==> default: Running provisioner: ansible... default: Running ansible-playbook... PLAY [all] ********************************************************************* TASK [Gathering Facts] ********************************************************* ok: [default] TASK [test task] *************************************************************** changed: [default] PLAY RECAP ********************************************************************* default : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Прокидывание директорий
В Vagrantfile нужно дописать следующее:
config.vm.synced_folder "src/", "/tmp/src/"
Эта настройка указывает откуда и куда примонтировать директорию
Далее нужно сделать reload и настройка применится
Результат (сверху команда watch tree
на виртуалке):
Прокидывание портов
config.vm.network "forwarded_port", guest: 80, host: 8080
No Comments