Vagrant. Начало работы. Часть 1 из 2
20.11.2019
Теги: CLI • Linux • Ubuntu • Vagrant • Web-разработка • Windows • Виртуализация • Настройка • Установка
Vagrant — консольная утилита, которая управляет виртуальными машинами. По умолчанию Vagrant работает с системой виртуализации VirtualBox. Такая связка доступна в операционных системах Windows, Mac и Linux.
В директории проекта надо создать файл Vagrantfile
с описанием конфигурации виртуальной машины. В нем указывается операционная система, выделяемые ресурсы, сетевые настройки и скрипты по установке дополнительных программ. Команда vagrant up
создает и запускает виртуальную машину. Во время ее работы директория проекта синхронизируется между основной операционной системой и операционной системой виртуальной машины.
Итак, устанавливаем VurtualBox и Vagrant. Для проверки, что установка прошла успешно:
$ cd d:/vagrant/www $ vagrant -v Vagrant 2.2.6
git bash
(командная строка с стиле linux), которая устанавливается вместе с Git для Windows.
Создание Vagrantfile
Теперь создадим файл конфигурации:
$ vagrant init -m ubuntu/bionic64 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
-m
или --minimal
позволяет создать файл Vagrantfile минимального размера, без комментариев. Есть смысл использовать команду без этого ключа и прочитать комментарии — там много интересного.
Посмотрим на файл Vagrantfile
:
Vagrant.configure(2) do |config| config.vm.box = "ubuntu/bionic64" end
При создании Vagrantfile
мы указали название бокса ubuntu/bionic64
. Бокс — это образ операционной системы, который так же может содержать установленные программы (LAMP, Python и т.д). Подходящий бокс можно найти на сайте Vagtant Cloud. Разработчики Vagrant рекомендуют использовать образы Bento.
В принципе, этого достаточно, чтобы создать виртуальную машину. Но давайте немного доработаем конфигурацию:
Vagrant.configure(2) do |config| # образ системы Ubuntu 18/04 LTS (Bionic Beaver) config.vm.box = "bento/ubuntu-18.04" # не проверять репозиторий на наличие обновлений config.vm.box_check_update = false config.vm.provider "virtualbox" do |vb| # имя виртуальной машины vb.name = "ubuntu-1804-test" # объем оперативной памяти vb.memory = 2048 # количество ядер процессора vb.cpus = 1 end # hostname виртуальной машины config.vm.hostname = "ubuntu-1804-test" end
Создаем виртуальную машину. В первый раз процесс займет больше времени, Vagrant должен скачать образ с операционной системой.
$ vagrant up
Остановить виртуальную машину можно командой
$ vagrant halt
Чтобы посмотреть справку по всем командам:
$ vagrant --help 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. cloud manages everything related to Vagrant Cloud 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 package packages a running vagrant environment into a box plugin manages plugins: install, uninstall, update, etc. port displays information about guest port mappings powershell connects to machine via powershell remoting 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 snapshot manages snapshots: saving, restoring, etc. 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 upload upload to machine via communicator validate validates the Vagrantfile version prints current and latest Vagrant version winrm executes commands on a machine via WinRM winrm-config outputs WinRM configuration to connect to the machine For help on any individual command run `vagrant COMMAND -h` Additional subcommands are available, but are either more advanced or not commonly used. To see all subcommands, run the command `vagrant list-commands`.
Настройка сети
Два сетевых интерфейса: NAT + Bridged
Отредактируем файл Vagrantfile
:
Vagrant.configure(2) do |config| # образ системы Ubuntu 18/04 LTS (Bionic Beaver) config.vm.box = "bento/ubuntu-18.04" # не проверять репозиторий на наличие обновлений config.vm.box_check_update = false config.vm.provider "virtualbox" do |vb| # имя виртуальной машины vb.name = "ubuntu-1804-test" # объем оперативной памяти vb.memory = 2048 # количество ядер процессора vb.cpus = 1 end # hostname виртуальной машины config.vm.hostname = "ubuntu-1804-test" # настройка сети (сетевой мост на втором интерфейсе) config.vm.network "public_network" end
И запустим виртуальную машину:
$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'bento/ubuntu-18.04'... ==> default: Matching MAC address for NAT networking... ==> default: Setting the name of the VM: ubuntu-1804-test ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: bridged ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Running 'pre-boot' VM customizations... ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Setting hostname... ==> default: Configuring and enabling network interfaces... ==> default: Mounting shared folders... default: /vagrant => D:/vagrant/www
Зайдем на виртуальную машину по ssh (по ключу):
$ vagrant ssh Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-65-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Sat Nov 23 04:49:36 UTC 2019 System load: 0.41 Processes: 91 Usage of /: 2.5% of 61.80GB Users logged in: 0 Memory usage: 5% IP address for eth0: 10.0.2.15 Swap usage: 0% IP address for eth1: 192.168.110.14 * Overheard at KubeCon: "microk8s.status just blew my mind". https://microk8s.io/docs/commands#microk8s.status 0 packages can be updated. 0 updates are security updates. This system is built by the Bento project by Chef Software More information can be found at https://github.com/chef/bento/README.md
И посмотрим сетевые интерфейсы:
$ ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::a00:27ff:fe6d:95c4 prefixlen 64 scopeid 0x20<link> ether 08:00:27:6d:95:c4 txqueuelen 1000 (Ethernet) RX packets 1745 bytes 687041 (687.0 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1048 bytes 160253 (160.2 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.110.14 netmask 255.255.255.0 broadcast 192.168.110.255 inet6 fe80::a00:27ff:febc:4f40 prefixlen 64 scopeid 0x20<link> ether 08:00:27:bc:4f:40 txqueuelen 1000 (Ethernet) RX packets 1614 bytes 97406 (97.4 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 16 bytes 1728 (1.7 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 20 bytes 1776 (1.7 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 20 bytes 1776 (1.7 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
У нас их два: eth0
(NAT, добавляется автоматически) и eth1
(сетевой мост, по нашему требованию). Виртуальная машина теперь является частью той же сети, что и хост-система и получает ip-адрес от роутера, на котором запущена служба DHCP.
Два сетевых интерфейса: NAT + Hostonly
Отредактируем файл Vagrantfile
:
Vagrant.configure(2) do |config| # образ системы Ubuntu 18/04 LTS (Bionic Beaver) config.vm.box = "bento/ubuntu-18.04" # не проверять репозиторий на наличие обновлений config.vm.box_check_update = false config.vm.provider "virtualbox" do |vb| # имя виртуальной машины vb.name = "ubuntu-1804-test" # объем оперативной памяти vb.memory = 2048 # количество ядер процессора vb.cpus = 1 end # hostname виртуальной машины config.vm.hostname = "ubuntu-1804-test" # настройки сети config.vm.network "private_network", type: "dhcp" end
И запустим виртуальную машину:
$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'bento/ubuntu-18.04'... ==> default: Matching MAC address for NAT networking... ==> default: Setting the name of the VM: ubuntu-1804-test ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Running 'pre-boot' VM customizations... ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Setting hostname... ==> default: Configuring and enabling network interfaces... ==> default: Mounting shared folders... default: /vagrant => D:/vagrant/www
Зайдем на виртуальную машину по ssh (по ключу):
$ vagrant ssh Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-65-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Sat Nov 23 06:00:25 UTC 2019 System load: 0.0 Processes: 88 Usage of /: 2.5% of 61.80GB Users logged in: 0 Memory usage: 5% IP address for eth0: 10.0.2.15 Swap usage: 0% IP address for eth1: 172.28.128.3 * Overheard at KubeCon: "microk8s.status just blew my mind". https://microk8s.io/docs/commands#microk8s.status 0 packages can be updated. 0 updates are security updates. This system is built by the Bento project by Chef Software More information can be found at https://github.com/chef/bento/README.md
И посмотрим сетевые интерфейсы:
$ ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::a00:27ff:fe6d:95c4 prefixlen 64 scopeid 0x20<link> ether 08:00:27:6d:95:c4 txqueuelen 1000 (Ethernet) RX packets 1473 bytes 653711 (653.7 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 847 bytes 126122 (126.1 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.28.128.3 netmask 255.255.255.0 broadcast 172.28.128.255 inet6 fe80::a00:27ff:fefc:1a31 prefixlen 64 scopeid 0x20<link> ether 08:00:27:fc:1a:31 txqueuelen 1000 (Ethernet) RX packets 43 bytes 5179 (5.1 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 15 bytes 1698 (1.6 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 20 bytes 1776 (1.7 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 20 bytes 1776 (1.7 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
У нас их два: eth0
(NAT, добавляется автоматически) и eth1
(виртуальный адаптер хоста, по нашему требованию). У виртуальной машины есть выход в интернет через NAT и она в одной сети с хост-системой.
- ip-адрес виртуальной машины 172.28.128.3
- ip-адрес DHCP-сервера 172.28.128.2
- ip-адрес хост-системы 172.28.128.1
Подключение по ssh
По умолчанию подключиться к виртуальной машине можно с помощью команды
$ vagrant ssh
При этом используются ssh-ключи, которые Vagrant добавляет на этапе создания виртуальной машины. Если по каким-то причинам это не устраивает, можно задать имя пользователя и пароль для входа. Тогда можно будет входить как с использованием логина и пароля, так и с использованием ssh-ключей.
Vagrant.configure(2) do |config| # образ системы Ubuntu 18/04 LTS (Bionic Beaver) config.vm.box = "bento/ubuntu-18.04" # не проверять репозиторий на наличие обновлений config.vm.box_check_update = false # имя пользователя config.ssh.username = 'vagrant' # пароль пользователя config.ssh.password = 'vagrant' # можно подключаться по паролю config.ssh.keys_only = false config.vm.provider "virtualbox" do |vb| # имя виртуальной машины vb.name = "ubuntu-1804-test" # объем оперативной памяти vb.memory = 2048 # количество ядер процессора vb.cpus = 1 end # hostname виртуальной машины config.vm.hostname = "ubuntu-1804-test" end
Подключиться с использованием логина и пароля:
$ ssh -p2222 vagrant@127.0.0.1 The authenticity of host '[127.0.0.1]:2222 ([127.0.0.1]:2222)' can't be established. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[127.0.0.1]:2222' (ECDSA) to the list of known hosts. vagrant@127.0.0.1's password: vagrant Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-65-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Sat Nov 23 10:27:52 UTC 2019 System load: 0.08 Processes: 88 Usage of /: 2.5% of 61.80GB Users logged in: 0 Memory usage: 5% IP address for eth0: 10.0.2.15 Swap usage: 0% * Overheard at KubeCon: "microk8s.status just blew my mind". https://microk8s.io/docs/commands#microk8s.status 0 packages can be updated. 0 updates are security updates. This system is built by the Bento project by Chef Software More information can be found at https://github.com/chef/bento/README.md Last login: Sat Nov 23 10:17:43 2019
Или просто запустить виртуальную машину и ввести логин-пароль:
По поводу ssh-ключей
В более ранних версиях Vagrant для подключения к виртуальной машине использовался ключ ~/.vagrant.d/insecure_private_key
. Но теперь Vagrant выдает предупреждение, что обнаружен небезопасный ключ и заменяет его:
==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Machine booted and ready!
Этот ключ расположен в где-то в недрах директрории .vagrant
(создается после первого запуска vagrant up
). Посмотреть, какой ключ будет использован, можно с помощью команды:
$ vagrant ssh-config Host default HostName 127.0.0.1 User vagrant Port 2222 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile D:/vagrant/www/.vagrant/machines/default/virtualbox/private_key IdentitiesOnly yes LogLevel FATAL
Можно отменить создание ssh-ключа, если добавить в файл конфигурации config.ssh.insert_key = false
:
Vagrant.configure(2) do |config| # образ системы Ubuntu 18/04 LTS (Bionic Beaver) config.vm.box = "bento/ubuntu-18.04" # не проверять репозиторий на наличие обновлений config.vm.box_check_update = false # отменить создание ssh-ключа config.ssh.insert_key = false config.vm.provider "virtualbox" do |vb| # имя виртуальной машины vb.name = "ubuntu-1804-test" # объем оперативной памяти vb.memory = 2048 # количество ядер процессора vb.cpus = 1 end # hostname виртуальной машины config.vm.hostname = "ubuntu-1804-test" end
Поиск: CLI • Linux • Ubuntu • Web-разработка • Windows • Виртуальная машина • Настройка • Установка • Vagrant