Статьи

Введение в Vagrant

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

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

Недавно Vagrant также добавил поддержку контейнеров Docker, но я не буду обсуждать это в этом руководстве.

  1. Загрузите бесплатный VirtualBox для вашей операционной системы с веб-сайта VirtualBox .
  2. После загрузки просто запустите бинарный файл и установите его.
  3. Скачать Vagrant .
  4. Опять же, просто запустите двоичный файл, чтобы установить его.

Vagrant — это инструмент, основанный на командной строке. После завершения установки откройте окно консоли и создайте новый каталог с именем vagrant_intro.

1
2
3
4
5
cd ~
 
mkdir vagrant_intro
 
cd vagrant_intro

Теперь это будет ваш рабочий каталог. Внутри каталога vagrant_intro введите:

vagrant init ubuntu/trusty64

Вы должны увидеть следующий текст:

1
2
3
4
5
6
7
A ‘Vagrantfile’ has been placed in this directory.
 
ready to ‘vagrant up’ your first virtual environment!
 
the comments in the Vagrantfile as well as documentation on
 
‘vagrantup.com’ for more information on using Vagrant.

Сгенерированный Vagrantfile — это файл Ruby, который управляет вашими [одной или несколькими] виртуальными машинами. Это довольно большой файл с множеством закомментированных опций. Я расскажу о важных позже, но сначала попробуем. Тип: vagrant up .

Это заставит Vagrant загрузить подготовленную виртуальную коробку с 64-разрядной версией Ubuntu 14.04 (надежной). Это займет некоторое время (несколько минут) и выльет много текста на экран. Пока Vagrant работает, давайте поговорим о том, что такое виртуальная машина на практике.

Одно мнение (которое я обычно принимаю) состоит в том, что виртуальная машина имитирует удаленный сервер. Вы должны общаться с ним только через сетевой интерфейс. Это особенно полезно для тестирования распределенных систем, где вы не должны использовать какие-либо специальные интерфейсы VM-хоста, поскольку они не будут доступны в ваших производственных системах. При работе в этом режиме вы обычно общаетесь с вашей виртуальной машиной через SSH (возможно, с помощью такого инструмента, как Ansible).

Другая точка зрения, которая также является полностью правильной и действительной, заключается в том, чтобы думать о ВМ как о другой ОС, работающей на вашем локальном компьютере. Это представление полезно, если вы хотите разрабатывать непосредственно на вашей целевой ОС.

Например, очень распространенная настройка — заставить разработчиков писать свой код на Mac с использованием Mac OS X, но развертывать в производственной среде Linux. Если вы хотите убедиться, что код, который вы разрабатываете на Mac, работает правильно в Linux без необходимости развертывания на удаленном сервере, вы можете воспользоваться синхронизированными папками, в которых вы читаете и записываете файлы на хост-ОС (обычно Mac OS X). и они сразу же будут доступны на гостевой ОС (обычно Linux).

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

Конечно, вы можете использовать как синхронизированные папки, так и SSH в вашей виртуальной машине. Существуют и другие параметры, которые размывают границы, например отображение портов.

Вот урезанная версия Vagrantfile с некоторыми из наиболее важных опций:

01
02
03
04
05
06
07
08
09
10
11
Vagrant.configure(2) do |config|
 
 config.vm.box = «ubuntu/trusty64»
 
 config.vm.network «forwarded_port», guest: 80, host: 8080
 
 config.vm.network «private_network», ip: «192.168.33.33»
 
 config.vm.synced_folder «~/vagrant_intro/data», «/vagrant_data»
 
 machine.vm.hostname = «gigi.playground.local»

Синтаксис Ruby, который дает вам большую гибкость, если вы хотите добавить условные выражения и циклы. Это особенно полезно, если вы используете Vagrantfile для управления кластером виртуальных машин.

Вы можете подключиться к работающей виртуальной машине, набрав: vagrant ssh .

Это запустит сеанс SSH и позволит вам интерактивно поиграть с виртуальной машиной.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-74-generic x86_64)
 
 
 
 * Documentation: https://help.ubuntu.com/
 
 
 
  System information as of Tue Feb 9 06:17:28 UTC 2016
 
 
 
  System load: 0.97 Processes: 80
 
  Usage of /: 3.4% of 39.34GB Users logged in: 0
 
  Memory usage: 25% IP address for eth0: 10.0.2.15
 
  Swap usage: 0%
 
 
 
  Graph this data and manage this system at:
 
    https://landscape.canonical.com/
 
 
 
  Get cloud support with Ubuntu Advantage Cloud Guest:
 
    http://www.ubuntu.com/business/services/cloud
 
 
 
0 packages can be updated.
 
0 updates are security updates.

Находясь в вашей виртуальной машине, вы можете делать все, что захотите: запускать команды, создавать пользователей, создавать файлы и каталоги и т. Д. Вы вошли в систему как «vagrant» пользователь, имеющий права sudo, так что вы имеете полный контроль над VM.

Vagrant автоматически сопоставляет папку на хост-машине, которая содержит Vagrantfile, с каталогом / vagrant на гостевой машине. Это позволяет вам редактировать файлы в вашем любимом редакторе на хост-машине и делать его доступным в гостевой системе, или, в качестве альтернативы, гостю записать какой-нибудь выходной файл в каталог / vagrant и просмотреть синхронизированную папку на хосте.

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

Например, в приведенной выше конфигурации гостевой порт 80 сопоставлен с портом хоста 8080. Это означает, что любая служба, работающая на порте 80 в гостевой системе, может быть доступна как localhost: 8080 на хост-машине.

Давайте посмотрим на демонстрацию. Сначала я помещу простой файл index.html в каталог ~ / vagrant_intro на хосте, который синхронизируется с каталогом / vagrant_data в гостевой системе.

1
2
3
4
5
6
7
8
9
<html>
 
<body>
 
<h1>Vagrant is awesome!</h1>
 
</body>
 
</html>

Затем, после того как я отправлю SSH на гостевую машину, я запусту небольшой веб-сервер в каталоге / vagrant_data:

1
2
3
vagrant@vagrant-ubuntu-trusty-64:/vagrant$ sudo python3 -m http.server 80
 
Serving HTTP on 0.0.0.0 port 80 …

Этот однострочный сервер Python HTTP просто обслуживает любой статический файл в своем рабочем каталоге. Теперь, поскольку порт 80 сопоставлен с портом 8080 хоста, вы можете перейти к localhost: 8080 и просмотреть результат работы сервера.

Вы также можете подключиться к виртуальной машине через ее IP-адрес, как если бы это был действительно отдельный сервер. Я всегда добавляю имя хоста в / etc / hosts, чтобы мне не приходилось использовать голый IP-адрес, и потому что код, который я тестирую, обычно настраивается с именем хоста производственной системы. Это то, что вам нужно добавить в ваш файл / etc / hosts:

1
2
3
# Important production system
 
192.168.33.33 production.server.com

Теперь любой сетевой доступ к «production.server.com» на вашем компьютере будет отправлен на вашу виртуальную машину.

В этом случае программы, которые обычно подключаются к удаленному серверу, настраиваются с IP-адресом виртуальной машины или именем хоста. До Vagrant 1.7 существовал один закрытый ключ, который можно было использовать для всех машин. Это было серьезной проблемой безопасности, когда люди выставляли свою виртуальную машину через общедоступные сети, и любой мог войти по SSH и получить root-доступ. Начиная с версии 1.7, Vagrant генерирует свежую пару ключей для каждой машины. Чтобы узнать, где находится закрытый ключ для вашей машины, выполните vagrant ssh-config команду: vagrant ssh-config .

Вот как вы можете использовать SSH непосредственно для виртуальной машины:

1
ssh -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -i ~/vagrant_intro/.vagrant/machines/default/virtualbox/private_key vagrant@192.168.33.33

Vagrant предоставляет множество команд для управления ящиками. Давайте исследуем. Чтобы увидеть список команд, введите: vagrant .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Usage: vagrant [options] <command> [<args>]
 
 
 
    -v, —version Print the version and exit.
 
    -h, —help Print this help.
 
 
 
Common commands:
 
     box manages boxes: installation, removal, etc.
 
     connect connect to a remotely shared Vagrant environment
 
     destroy stops and deletes all traces of the vagrant machine
 
     global-status outputs status Vagrant environments for this user
 
     halt stops the vagrant machine
 
     help shows the help for a subcommand
 
     init initializes a new Vagrant environment by creating a Vagrantfile
 
     login log in to HashiCorp’s Atlas
 
     package packages a running vagrant environment into a box
 
     plugin manages plugins: install, uninstall, update, etc.
 
     provision provisions the vagrant machine
 
     push deploys code in this environment to a configured destination
 
     rdp connects to machine via RDP
 
     reload restarts vagrant machine, loads new Vagrantfile configuration
 
     resume resume a suspended vagrant machine
 
     scp copies data into a box via SCP
 
     share share your Vagrant environment with anyone in the world
 
     ssh connects to machine via SSH
 
     ssh-config outputs OpenSSH valid configuration to connect to the machine
 
     status outputs status of the vagrant machine
 
     suspend suspends the machine
 
     up starts and provisions the vagrant environment
 
     version prints current and latest Vagrant version
 
 
 
For help on any individual command run `vagrant COMMAND -h`
 
 
 
Additional subcommands are available, but are either more advanced
 
or not commonly used.
 
`vagrant list-commands`.

Я рассмотрел некоторые из наиболее распространенных команд ранее. Команды box позволяют вам управлять своими ящиками напрямую. Например, чтобы увидеть все виртуальные машины на вашем компьютере, введите vagrant box list . Вы можете обновить коробки до последней версии с update . Команда reload очень полезна, если вы меняете свой Vagrantfile. Наконец, provision позволяет вам предоставлять, настраивать и устанавливать программное обеспечение на вашей виртуальной машине с использованием различных поставщиков, включая Chef, Puppet, Salt, мой любимый Ansible и даже Docker.

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