Vagrant ist ein Werkzeug zur Verwaltung reproduzierbarer Entwicklungs- und Testumgebungen. Es beschreibt virtuelle Maschinen in einer Textdatei (Vagrantfile), startet sie über eine Vielzahl von Anbietern und provisioniert sie anschließend automatisch. Der Anspruch: vagrant up genügt, und die Umgebung eines Teams ist identisch.
Aufbau des Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "debian/trixie64"
config.vm.hostname = "dev01"
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.synced_folder "./src", "/var/www/html", type: "rsync"
config.vm.provider "libvirt" do |lv|
lv.memory = 4096
lv.cpus = 2
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update && apt-get install -y nginx
SHELL
end
Die Bausteine
- Box: das Basisabbild. Boxen sind Versionen von Betriebssystem-Installationen und werden aus dem Vagrant Cloud-Katalog oder aus einer eigenen Datei geladen.
- Provider: die Virtualisierungsschicht – VirtualBox, libvirt (KVM/QEMU), Hyper-V, VMware oder Docker. Dieselbe Konfiguration kann auf mehreren Providern laufen, was besonders für Teams mit unterschiedlichen Arbeitsplätzen nützlich ist.
- Provisioner: die Konfiguration nach dem Start – Shell-Skript, Ansible, Puppet, Chef oder Dateiübertragung.
- Netzwerk: private Netze mit fester Adresse für Tests zwischen mehreren VMs, weitergeleitete Ports für Zugriff vom Host, öffentliche Netze mit Bridge in das reale Netz.
- Synced Folder: geteilte Verzeichnisse zwischen Host und Gast. Wichtig zu wissen: VirtualBox Shared Folders sind langsam, und Dateirechte verhalten sich anders. Für ernsthafte Arbeit ist
rsyncoder NFS die bessere Wahl – besonders bei Anwendungen, die Dateisystem-Ereignisse auswerten (Dateiwatcher funktionieren über geteilte Ordner oft nicht zuverlässig).
Befehle
vagrant up # Umgebung erstellen und starten
vagrant ssh # anmelden
vagrant provision # Provisioner erneut ausführen
vagrant reload # neu starten (z.B. nach Netzwerkänderung)
vagrant status
vagrant halt # stoppen
vagrant destroy -f # vollständig löschen
vagrant box list # vorhandene Boxen
vagrant snapshot save vor-update
vagrant snapshot restore vor-update
Wann Vagrant sinnvoll ist
Eine einzelne VM braucht kein Vagrant – da genügt ein Hypervisor mit Weboberfläche. Der Nutzen entsteht durch Mehrfachumgebungen: ein Cluster aus drei Knoten plus Lastverteiler zum Testen von Konfigurationen, eine Umgebung fürs Team, ein reproduzierbarer Fehlerbericht. Genau hier spielt Vagrant seine Stärke aus, weil die Beschreibung als Datei im Repository versioniert werden kann. Für den Serverbetrieb ist es dagegen das falsche Werkzeug – dort sind Packer für Abbilder und Terraform für die Infrastruktur zuständig. Für reine Containertests reicht Docker Compose oft aus und startet schneller.
Verwandte Grundlagen: Virtualisierung, Docker Compose, Unveränderliche Infrastruktur, Terraform.