Ссылки
https://www.vagrantup.com/docs - документация https://www.vagrantup.com/downloads - загрузка установщика Linux \ Mac \ Windows https://learn.hashicorp.com/tutorials/vagrant/getting-started-boxes - быстрый старт https://app.vagrantup.com/boxes/search - все возможные боксы (образы ВМ) https://wiki.archlinux.org/title/Vagrant
Команды
0. Создаем каталог и инициализируем vagrant mkdir primer0 - создали каталог primer0 cd primer0 - перешли в него vagrant init - выполнили инициализацию vagrant (Создался файл Vagrant) 1. Редактируем файл vim Vagrant 2. Управление vagrant up - запуск ВМ vagrant plugin install vagrant-libvirt - добавить плагин для libvirt #vagrant plugin install vagrant-vbguest vagrant-share - добавить плагин для vagrant plugin install vagrant-lxc - добавить плагин для lxc vagrant up --provider=libvirt - переназначаем провайдера (docker, virtualbox, vmware_fusion) vagrant shutdown - Остановка ВМ vagrant destroy - удалить ВМ vagrant ssh-config - показать параметры подключения (IP адрес ВМ) vagrant provision - выполнить provision (запуск скриптов ansible, bash) vagrant ssh - подключится к ВМ по ssh 3. Дополнительные возможности vagrant box add hashicorp/bionic64 - Скачать образ hashicorp/bionic64 (Ububntu 18.04) vagrant init hashicorp/bionic64 - Выполнили инициализацию с ВМ bionic (Ububntu 18.04)
Vagrant ubuntu 16.04 (no offcial)
Vagrant.configure("2") do |config|
config.vm.box = "generic/ubuntu1604"
end
Vagrant ubuntu 16.04 (official virtualbox only)
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
end
Vagrant ubuntu 18.04 (no offcial)
Vagrant.configure("2") do |config|
config.vm.box = "generic/ubuntu1804"
end
Vagrant ubuntu 20.04 (no offcial)
Vagrant.configure("2") do |config|
config.vm.box = "generic/ubuntu2004"
end
Vagrant ubuntu 20.10 (no offcial)
Vagrant.configure("2") do |config|
config.vm.box = "generic/ubuntu2010"
end
Vagrant debian 8
Vagrant.configure("2") do |config|
config.vm.box = "debian/jessie64"
end
Vagrant debian 9
Vagrant.configure("2") do |config|
config.vm.box = "debian/stretch64"
end
Vagrant debian 10
Vagrant.configure("2") do |config|
config.vm.box = "debian/buster64"
end
Vagrant debian 11
Vagrant.configure("2") do |config|
config.vm.box = "debian/bullseye64"
end
Vagrant CentOS 7
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
end
Vagrant CentOS 8
Vagrant.configure("2") do |config|
config.vm.box = "generic/centos8"
end
Vagrant Docker
Vagrant.configure("2") do |config|
config.vm.provider "docker" do |d|
d.image = "foo/bar"
end
end
Vagrant пример №1 При развертывании есть возможность добавить копирование/синхронизацию каталога
Vagrant.configure("2") do |config|
config.vm.box = "debian/jessie64"
config.vm.synced_folder "app/", "/var/www/app"
end
Vagrant пример №2 При развертывании есть возможность настроить сеть например проброс портов
Vagrant.configure("2") do |config|
config.vm.box = "debian/jessie64"
config.vm.synced_folder "app/", "/var/www/app"
config.vm.network "forward_port", guest: 8080, host:8081
end
Vagrant пример №3 Запуск программ и скриптов
Vagrant.configure("2") do |config|
config.vm.box = "debian/jessie64"
config.vm.synced_folder "app/", "/var/www/app"
config.vm.network "forward_port", guest: 8080, host:8081
config.vm.define "app" do |app|
app.vm.provision "shell", line: "apt-get install -y nodejs npm"
end
end
Vagrant пример №4 Запуск программ и скриптов
Vagrant.configure("2") do |config|
config.vm.box = "debian/jessie64"
config.vm.synced_folder "app/", "/var/www/app"
config.vm.network "forward_port", guest: 8080, host:8081
config.vm.define "app" do |app|
app.vm.provision "shell", line: "apt-get install -y nodejs npm"
end
end
Vagrant пример №5 Запуск программ и скриптов
Vagrant.configure("2") do |config|
config.vm.box = "debian/jessie64"
config.vm.synced_folder "app/", "/var/www/app"
config.vm.network "forward_port", guest: 8080, host:8081
config.vm.define "app" do |app|
app.vm.provision "shell", line: "apt-get install -y nodejs npm"
end
$script - <<-SCRIPT
apt-get install nodejs npm -y
SCRIPT
app.vm.provision "shell", inline: $script
app.vm.provision "shell", path: "scripts/pre.sh"
end
Vagrant пример №6 Для настройки ВМ поддерживаются конфигурационные менеджеры, такие как Ansible, Chef, Puppet, Salt
Vagrant.configure("2") do |config|
config.vm.box = "debian/jessie64"
app.vm.provision "ansible_local" do |ansible|
ansible.playbook = "playbooks/node.yaml"
ansible.become = true
ansible.become_user = "root"
end
Vagrant пример №7используем shell разворачиваем CentOS - gitlib
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.hostname = "gitlab"
config.vm.provider "libvirt" do |domain|
domain.memory = "4096"
domain.cpus = "4"
end
config.vm.provision "shell", inline: <<-SHELL
yum -y update
yum install -y curl policycoreutils-python openssh-server perl
systemctl enable sshd
systemctl start sshd
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
systemctl reload firewalld
yum install postfix
systemctl enable postfix
systemctl start postfix
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
EXTERNAL_URL="https://gitlab.linux.local" yum install -y gitlab-ce
SHELL
end
Vagrant пример №8 используем ansible provision разворачиваем Debian 10 и применяем test.yaml
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.box = "debian/buster64"
config.vm.hostname = "superhost"
# config.vm.network "public_network",
# :dev => "br0",
# :ovs => "true"
config.vm.provider "libvirt" do |domain|
domain.memory = "1024"
domain.cpus = "2"
end
config.vm.provision "ansible" do |ansible|
ansible.playbook = "test.yaml"
end
end
Vagrant пример №9
Vagrant.configure(2) do |config|
config.vm.box = "debian/bullseye64"
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.define "sb" do |sb|
sb.vm.hostname = "sb"
sb.vm.network "private_network", ip: "192.168.200.200"
config.vm.provider "libvirt" do |sb|
#sb.name = "sb"
sb.memory = "1024"
sb.cpus = "1"
end
sb.vm.provision "ansible" do |ansible|
ansible.playbook = "sb.yaml"
end
end
config.vm.define "cb" do |cb|
cb.vm.hostname = "cb"
cb.vm.network "private_network", ip: "192.168.200.201"
config.vm.provider "libvirt" do |cb|
# cb.name = "cb"
cb.memory = "1024"
cb.cpus = "2"
end
cb.vm.provision "ansible" do |ansible|
ansible.playbook = "cb.yaml"
end
end
end