Categories: linux

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 virtualbox- 4.3 _4.3.20- 96996 ~Ubuntu~raring_amd64.deb
sudo dpkg -i vagrant_1.6.5_x86_64.deb

Чтобы не возиться со всякими там ISO-образами в Vagrant есть такое понятие, как боксы . Бокс — это сохраненный образ системы. Чтобы создать новую виртуалку, вам нужен бокс. Когда вы архивируете состояние вашей ВМ, на выходе также получаете бокс. Скачаем бокс с Ubuntu 14.04:

vagrant box add ubuntu / trusty64
vagrant box list

Теперь создадим новую виртуалку:

mkdir -p ~ / vagrant / ubuntu-test
cd ~ / vagrant / ubuntu-test
vagrant init ubuntu / trusty64

В каталоге появится файл с именем Vagrantfile. Здесь задаются параметры ВМ. Можно изменить ограничения по памяти и CPU , включить или отключить шаринг каталогов с хост-системой, поправить настройки сети, в том числе — настроить проброс портов из гостевой системы в хост-систему, и так далее. Кстати, по умолчанию все виртуалки находятся в одной виртуальной LAN и видят друг друга. Здесь и далее в качестве провайдера мы будем использовать VirtualBox. Он очень гибок в плане настроек. В частности, в Vagrantfile можно передать любые аргументы утилите VBoxMange , что не удивительно, так как под капотом всю виртуализацию Vagrant делает с ее помощью.

Чтобы у ВМ были красивые имена в интерфейсе VirtualBox, а также выводе vagrant global-status , я всегда прописываю в Vagrantfile что-то вроде:

# имя в `vagrant global-status`
config. vm . define «ubuntu1» do | t |
end
# имя в VirtualBox
config. vm . provider «virtualbox» do | v |
v. name = «ubuntu1»
end

Запустим виртуалку и зайдем в нее по ssh:

vagrant up
vagrant ssh
# что дописать в ~/.ssh/config для входа в виртуалку:
# vagrant ssh-config

Тут следует отметить, что говоря vagrant up вы должны находится в одном каталоге с Vagrantfile. При этом после запуска ВМ вы сможете обращаться к ней по id уже из любого каталога. А физически все виртуалки лежат вовсе не рядом с Vagrantfile, а в каталоге ~/VirtualBox VMs/. Есть подозрения, что интерфейс у Vagrant мог бы быть более однотипным, и от этого более простым и понятным, но уж как сделали.

Попав внутрь ВМ вы обнаружите, что работаете под пользователем vagrant, который может делать sudo без пароля. При этом есть возможность обмениваться файлами с хост-системой:

echo «hello from vagrant» > / vagrant / hello

Файл hello появится в каталоге ~/vagrant/ubuntu-test хост-системы. В гостевой системе доступ к каталогу /vagrant/ имеет только пользователь vagrant. Если вдруг такой способ взаимодействия с гостевой системой кажется вам неудобным, ничто не мешает завести обычного пользователя, сказать ssh-copy-id и обмениваться файлами с помощью scp.

Если в хост-системе сказать:

vagrant global-status

… то можно увидеть все ВМ и их состояние.

Если ВМ удалялась не через Vagrant, она может остаться в global-status. Лечится это так:

vagrant global-status —prune

Виртуалки можно ставить на паузу:

vagrant suspend 1f2a1a5
vagrant resume ubuntu1

Заметьте, что можно использовать не полный id вируталки (1f2a1a5), а только его начало (например, 1f). Кроме того, если вы присвоили ВМ имена, как было описано выше, то можно использовать их.

Полная останова и запуск:

vagrant halt 1f
vagrant up 1f

Удаление ВМ:

vagrant destroy 1f

Можно создать из виртуалки бокс, сказав в каталоге с Vagrantfile:

vagrant package

Появится файл package.box (у меня он получился около 350 Мб). Упаковывать его не нужно, это уже сжатый файл.

Импорт бокса:

vagrant box add myubuntu package.box
vagrant box list
vagrant box remove myubuntu

Часто требуется присвоить виртуалке фиксированный IP в LAN. Для этого находим в Vagrantfile строку, похожую на следующую, раскомментируем и правим:

config. vm . network «private_network» , ip: «10.110.0.10»

Проверяем:

vagrant reload 1f
ping 10.110.0.10

В качестве примера альтернативного провайдера рассмотрим vagrant-lxc. Как вы догадались, он позволяет делать все, что было описано выше, используя LXC вместо VirtualBox. Если в двух словах:

# ставим плагин
vagrant plugin install vagrant-lxc
# создаем и запускаем виртуалку
vagrant init fgrehm / precise64-lxc
vagrant up —provider =lxc

Подробности можно найти на GitHub’е плагина .

Как видите, все довольно просто. Дополнительную информацию вы можете найти по следующим ссылкам:

А пользуетесь ли вы Vagrant и если да, то для каких задач?

Дополнение: Также вас могут заинтересовать заметки Управление VirtualBox из консоли с помощью vboxmanage , Зачем нужен Docker и практика работы с ним и Туториал по контейнеризации при помощи LXC .

admin

Share
Published by
admin
Tags: Linux

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

1 месяц ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

1 месяц ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

1 месяц ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

1 месяц ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

1 месяц ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

1 месяц ago