Kurze Einführung in Vagrant

Datum

Vagrant ist eine freie Ruby-Anwendung zum Erstellen und Verwalten von virtuellen Maschinen. Vagrant ermöglicht einfache Softwareverteilung (englisch Deployment) insbesondere in der Software- und Webentwicklung und dient als Wrapper zwischen Virtualisierungssoftware wie VirtualBox, KVM/QEMU, VMware und Hyper-V und Software-Configuration-Management-Anwendungen beziehungsweise Systemkonfigurationswerkzeugen wie Chef, Saltstack und Puppet.

Quelle: wikipedia.org

Installation

Vagrant befindet sich in den Standard-Repos der meisten Distros. Sollte dies einmal nicht der Fall sein, bzw. es wird eine neuere Version benötigt, so findet man auf der offiziellen Produktseite mehrere Links zum herunterladen.
Meist wird dazu noch eine aktuelle Version von Ruby benötigt.

Vagrant verwenden

vagrant init

Vagrant bezieht sämtliche Informationen zu den zu erstellenden VMs/Containern aus einer einzigen Konfigurationsdatei.
Diese heißt Vagrantfile.

Führt man den Befehl vagrant init aus, so wird eine Vagrantfile in dem aktuellen Ordner angelegt, welche dann nach eigenen Wünschen bearbeitet werden kann.

$ vagrant init
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.

Die erstellte Vagrantfile ist, aufgrund der Kommentare, so ca. 70 Zeilen lang. Möchte man es etwas minimalistischer, so erstellt man mit vagrant init -m eine minimale Konfigurationsdatei, welche 3 Zeilen lang ist und folgenden Inhalt hat:

Vagrant.configure("2") do |config|
  config.vm.box = "base"
end

Provider

Standardmäßig ist VirtualBox der verwendete provider, womit die Systeme erstellt werden. Dies kann man natürlich entsprechend ändern.
In der Konfigurationsdatei kann man per config.vm.provider angeben was verwendet werden soll um eine VM oder einen Container zu erstellen.

Beispiel für die Verwendung von docker:

config.vm.provider "docker" do |d|
    d.image = "helloworld"
  end

Hierbei wird angegeben, dass docker verwendet werden soll und es wird die Variable d für diesen Container festgelegt mit welcher weitere Einstellungen vorgenommen werden können (z.B. die Angabe des docker-Images).

Um in VirtualBox eine VM mit 1024MB RAM zu erstellen kann man z.B. folgende Einträge verwenden:

 config.vm.provider "virtualbox" do |v|
   config.vm.box = "hashicorp/precise64"
   v.memory = 1024
end

Da es nicht möglich ist hier sämtliche verfügbaren Optionen aufzuzeigen lohnt sich ein Blick in die Dokumentation.

vagrant validate

Hat man alle Einstellungen vorgenommen kann man per vagrant validate die Vagrantfile auf Syntax-Fehler überprüfen.

$ vagrant validate
Vagrantfile validated successfully.
vagrant up

War die Überprüfung der Syntax ohne Fehler, so kann man sein(e) System(e) mit dem Befehl vagrant up einrichten und starten.

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'hashicorp/precise64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'hashicorp/precise64' is up to date...
==> default: Setting the name of the VM: vagrant_default_1541201256268_73445
Vagrant is currently configured to create VirtualBox synced folders with
the `SharedFoldersEnableSymlinksCreate` option enabled. If the Vagrant
guest is not trusted, you may want to disable this option. For more
information on this option, please refer to the VirtualBox manual:

  https://www.virtualbox.org/manual/ch04.html#sharedfolders

This option can be disabled globally with an environment variable:

  VAGRANT_DISABLE_VBOXSYMLINKCREATE=1

or on a per folder basis within the Vagrantfile:

  config.vm.synced_folder '/host/path', '/guest/path', SharedFoldersEnableSymlinksCreate: false
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> 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:
    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!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.2.0
    default: VirtualBox Version: 5.2
==> default: Mounting shared folders...
    default: /vagrant => /tmp/vagrant

Anmerkung: Dieser Befehl kann auch dazu verwendet werden gestoppte VMs/Container wieder zu starten.

vagrant reload

Wie der Befehl bereits vermuten lässt kann man damit seine Systeme einmal neustarten.

$ vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Checking if box 'hashicorp/precise64' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> 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: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default: 
    default: Guest Additions Version: 4.2.0
    default: VirtualBox Version: 5.2
==> default: Mounting shared folders...
    default: /vagrant => /tmp/vagrant
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
vagrant box add

Um neue Images für vagrant herunterzuladen verwendet man den Befehl vagrant box add <User/Box>

$ vagrant box add generic/alpine38
==> box: Loading metadata for box 'generic/alpine38'
    box: URL: https://vagrantcloud.com/generic/alpine38
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) parallels
4) virtualbox
5) vmware_desktop

Enter your choice: 4
==> box: Adding box 'generic/alpine38' (v1.8.40) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/generic/boxes/alpine38/versions/1.8.40/providers/virtualbox.box
==> box: Successfully added box 'generic/alpine38' (v1.8.40) for 'virtualbox'! 

Weitere Images für vagrant findet man hier: app.vagrantup.com

Die bereits heruntergeladenen Images auflisten:

$ vagrant box list
generic/alpine38    (virtualbox, 1.8.40)
hashicorp/precise64 (virtualbox, 1.1.0)
vagrant ssh

Um ein System per ssh zu betreten verwendet man vagrant ssh.

$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
New release '14.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Welcome to your Vagrant-built virtual machine.
Last login: Fri Sep 14 06:23:18 2012 from 10.0.2.2
vagrant@precise64:~$  
vagrant status

Um eine Übersicht über die per vagrant gebauten Systeme zu erhalten verwendet man vagrant status:

$ vagrant status
Current machine states:

default                   running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
vagrant destroy

Natürlich kann man die VMs/Container auch wieder nach belieben zerstören:

$ vagrant destroy 
    default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Forcing shutdown of VM...
==> default: Destroying VM and associated drives...

-h

Es empfiehlt sich immer mal einen Blick in die Option -h der einzelnen (Sub)Befehle zu werfen um zu erfahren welche weiteren (Sub)Befehle möglich sind.

$ vagrant box -h
Usage: vagrant box <subcommand> [<args>]

Available subcommands:
     add
     list
     outdated
     prune
     remove
     repackage
     update

For help on any individual subcommand run `vagrant box <subcommand> -h`

Autor
Kategorien Automatisierung, Linux

PRTG Map