Записки программиста
Начало работы с Vagrant и зачем он вообще нужен
В первом приближении Vagrant — это такой CLI для VirtualBox. То есть, утилита, которая говорит «создать виртуалку», «запустить виртуалку» и так далее. На самом деле, Vagrant представляет собой нечто куда большее. В частности, помимо VirtualBox есть немало других так называемых провайдеров — VMWare, Amazon EC2, LXC и libvirt.
Для каких задач может пригодиться Vagrant?
- Вам просто нравится CLI и нужна виртуальная машина чтобы с чем-то там поиграться;
- Такой жесткий способ изолировать ненадежное, например, в плане безопасности, приложение ото всей остальной системы;
- Быстрый способ развернуть на сервере какой-нибудь готовый LAMP ценой накладных расходов на виртуализацию;
- Проверить, как ведет себя распределенное приложение при сетевых проблемах и падении машин;
- Еще при тестировании удобно иметь какой-то начальный образ системы, к которому можно откатиться перед следующим прогоном тестов;
- И опять таки, тестирование — вы разрабатываете под x64 c 16 Гб памяти, а хотите проверить, что программа работает на x86 с 512 Мб памяти;
- Иногда выгоднее купить одну жирную тачку и разместить на ней несколько ВМ, чем покупать несколько физических машин;
- В ряде случаев с Vagrant’ом намного удобнее мигрировать приложение с хоста на хост (в частности, передать сайт другому владельцу);
- Как замена deb- и rpm-пакетам, которая умеет разрешать конфликты зависимостей всяких криво написанных приложений, как бы создавая для них «песочницы»;
- Вы сидите под Ubuntu, а вам для решения каких-то задач иногда нужна другая ОС — CentOS, FreeBSD, OpenBSD или Windows;
Как видите, штука полезная. Давайте же научимся ею пользоваться!
VirtualBox качаем отсюда, а Vagrant — отсюда. Устанавливаем:
sudo dpkg -i vagrant_1.6.5_x86_64.deb
Чтобы не возиться со всякими там ISO-образами в Vagrant есть такое понятие, как боксы. Бокс — это сохраненный образ системы. Чтобы создать новую виртуалку, вам нужен бокс. Когда вы архивируете состояние вашей ВМ, на выходе также получаете бокс. Скачаем бокс с Ubuntu 14.04:
vagrant box list
Теперь создадим новую виртуалку:
vagrant init ubuntu / trusty64
В каталоге появится файл с именем Vagrantfile. Здесь задаются параметры ВМ. Можно изменить ограничения по памяти и CPU, включить или отключить шаринг каталогов с хост-системой, поправить настройки сети, в том числе — настроить проброс портов из гостевой системы в хост-систему, и так далее. Кстати, по умолчанию все виртуалки находятся в одной виртуальной LAN и видят друг друга. Здесь и далее в качестве провайдера мы будем использовать VirtualBox. Он очень гибок в плане настроек. В частности, в Vagrantfile можно передать любые аргументы утилите VBoxMange, что не удивительно, так как под капотом всю виртуализацию Vagrant делает с ее помощью.
Чтобы у ВМ были красивые имена в интерфейсе VirtualBox, а также выводе vagrant global-status , я всегда прописываю в Vagrantfile что-то вроде:
config. vm . define "ubuntu1" do | t |
# имя в VirtualBox
config. vm . provider "virtualbox" do | v |
Запустим виртуалку и зайдем в нее по ssh:
/.ssh/config для входа в виртуалку:
Тут следует отметить, что говоря vagrant up вы должны находится в одном каталоге с Vagrantfile. При этом после запуска ВМ вы сможете обращаться к ней по id уже из любого каталога. А физически все виртуалки лежат вовсе не рядом с Vagrantfile, а в каталоге
/VirtualBox VMs/. Есть подозрения, что интерфейс у Vagrant мог бы быть более однотипным, и от этого более простым и понятным, но уж как сделали.
Попав внутрь ВМ вы обнаружите, что работаете под пользователем vagrant, который может делать sudo без пароля. При этом есть возможность обмениваться файлами с хост-системой:
Файл hello появится в каталоге
/vagrant/ubuntu-test хост-системы. В гостевой системе доступ к каталогу /vagrant/ имеет только пользователь vagrant. Если вдруг такой способ взаимодействия с гостевой системой кажется вам неудобным, ничто не мешает завести обычного пользователя, сказать ssh-copy-id и обмениваться файлами с помощью scp.
Если в хост-системе сказать:
… то можно увидеть все ВМ и их состояние.
Если ВМ удалялась не через Vagrant, она может остаться в global-status. Лечится это так:
Виртуалки можно ставить на паузу:
vagrant resume ubuntu1
Заметьте, что можно использовать не полный id вируталки (1f2a1a5), а только его начало (например, 1f). Кроме того, если вы присвоили ВМ имена, как было описано выше, то можно использовать их.
Полная останова и запуск:
Можно создать из виртуалки бокс, сказав в каталоге с Vagrantfile:
Появится файл package.box (у меня он получился около 350 Мб). Упаковывать его не нужно, это уже сжатый файл.
vagrant box list
vagrant box remove myubuntu
Часто требуется присвоить виртуалке фиксированный IP в LAN. Для этого находим в Vagrantfile строку, похожую на следующую, раскомментируем и правим:
В качестве примера альтернативного провайдера рассмотрим vagrant-lxc. Как вы догадались, он позволяет делать все, что было описано выше, используя LXC вместо VirtualBox. Если в двух словах:
vagrant plugin install vagrant-lxc
# создаем и запускаем виртуалку
vagrant init fgrehm / precise64-lxc
vagrant up --provider =lxc
Как видите, все довольно просто. Дополнительную информацию вы можете найти по следующим ссылкам:
А пользуетесь ли вы Vagrant и если да, то для каких задач?
Подпишись через RSS, E-Mail, Google+, Facebook, Vk или Twitter!
Понравился пост? Поделись с другими:
Коротко о себе
и временами — просто о жизни.
Обратите внимание!
Облако меток
Копирование представленных на данном сайте материалов любыми способами не возбраняется.
Указание ссылки на оригинал приветствуется. © 2009–2017 Записки программиста
Комментариев нет: