Vagrant — Reproduzierbare Entwicklungsumgebungen als VM

Praxis-Guide zu Vagrant — VM-basierte Entwicklungsumgebungen mit Vagrantfile, Boxen, Providern, Provisioning und Snapshots auf der Kommandozeile.

Vagrant von HashiCorp baut reproduzierbare Entwicklungsumgebungen als vollwertige virtuelle Maschinen – nicht als Container. Die gesamte Konfiguration liegt in einer einzigen Datei, dem Vagrantfile, das du zusammen mit deinem Projekt versionierst. Als Basis dienen vorgefertigte Boxen, die Vagrant über einen Provider wie VirtualBox, VMware, Hyper-V oder libvirt startet. So bekommt jedes Teammitglied mit einem einzigen vagrant up exakt dieselbe Umgebung. Dieser Guide führt dich durch die wichtigsten Kommandos – vom Initialisieren über das Provisioning bis zu Snapshots.

Initialisieren & Starten

vagrant init <box> — Erstellt ein Vagrantfile für eine bestimmte Box.

vagrant init ubuntu/jammy64

vagrant up — Startet die VM und führt das Provisioning aus.

vagrant up

vagrant up --provider=<name> — Startet mit einem bestimmten Provider.

vagrant up --provider=vmware_desktop

vagrant up --no-provision — Startet, ohne die Provisioner auszuführen.

vagrant up --no-provision

vagrant reload — Startet die VM neu (übernimmt Änderungen am Vagrantfile).

vagrant reload

vagrant reload --provision — Startet neu und führt die Provisioner erneut aus.

vagrant reload --provision

Stoppen & Löschen

vagrant halt — Fährt die VM kontrolliert herunter.

vagrant halt

vagrant halt -f — Erzwingt das Herunterfahren der VM.

vagrant halt -f

vagrant suspend — Pausiert die VM (Zustand wird auf die Festplatte gesichert).

vagrant suspend

vagrant resume — Setzt eine pausierte VM fort.

vagrant resume

vagrant destroy — Stoppt und löscht die VM vollständig.

vagrant destroy

vagrant destroy -f — Erzwingt das Löschen ohne Rückfrage.

vagrant destroy -f

SSH & Status

vagrant ssh — Verbindet sich per SSH mit der VM.

vagrant ssh

vagrant ssh -c '<command>' — Führt einen Befehl per SSH in der VM aus.

vagrant ssh -c 'cat /etc/os-release'

vagrant ssh-config — Zeigt die SSH-Konfiguration (zur Nutzung mit dem ssh-Befehl).

vagrant ssh-config >> ~/.ssh/config

vagrant status — Zeigt den Status der aktuellen VM.

vagrant status

vagrant global-status — Zeigt den Status aller Vagrant-VMs systemweit.

vagrant global-status

vagrant port — Zeigt die Port-Weiterleitungen der VM.

vagrant port

Provisioning

vagrant provision — Führt die Provisioner auf einer laufenden VM aus.

vagrant provision

vagrant provision --provision-with <name> — Führt nur einen bestimmten Provisioner aus.

vagrant provision --provision-with shell

vagrant upload <src> <dest> — Lädt eine Datei in die VM hoch.

vagrant upload config.yaml /home/vagrant/config.yaml

Box-Verwaltung

vagrant box list — Listet alle installierten Boxen auf.

vagrant box list

vagrant box add <name> — Lädt eine Box herunter und fügt sie hinzu.

vagrant box add ubuntu/jammy64

vagrant box update — Aktualisiert die Box der aktuellen Umgebung.

vagrant box update

vagrant box remove <name> — Entfernt eine Box aus dem lokalen Speicher.

vagrant box remove ubuntu/focal64

vagrant box outdated — Prüft, ob die Box veraltet ist.

vagrant box outdated

vagrant package --output <file> — Verpackt die aktuelle VM in eine wiederverwendbare Box.

vagrant package --output mybox.box

Snapshots

vagrant snapshot save <name> — Erstellt einen benannten Snapshot der VM.

vagrant snapshot save before-update

vagrant snapshot restore <name> — Stellt einen Snapshot wieder her.

vagrant snapshot restore before-update

vagrant snapshot list — Listet alle Snapshots auf.

vagrant snapshot list

vagrant snapshot delete <name> — Löscht einen Snapshot.

vagrant snapshot delete before-update

vagrant snapshot push — Erstellt schnell einen Snapshot (Stack-basiert).

vagrant snapshot push

vagrant snapshot pop — Stellt den zuletzt abgelegten Snapshot wieder her und löscht ihn.

vagrant snapshot pop

Fazit

Vagrant glänzt überall dort, wo du eine vollständige, isolierte Umgebung brauchst – ein anderes Betriebssystem, ein Kernel-Modul oder ein Setup, das sich mit Containern nur umständlich nachbilden lässt. Sobald dein Vagrantfile einmal steht, ist der Einstieg für neue Teammitglieder ein einziges Kommando. Für leichtgewichtige, rein Linux-basierte Dienste sind Container oft die schlankere Wahl; für reproduzierbare VM-Umgebungen bleibt Vagrant das Werkzeug der Wahl.

Verwandte Kommandos

  • ddev – containerbasierte lokale Entwicklungsumgebungen für PHP-Projekte
  • docker – Container statt vollwertiger VMs bauen und betreiben
  • docker-compose – mehrere Container deklarativ orchestrieren