Como exportar uma máquina virtual Vagrant para transferi-la

107

Eu tenho uma caixa vagrant instalada e funcionando (configurada com uma pilha LAMP). Preciso transferi-lo para outro PC. Como posso exportar? Acho que posso obter um arquivo (ou arquivos) que podem ser copiados para outro PC, para que possa executar algum comando para importar a caixa do vagrant.

Eugene
fonte
1
Eu escrevi alguns scripts para automatizar a transferência de caixas vagrant. Veja soniah / transfer_vagrant_boxes
Sonia Hamilton
//, Alguém já experimentou os scripts da Sonia?
Nathan Basanese 01 de
@NathanBasanese AFAIU, esses scripts ajudam a transferir caixas de base, não as VMs em execução resultantes, pois fazem uso de repackage de vagrant box (veja seus documentos)
Olivier Berger

Respostas:

119

Você tem duas maneiras de fazer isso, vou chamá-lo de maneira suja e de maneira limpa :

1. O jeito sujo

Crie uma caixa a partir do seu ambiente virtual atual, usando o vagrant packagecomando:

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

Em seguida, copie a caixa para o outro PC, adicione-a usando vagrant box adde execute-a vagrant upnormalmente.

Lembre-se de que os arquivos em seu diretório de trabalho (aquele com o Vagrantfile) são compartilhados quando a máquina virtual é inicializada, portanto, você também precisa copiá-lo para o outro PC.

2. A maneira limpa

Teoricamente, nunca deveria ser necessário exportar / importar com o Vagrant. Se você tiver a visão de usar provisionamento para configurar o ambiente virtual (chef, puppet, ansible) e um sistema de controle de versão como o git para seu diretório de trabalho, copiar um ambiente seria neste ponto simples como executar:

git clone <your_repo>
vagrant up
Emyl
fonte
5
Tentando ser um administrador limpo e previdente ... Você não precisa colocar uma iso de instalação do sistema operacional em seu repositório git, certo? Você está sugerindo isso, por exemplo. usando o ansible, seu repo conteria o Vagrantfile e um playbook do ansible. O Vagrantfile 1. baixaria um basebox do vagrantcloud 2. executaria o ansible playbook para provisionar / configurar o basebox usando outros arquivos / repos / armazenamento em nuvem. Certo? Ou há algo mais no repositório git?
horas
8
A "maneira limpa" leva em conta bancos de dados (mySQL, Wordpress) que podem estar dentro da vm? Como isso pode ser sincronizado com o outro PC?
kevllar
1
@kevllar A maneira limpa significa que não há informações fora do repositório git necessárias para iniciar um novo ambiente de desenvolvimento. Isso significa que a instalação e configuração do banco de dados serão concluídas durante o provisionamento da nova caixa vagrant (via Chef / Puppet / what-have-you).
Hovis Biddle
2
Então, o caminho recomendado pela Hashicorp também é 'sujo'? ou seja, empacotar a caixa e enviá-la para o servidor atlas? Não tenho certeza se a maneira 'limpa' vai realmente replicar o ambiente exato, que eu pensei que era o propósito do vagabundo ....
sijpkes
1
Não entendo como a forma oficial é considerada suja. Qualquer boa alma poderia explicar por quê?
thclpr
28

Meu disco rígido no Mac estava emitindo bipes no meio de um projeto, então decidi instalar um SSD. Eu precisava mover meu projeto de um disco para outro. Algumas coisas a considerar:

  • Sou vagabundo c / virtualbox em um Mac
  • Estou usando git

Isto é o que funcionou para mim:

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`

Tive alguns problemas com as adições do VB Guest.

insira a descrição da imagem aqui

Eu os consertei com esta solução .

Ken Prince
fonte
//, vou tentar isso, @KJPrince. Obrigado por dividir para nós.
Nathan Basanese 01 de
//, eu tentei, mas encontrei os erros no link a seguir quando copiei meu diretório VirtualBoxVMs para ~ / VirtualBox \ VMs e executei vagrant box list: 0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs/…
Nathan Basanês
18

Isso é bem simples

  1. Instale a caixa virtual e o vagrant na máquina remota
  2. Embrulhe sua máquina vagabunda

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

  3. copie a caixa para o seu controle remoto

  4. init the box em sua máquina remota executando

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

  5. Corre vagrant up

Stefan Diabo
fonte
1
Se o nome da sua máquina é longo e você está com preguiça de olhar para Virtualbox GUI e digitá-lo do nome ou id - você pode listar todos os nomes do seu VM e ID de com este comando terminal: VBoxManage list vms. Depois você pode apenas copiar e fazer o que é dito nas etapas 2 e 4 do @Phil. :) Sim.
Sid
@Sid porque não apenas $ vagrant box list
Ken Ratanachai S.
@KenRatanachaiS porque seu comando lista caixas, por exemplo: ( scotch/box (virtualbox, 3.0)). Meu comando - máquinas virtuais com identificador, por exemplo:"Win10 - SandBox" {bc251c06-501f-4c0f-bgfa-21f2815ba2cd}
Sid
2

Nenhuma das respostas acima funcionou para mim. Estou há 2 dias tentando migrar uma máquina Vagrant + VirtualBox de um computador para outro ... É possível!

Primeiro, você precisa entender que a máquina virtual é separada de sua pasta de sincronização / compartilhada. Portanto, quando você embala sua máquina, está embalando-a sem seus arquivos, mas com os bancos de dados.

O que você precisa fazer:

1- Abra o CMD da máquina host do seu computador 1 (Linha de comando. Abra-o como Adminitrator com o botão direito -> "Executar como administrador") e vá para os arquivos instalados do vagrant. No meu caso: C: / VVV Você verá seu Vagrantfile e também estas pastas:

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

A pasta / www / é onde tenho minha pasta de sincronização com meus domínios de desenvolvimento. Você pode ter sua pasta de sincronização em outro lugar, apenas certifique-se de entender o que está fazendo. Além disso, / config e / database são pastas de sincronização.

2- execute este comando: vagrant package --vagrantfile Vagrantfile

(Este comando faz um pacote de sua máquina virtual usando a configuração do Vagrantfile.)

Aqui está o que você pode ler na documentação do Vagrant sobre o comando:

Um equívoco comum é que a opção --vagrantfile irá empacotar um Vagrantfile que é usado quando o vagrant init é usado com esta caixa. Este não é o caso. Em vez disso, um Vagrantfile é carregado e lido como parte do processo de carregamento do Vagrant quando a caixa é usada. Para obter mais informações, leia sobre a ordem de carregamento do Vagrantfile.

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

Quando terminar, você terá um arquivo package.box.

3- Copie todos esses arquivos (/ config, / database, Vagrantfile, package.box, etc.) e cole-os no seu Computador 2 exatamente onde deseja instalar a sua máquina virtual (no meu caso D: / VVV).

Agora você tem uma cópia de tudo de que precisa no host do seu computador 2.

4- execute isto: vagrant box add package.box --name VVV

(O --name é usado para nomear sua máquina virtual. No meu caso é chamado de VVV) (Você pode usar --force se já tiver uma máquina virtual com este nome e quiser sobrescrevê-la. (Use com cuidado!))

Isso irá descompactar sua nova máquina virtual vagrant.

5- Quando terminar, execute: vagrant up

A máquina será instalada e você deverá vê-la no "gerenciador de caixa de máquina virtual Oracle". Se você não puder ver a máquina virtual, tente executar a caixa Oracle VM como administrador (clique com o botão direito -> Executar como administrador)

Agora você pode ter tudo certo, mas lembre-se de ver se seus anfitriões são como você esperava:

c:/windows/system32/hosts

6- Talvez seja uma boa ideia copiar o arquivo host do seu Computador 1 para o seu Computador 2. Ou copie as linhas que você precisa. No meu caso, estes são os hosts de que preciso:

192.168.50.4 test.dev
192.168.50.4 vvv.dev
...

Onde 192.168.50.4 é o IP da minha máquina virtual e test.dev e vvv.dev são hosts de desenvolvimento.

Espero que isso possa ajudá-lo :) Ficarei feliz se você enviar um feedback sobre sua escolha.

Algumas particularidades do meu caso que você pode encontrar:

Quando executei o vagrant, houve um problema com o mysql, não estava funcionando. Tive que rodar no servidor virtual (clique com o botão direito na máquina virtual oracle -> Mostrar console):apt-get install mysql-server

Depois disso, executei novamente o vagrant up e estava tudo funcionando, mas sem dados nos bancos de dados. Então eu fiz um mysqldump de todas as tabelas do Computador 1 e carreguei-as no Computador 2.

OUTRAS NOTAS: Minha máquina virtual não está exatamente no Computador 1 e no Computador 2. Por exemplo, eu fiz há algum tempo uma configuração interna para usar NFS (para acelerar as pastas de sincronização do servidor) e precisei executar novamente este comando no Computador 2 hospedeiro:vagrant plugin install vagrant-winnfsd

gtamborero
fonte
1

Como afirmado em

Como posso mudar onde o Vagrant procura seu disco rígido virtual?

o estado da máquina virtual é armazenado em uma pasta VirtualBox predefinida. Copiar a máquina correspondente (pasta) além do seu projeto vagrant para o seu outro host deve preservar o estado da sua máquina virtual.

Manuel
fonte
0

A partir de 2019, existe um subcomando: vagrant box repackage

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

Você pode encontrar name providere versionexecutandovagrant box list

vagrant box list
macinbox (virtualbox, 10.14.5)

A saída de vagrant box repackageé um arquivo chamado, package.boxque é basicamente um arquivo tgz cujo conteúdo pode ser listado como abaixo:

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