Comment exporter une machine virtuelle Vagrant pour la transférer

108

J'ai une boîte vagabonde en marche (configurée avec une pile de LAMPES). Je dois le transférer sur un autre PC. Comment puis-je l'exporter? Je suppose que je peux obtenir un fichier (ou des fichiers) qui peuvent être copiés sur un autre PC, donc là je peux exécuter une commande pour importer la boîte vagrant.

Eugène
la source
1
J'ai écrit des scripts pour automatiser le transfert des boîtes vagabondes. Voir soniah / transfer_vagrant_boxes
Sonia Hamilton
//, Quelqu'un a-t-il essayé les scripts de Sonia?
Nathan Basanese
@NathanBasanese AFAIU, ces scripts aident à transférer les boîtes de base, pas les machines virtuelles en cours d'exécution résultantes, car ils utilisent le reconditionnement de la boîte vagabonde (voir sa documentation)
Olivier Berger

Réponses:

120

Vous avez deux façons de faire cela, je l'appellerai manière sale et manière propre :

1. La manière sale

Créez une boîte à partir de votre environnement virtuel actuel, en utilisant la vagrant packagecommande:

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

Copiez ensuite la boîte sur l'autre PC, ajoutez-la en utilisant vagrant box addet exécutez-la vagrant upcomme d'habitude.

Gardez à l'esprit que les fichiers de votre répertoire de travail (celui avec le Vagrantfile) sont partagés lorsque la machine virtuelle démarre, vous devez donc également le copier sur l'autre PC.

2. La voie propre

Théoriquement, il ne devrait jamais être nécessaire d'exporter / importer avec Vagrant. Si vous avez la prévoyance d'utiliser l'approvisionnement pour configurer l'environnement virtuel (chef, puppet, ansible) et un système de contrôle de version comme git pour votre répertoire de travail, copier un environnement serait à ce stade simple comme en cours d'exécution:

git clone <your_repo>
vagrant up
Emyl
la source
5
Essayer d'être cet administrateur propre et prévoyant ... Vous n'avez pas à mettre une iso d'installation du système d'exploitation dans votre dépôt git, n'est-ce pas? Proposez-vous cela, par exemple. en utilisant ansible, votre repo contiendrait le Vagrantfile et un playbook ansible. Le Vagrantfile 1. téléchargerait une basebox à partir de vagrantcloud 2. exécuterait le playbook ansible pour provisionner / configurer la basebox en utilisant d'autres fichiers / repos / cloud-storage. Droite? Ou y a-t-il autre chose dans le repo git?
plaques de cuisson
8
Est-ce que la "manière propre" tient compte des bases de données (mySQL, Wordpress) qui pourraient être à l'intérieur du vm? Comment cela peut-il être synchronisé avec l'autre PC?
kevllar
1
@kevllar La méthode propre signifie qu'aucune information en dehors du dépôt git n'est requise pour démarrer un nouvel environnement de développement. Cela implique que l'installation et la configuration de la base de données seront terminées lors de l'approvisionnement de la nouvelle boîte vagrant (via Chef / Puppet / what-have-you).
Hovis Biddle
2
Alors, le chemin recommandé par Hashicorp est-il également «sale»? c'est-à-dire emballer la boîte et la télécharger sur le serveur atlas? Je ne suis pas sûr que la méthode `` propre '' reproduise réellement l'environnement exact, ce qui, je pensais, était le but même de vagrant ....
sijpkes
1
Je ne comprends pas comment la manière officielle est considérée comme sale. Toute bonne âme pourrait expliquer pourquoi?
thclpr
28

Mon disque dur dans mon Mac émettait des bips sonores au milieu d'un projet, j'ai donc décidé d'installer un SSD. J'avais besoin de déplacer mon projet d'un disque à un autre. Quelques points à considérer:

  • I'm vagrant w / virtualbox sur un Mac
  • J'utilise git

C'est ce qui a fonctionné pour moi:

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`

J'ai eu quelques problèmes avec les ajouts de VB Guest.

entrez la description de l'image ici

Je les ai corrigés avec cette solution .

Ken Prince
la source
//, je vais essayer ça, @KJPrince. Merci de l'avoir décomposé pour nous.
Nathan Basanese
//, je l'ai essayé, mais j'ai eu les erreurs sur le lien suivant lorsque j'ai copié mon répertoire VirtualBoxVMs sur ~ / VirtualBox \ VMs, et j'ai couru vagrant box list: 0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs
Nathan Basanese
18

C'est en fait assez simple

  1. Installez Virtual Box et vagrant sur la machine distante
  2. Enveloppez votre machine vagabonde

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

  3. copiez la boîte sur votre télécommande

  4. lancez la boîte sur votre machine distante en exécutant

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

  5. Courir vagrant up

Stefan Diabo
la source
1
Si le nom de votre machine est longue et vous êtes trop paresseux pour regarder GUI VirtualBox et taper son nom ou l' identifiant - vous pouvez lister tous les noms et numéros d' identification de votre VM avec cette borne: VBoxManage list vms. Après, vous pouvez simplement copier et faire ce qui est dit dans @Phil 2ème et 4ème étapes. :) Ouais.
Sid
@Sid pourquoi pas seulement $ vagrant box list
Ken Ratanachai S.
@KenRatanachaiS parce que votre commande liste des cases, par exemple: ( scotch/box (virtualbox, 3.0)). Ma commande - machines virtuelles avec identifiant, par exemple:"Win10 - SandBox" {bc251c06-501f-4c0f-bgfa-21f2815ba2cd}
Sid
2

Aucune des réponses ci-dessus n'a fonctionné pour moi. J'ai travaillé pendant 2 jours sur la manière de migrer une machine Vagrant + VirtualBox d'un ordinateur à un autre ... C'est possible!

Tout d'abord, vous devez comprendre que la machine virtuelle est séparée de votre dossier de synchronisation / partagé. Ainsi, lorsque vous emballez votre machine, vous l'emballez sans vos fichiers, mais avec les bases de données.

Qu'as tu besoin de faire:

1- Ouvrez le CMD de votre ordinateur 1 machine hôte (ligne de commande. Ouvrez-le en tant qu'administrateur avec le bouton droit -> "Exécuter en tant qu'administrateur") et accédez à vos fichiers installés vagrant. Sur mon cas: C: / VVV Vous verrez votre Vagrantfile ainsi que ces dossiers:

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

Le dossier / www / est l'endroit où j'ai mon dossier de synchronisation avec mes domaines de développement. Vous pouvez avoir votre dossier de synchronisation à un autre endroit, assurez-vous simplement de comprendre ce que vous faites. De plus, / config et / database sont des dossiers de synchronisation.

2- Exécutez cette commande: vagrant package --vagrantfile Vagrantfile

(Cette commande fait un package de votre machine virtuelle en utilisant votre configuration Vagrantfile.)

Voici ce que vous pouvez lire dans la documentation de Vagrant sur la commande:

Une idée fausse courante est que l'option --vagrantfile conditionnera un fichier Vagrant qui est utilisé lorsque vagrant init est utilisé avec cette boîte. Ce n'est pas le cas. Au lieu de cela, un fichier Vagrant est chargé et lu dans le cadre du processus de chargement de Vagrant lorsque la boîte est utilisée. Pour plus d'informations, lisez sur l'ordre de chargement de Vagrantfile.

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

Une fois terminé, vous aurez un fichier package.box.

3- Copiez tous ces fichiers (/ config, / database, Vagrantfile, package.box, etc.) et collez-les sur votre ordinateur 2 juste à l'endroit où vous souhaitez installer votre machine virtuelle (sur mon cas D: / VVV).

Vous avez maintenant une copie de tout ce dont vous avez besoin sur votre ordinateur hôte.

4- lancez ceci: vagrant box add package.box --name VVV

(Le --name est utilisé pour nommer votre machine virtuelle. Dans mon cas, il s'appelle VVV) (Vous pouvez utiliser --force si vous avez déjà une machine virtuelle avec ce nom et que vous souhaitez l'écraser. (À utiliser avec précaution!))

Cela décompressera votre nouvelle machine virtuelle vagabonde.

5- Une fois terminé, exécutez: vagrant up

La machine va s'installer et vous devriez le voir sur le "Oracle virtual machine box manager". Si vous ne pouvez pas voir la machine virtuelle, essayez d'exécuter la boîte Oracle VM en tant qu'administrateur (clic droit -> Exécuter en tant qu'administrateur)

Vous pouvez maintenant que tout est ok, mais n'oubliez pas de voir si vos hôtes sont comme prévu:

c:/windows/system32/hosts

6- C'est peut-être une bonne idée de copier votre fichier hôte de votre ordinateur 1 vers votre ordinateur 2. Ou de copier les lignes dont vous avez besoin. Dans mon cas, voici les hôtes dont j'ai besoin:

192.168.50.4 test.dev
192.168.50.4 vvv.dev
...

Où le 192.168.50.4 est l'adresse IP de ma machine virtuelle et test.dev et vvv.dev développent des hôtes.

J'espère que cela peut vous aider :) Je serai heureux si vous donnez votre avis.

Quelques particularités de mon cas que vous pouvez trouver:

Quand j'ai couru vagabond, il y avait un problème avec mysql, ça ne fonctionnait pas. J'ai dû courir sur le serveur virtuel (clic droit sur la machine virtuelle oracle -> Afficher la console):apt-get install mysql-server

Après cela, j'ai recommencé à vagabonder et tout fonctionnait mais sans données sur les bases de données. J'ai donc fait un mysqldump all-tables à partir de l'ordinateur 1 et les ai téléchargés sur l'ordinateur 2.

AUTRES REMARQUES: Ma machine virtuelle n'est pas exactement sur l'ordinateur 1 et l'ordinateur 2. Par exemple, j'ai fait il y a quelque temps une configuration interne pour utiliser NFS (pour accélérer les dossiers de synchronisation du serveur) et j'avais besoin de réexécuter cette commande sur l'ordinateur 2 hôte:vagrant plugin install vagrant-winnfsd

gtamborero
la source
1

Comme indiqué dans

Comment puis-je changer où Vagrant recherche son disque dur virtuel?

l'état de la machine virtuelle est stocké dans un dossier VirtualBox prédéfini. La copie de la machine (dossier) correspondante en plus de votre projet vagrant sur votre autre hôte devrait préserver l'état de votre machine virtuelle.

Manuel
la source
0

À partir de 2019, il existe une sous-commande: vagrant box repackage

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

Vous pouvez trouver name provideret versionen exécutantvagrant box list

vagrant box list
macinbox (virtualbox, 10.14.5)

La sortie de vagrant box repackageest un fichier appelé package.boxqui est essentiellement un fichier tgz dont le contenu peut être répertorié comme ci-dessous:

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