So exportieren Sie eine virtuelle Vagrant-Maschine, um sie zu übertragen

107

Ich habe eine Vagrant-Box in Betrieb (konfiguriert mit einem LAMP-Stack). Ich muss es auf einen anderen PC übertragen. Wie kann ich es exportieren? Ich vermute, dass ich eine Datei (oder Dateien) erhalten kann, die auf einen anderen PC kopiert werden kann, sodass ich dort einen Befehl zum Importieren der Vagrant-Box ausführen kann.

Eugene
quelle
1
Ich habe einige Skripte geschrieben, um die Übertragung von Vagabundkisten zu automatisieren. Siehe soniah / transfer_vagrant_boxes
Sonia Hamilton
// Hat jemand Sonias Skripte ausprobiert?
Nathan Basanese
@ NathanBasanese AFAIU, diese Skripte helfen beim Übertragen von Basisboxen, nicht von den resultierenden laufenden VMs, da sie das Umpacken von vagabundierenden Boxen verwenden (siehe seine Dokumente)
Olivier Berger

Antworten:

119

Sie haben zwei Möglichkeiten, dies zu tun. Ich nenne es schmutzig und sauber :

1. Der schmutzige Weg

Erstellen Sie mit dem folgenden vagrant packageBefehl eine Box aus Ihrer aktuellen virtuellen Umgebung :

http://docs.vagrantup.com/v2/cli/package.html

Kopieren Sie dann die Box auf den anderen PC, fügen Sie sie mit hinzu vagrant box addund führen Sie sie vagrant upwie gewohnt aus.

Beachten Sie, dass Dateien in Ihrem Arbeitsverzeichnis (das mit dem Vagrantfile) beim Booten der virtuellen Maschine freigegeben werden. Sie müssen sie daher auch auf den anderen PC kopieren.

2. Der saubere Weg

Theoretisch sollte es niemals notwendig sein, mit Vagrant zu exportieren / importieren. Wenn Sie die Voraussicht haben, die Bereitstellung für die Konfiguration der virtuellen Umgebung (Chef, Puppet, Ansible) und ein Versionskontrollsystem wie git für Ihr Arbeitsverzeichnis zu verwenden, ist das Kopieren einer Umgebung an diesem Punkt so einfach wie das Ausführen von:

git clone <your_repo>
vagrant up
Emyl
quelle
5
Der Versuch, so sauber und vorausschauend zu sein ... Sie müssen keine Betriebssystem-Installations-ISO in Ihr Git-Repo einfügen, oder? Schlagen Sie das zum Beispiel vor? Wenn Sie ansible verwenden, enthält Ihr Repo das Vagrantfile und ein ansible-Playbook. Die Vagrant-Datei würde 1. eine Basebox von vagrantcloud herunterladen 2. das ansible Playbook ausführen, um die Basebox unter Verwendung anderer Dateien / Repos / Cloud-Speicher bereitzustellen / zu konfigurieren. Richtig? Oder gibt es noch etwas im Git Repo?
Kochfelder
8
Berücksichtigt der "saubere Weg" Datenbanken (mySQL, Wordpress), die sich möglicherweise in der VM befinden? Wie kann das mit dem anderen PC synchronisiert werden?
Kevllar
1
@kevllar Der saubere Weg bedeutet, dass außerhalb des Git-Repositorys keine Informationen vorhanden sind, die zum Starten einer neuen Entwicklungsumgebung erforderlich sind. Dies bedeutet, dass die Installation und Konfiguration der Datenbank während der Bereitstellung der neuen Vagrant-Box (über Chef / Puppet / what-have-you) abgeschlossen wird.
Hovis Biddle
2
Ist der von Hashicorp empfohlene Weg also auch "schmutzig"? dh die Box verpacken und auf den Atlas-Server hochladen? Ich bin mir nicht sicher, ob der "saubere" Weg tatsächlich die genaue Umgebung nachbilden wird, was ich für den ganzen Zweck von Vagrant hielt ...
sijpkes
1
Ich verstehe nicht, wie der offizielle Weg als schmutzig angesehen wird. Jede gute Seele könnte erklären warum?
thclpr
28

Meine Festplatte in meinem Mac machte mitten in einem Projekt Pieptöne, daher entschied ich mich, eine SSD zu installieren. Ich musste mein Projekt von einer Festplatte auf eine andere verschieben. Ein paar Dinge zu beachten:

  • Ich bin Vagrant mit Virtualbox auf einem Mac
  • Ich benutze Git

Das hat bei mir funktioniert:

1.) Copy your ~/.vagrant.d directory to your new machine.
2.) Copy your ~/VirtualBox\ VMs directory to your new machine. 
3.) In VirtualBox add the machines one by one using **Machine** >> **Add**
4.) Run `vagrant box list` to see if vagrant acknowledges your machines. 
5.) `git clone my_project`
6.) `vagrant up`

Ich hatte ein paar Probleme mit VB Guest Ergänzungen.

Geben Sie hier die Bildbeschreibung ein

Ich habe sie mit dieser Lösung behoben .

Ken Prince
quelle
//, ich werde es versuchen, @KJPrince. Danke, dass du es für uns aufgeschlüsselt hast.
Nathan Basanese
//, ich habe es versucht, aber ich habe die Fehler unter dem folgenden Link erhalten, als ich über mein VirtualBoxVMs-Verzeichnis nach ~ / VirtualBox \ VMs kopiert und ausgeführt habe vagrant box list: 0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs/…
Nathan Basanese
18

Das ist eigentlich ziemlich einfach

  1. Installieren Sie die virtuelle Box und den Vagabund auf der Remote-Maschine
  2. Wickeln Sie Ihre Vagabundmaschine ein

    vagrant package --base [machine name as it shows in virtual box] --output /Users/myuser/Documents/Workspace/my.box

  3. Kopieren Sie die Box auf Ihre Fernbedienung

  4. Initiieren Sie die Box auf Ihrem Remote-Computer, indem Sie ausführen

    vagrant init [machine name as it shows in virtual box] /Users/myuser/Documents/Workspace/my.box

  5. Lauf vagrant up

Stefan Diabo
quelle
1
Wenn der Name Ihres Computers lang ist und Sie zu faul sind, um die Virtualbox-Benutzeroberfläche aufzurufen und den Namen oder die ID einzugeben, können Sie alle Namen und IDs Ihrer VM mit diesem Terminalbefehl auflisten : VBoxManage list vms. Nachdem Sie einfach kopieren und tun können, was in @Phil 2. und 4. Schritt gesagt wird. :) Ja.
Sid
@Sid warum nicht nur $ vagrant Box Liste
Ken Ratanachai S.
@ KenRatanachaiS, weil Ihr Befehl Felder auflistet, zB: ( scotch/box (virtualbox, 3.0)). Mein Befehl - virtuelle Maschinen mit Kennung, zB:"Win10 - SandBox" {bc251c06-501f-4c0f-bgfa-21f2815ba2cd}
Sid
2

Keine der oben genannten Antworten hat bei mir funktioniert. Ich habe 2 Tage lang daran gearbeitet, eine Vagrant + VirtualBox-Maschine von einem Computer auf einen anderen zu migrieren ... Es ist möglich!

Zunächst müssen Sie verstehen, dass die virtuelle Maschine von Ihrem Synchronisierungs- / freigegebenen Ordner getrennt ist. Wenn Sie also Ihren Computer packen, packen Sie ihn ohne Ihre Dateien, aber mit den Datenbanken.

Was musst du machen:

1- Öffnen Sie die CMD Ihres Computer-1-Host-Computers (Befehlszeile. Öffnen Sie sie als Administrator mit der rechten Schaltfläche -> "Als Administrator ausführen") und gehen Sie zu Ihren vagabundierten installierten Dateien. In meinem Fall: C: / VVV Sie sehen Ihre Vagrant-Datei und auch diese Ordner:

/config/
/database/
/log/
/provision/
/www/
Vagrantfile
...

Im Ordner / www / habe ich meinen Synchronisierungsordner mit meinen Entwicklungsdomänen. Möglicherweise haben Sie Ihren Synchronisierungsordner an einem anderen Ort. Stellen Sie jedoch sicher, dass Sie verstehen, was Sie tun. Auch / config und / database sind Synchronisierungsordner.

2- Führen Sie diesen Befehl aus: vagrant package --vagrantfile Vagrantfile

(Dieser Befehl erstellt ein Paket Ihrer virtuellen Maschine unter Verwendung Ihrer Vagrantfile-Konfiguration.)

Folgendes können Sie in der Vagrant-Dokumentation zum Befehl lesen:

Ein häufiges Missverständnis ist, dass die Option --vagrantfile eine Vagrantfile verpackt, die verwendet wird, wenn vagrant init mit diesem Feld verwendet wird. Das ist nicht der Fall. Stattdessen wird eine Vagrant-Datei geladen und als Teil des Vagrant-Ladevorgangs gelesen, wenn die Box verwendet wird. Weitere Informationen finden Sie in der Vagrantfile-Ladereihenfolge.

https://www.vagrantup.com/docs/cli/package.html

Wenn Sie fertig sind, haben Sie eine package.box-Datei.

3- Kopieren Sie alle diese Dateien (/ config, / database, Vagrantfile, package.box usw.) und fügen Sie sie auf Ihrem Computer 2 genau dort ein, wo Sie Ihre virtuelle Maschine installieren möchten (in meinem Fall D: / VVV).

Jetzt haben Sie eine Kopie von allem, was Sie auf Ihrem Computer 2-Host benötigen.

4- Führen Sie Folgendes aus: vagrant box add package.box --name VVV

(Der Name wird verwendet, um Ihre virtuelle Maschine zu benennen. In meinem Fall heißt er VVV.) (Sie können --force verwenden, wenn Sie bereits eine virtuelle Maschine mit diesem Namen haben und diese überschreiben möchten. (Vorsichtig verwenden!))

Dadurch wird Ihre neue virtuelle Vagrant-Maschine entpackt.

5- Wenn Sie fertig sind, führen Sie Folgendes aus: vagrant up

Die Maschine wird installiert und sollte auf dem "Oracle Virtual Machine Box Manager" angezeigt werden. Wenn Sie die virtuelle Maschine nicht sehen können, versuchen Sie, die Oracle VM-Box als Administrator auszuführen (Rechtsklick -> Als Administrator ausführen).

Sie haben jetzt vielleicht alles in Ordnung, aber denken Sie daran, ob Ihre Gastgeber Ihren Erwartungen entsprechen:

c:/windows/system32/hosts

6- Vielleicht ist es eine gute Idee, Ihre Host-Datei von Ihrem Computer 1 auf Ihren Computer 2 zu kopieren. Oder kopieren Sie die Zeilen, die Sie benötigen. In meinem Fall sind dies die Hosts, die ich brauche:

192.168.50.4 test.dev
192.168.50.4 vvv.dev
...

Wobei 192.168.50.4 die IP meiner virtuellen Maschine ist und test.dev und vvv.dev Hosts entwickeln.

Ich hoffe das kann dir helfen :) Ich freue mich, wenn du dir ein Feedback gibst.

Einige Besonderheiten meines Falles, die Sie vielleicht finden:

Als ich vagabundierte, gab es ein Problem mit MySQL, es funktionierte nicht. Ich musste auf dem virtuellen Server laufen (Rechtsklick auf die virtuelle Oracle-Maschine -> Konsole anzeigen):apt-get install mysql-server

Danach lief ich wieder vagabundierend und alles funktionierte aber ohne Daten in den Datenbanken. Also habe ich eine mysqldump-All-Tabelle von Computer 1 erstellt und auf Computer 2 hochgeladen.

SONSTIGE HINWEISE: Meine virtuelle Maschine befindet sich nicht genau auf Computer 1 und Computer 2. Beispielsweise habe ich vor einiger Zeit eine interne Konfiguration für die Verwendung von NFS (zur Beschleunigung der Server-Synchronisierungsordner) vorgenommen und musste diesen Befehl auf Computer 2 erneut ausführen Gastgeber:vagrant plugin install vagrant-winnfsd

gtamborero
quelle
1

Wie angegeben in

Wie kann ich ändern, wo Vagrant nach seiner virtuellen Festplatte sucht?

Der Status der virtuellen Maschine wird in einem vordefinierten VirtualBox-Ordner gespeichert. Durch das Kopieren der entsprechenden Maschine (Ordner) neben Ihrem Vagrant-Projekt auf Ihren anderen Host sollte der Status Ihrer virtuellen Maschine erhalten bleiben.

Manuel
quelle
0

Ab 2019 gibt es einen Unterbefehl: vagrant box repackage

vagrant box repackage --help 
Usage: vagrant box repackage <name> <provider> <version>
    -h, --help                       Print this help

Sie können finden name providerund versiondurch Laufenvagrant box list

vagrant box list
macinbox (virtualbox, 10.14.5)

Die Ausgabe von vagrant box repackageist eine Datei namens, package.boxdie im Grunde eine TGZ-Datei ist, deren Inhalt wie folgt aufgelistet werden kann:

tar tzf package.box
./metadata.json
./box.ovf
./Vagrantfile
./box-disk001.vmdk
Tiago Lopo
quelle