Jak wyeksportować maszynę wirtualną Vagrant, aby ją przenieść

108

Mam uruchomione pudełko włóczęgów (skonfigurowane ze stosem LAMP). Muszę przenieść to na inny komputer. Jak mogę to wyeksportować? Wydaje mi się, że mogę dostać plik (lub pliki), które można skopiować na inny komputer, więc tam mogę uruchomić polecenie importu pudełka włóczęgi.

Eugene
źródło
1
Napisałem kilka skryptów do automatyzacji przenoszenia pudeł włóczęgów. Zobacz soniah / transfer_vagrant_boxes
Sonia Hamilton,
//, Czy ktoś wypróbował skrypty Sonii?
Nathan Basanese
@NathanBasanese AFAIU, te skrypty pomagają przenosić skrzynki podstawowe, a nie wynikające z nich działające maszyny wirtualne, ponieważ wykorzystują przepakowywanie pudełek włóczęgów (patrz jego dokumentacja)
Olivier Berger

Odpowiedzi:

120

Możesz to zrobić na dwa sposoby, nazwałem to brudnym i czystym sposobem :

1. Brudny sposób

Utwórz pudełko z aktualnego środowiska wirtualnego za pomocą vagrant packagepolecenia:

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

Następnie skopiuj pudełko na inny komputer, dodaj go za pomocą vagrant box addi uruchom vagrant upjak zwykle.

Pamiętaj, że pliki w twoim katalogu roboczym (tym z symbolem Vagrantfile) są udostępniane podczas uruchamiania maszyny wirtualnej, więc musisz również skopiować je na inny komputer.

2. Czysty sposób

Teoretycznie nie powinno być nigdy konieczne eksportowanie / importowanie z Vagrantem. Jeśli masz przewidywanie, aby użyć obsługi administracyjnej do konfiguracji środowiska wirtualnego (szef kuchni, marionetka, ansibl) i systemu kontroli wersji, takiego jak git, dla twojego katalogu roboczego, skopiowanie środowiska byłoby w tym momencie tak proste, jak uruchomienie:

git clone <your_repo>
vagrant up
Emyl
źródło
5
Próbując być takim czystym , przewidywalnym administratorem ... Nie musisz umieszczać instalacji ISO systemu operacyjnego w swoim repozytorium git, prawda? Czy na przykład to sugerujesz. za pomocą ansibla repozytorium będzie zawierało plik Vagrantfile i poradnik ansibla. Vagrantfile 1. pobierze skrzynkę bazową z vagrantcloud 2. uruchomi playbook ansible w celu zapewnienia / skonfigurowania skrzynki bazowej przy użyciu innych plików / repozytoriów / pamięci w chmurze. Dobrze? A może jest coś jeszcze w repozytorium git?
płyty grzewcze
8
Czy „czysty sposób” uwzględnia bazy danych (mySQL, Wordpress), które mogą znajdować się wewnątrz maszyny wirtualnej? Jak można to zsynchronizować z innym komputerem?
kevllar
1
@kevllar Przejrzysty sposób oznacza, że ​​poza repozytorium git nie ma żadnych informacji wymaganych do uruchomienia nowego środowiska programistycznego. Oznacza to, że instalacja i konfiguracja bazy danych zostanie zakończona podczas udostępniania nowej skrzynki włóczęgów (przez Chef / Puppet / what-have-you).
Hovis Biddle
2
Czy więc sposób zalecany przez Hashicorp również jest „brudny”? tzn. spakować pudełko i przesłać je na serwer atlasu? Nie jestem pewien, czy
``
1
Nie rozumiem, jak oficjalny sposób jest uważany za brudny. Każda dobra dusza mogłaby wyjaśnić, dlaczego?
thclpr
28

Mój dysk twardy w moim Macu wydawał dźwięki w trakcie projektu, więc zdecydowałem się zainstalować dysk SSD. Musiałem przenieść projekt z jednego dysku na inny. Kilka kwestii do rozważenia:

  • Jestem włóczęgą w / virtualbox na Macu
  • Używam git

Oto, co zadziałało dla mnie:

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`

Miałem kilka problemów z dodatkami VB Guest.

wprowadź opis obrazu tutaj

Naprawiłem je tym rozwiązaniem .

Ken Prince
źródło
//, spróbuję tego, @KJPrince. Dzięki za podzielenie go dla nas.
Nathan Basanese
// Próbowałem, ale otrzymałem błędy pod poniższym linkiem, kiedy skopiowałem mój katalog VirtualBoxVMs do ~ / VirtualBox \ VMs i uruchomiłem vagrant box list: 0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs/ ...
Nathan Basanese
18

To jest całkiem proste

  1. Zainstaluj wirtualne pudełko i włóczęgę na zdalnej maszynie
  2. Owiń swoją włóczęgę maszynę

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

  3. skopiuj pudełko na pilota

  4. init box na zdalnym komputerze, uruchamiając

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

  5. Biegać vagrant up

Stefan Diabo
źródło
1
Jeśli nazwa urządzenia jest długa i jesteś zbyt leniwy, aby spojrzeć na VirtualBox GUI i wpisz jego nazwę lub identyfikator - można wymienić wszystkie nazwy Twojego VM i id jest z tego polecenia terminala: VBoxManage list vms. Następnie możesz po prostu skopiować i zrobić to, co jest powiedziane w krokach 2 i 4 @Phil. :) Yey.
Sid,
@Sid Why not just $ vagrant box list
Ken Ratanachai S.
@KenRatanachaiS, ponieważ Twoje polecenie wyświetla pola, np .: ( scotch/box (virtualbox, 3.0)). Moje polecenie - maszyny wirtualne z identyfikatorem, np .:"Win10 - SandBox" {bc251c06-501f-4c0f-bgfa-21f2815ba2cd}
Sid
2

Żadna z powyższych odpowiedzi nie zadziałała dla mnie. Od 2 dni pracowałem nad sposobem migracji maszyny Vagrant + VirtualBox z komputera na inny ... To możliwe!

Najpierw musisz zrozumieć, że maszyna wirtualna jest oddzielona od folderu synchronizacji / współdzielonego. Więc kiedy pakujesz swoją maszynę, pakujesz ją bez plików, ale z bazami danych.

Co musisz zrobić:

1- Otwórz CMD komputera 1 hosta (wiersz poleceń. Otwórz go jako Administrator prawym przyciskiem -> „Uruchom jako administrator”) i przejdź do plików zainstalowanych przez włóczęgów. W moim przypadku: C: / VVV Zobaczysz swój plik Vagrant, a także te foldery:

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

Folder / www / to miejsce, w którym mam folder synchronizacji z moimi domenami programistycznymi. Możesz mieć folder synchronizacji w innym miejscu, po prostu upewnij się, że rozumiesz, co robisz. Również / config i / database to foldery synchronizacji.

2- Uruchom to polecenie: vagrant package --vagrantfile Vagrantfile

(To polecenie wykonuje pakiet maszyny wirtualnej przy użyciu konfiguracji Vagrantfile).

Oto, co możesz przeczytać w dokumentacji Vagrant na temat polecenia:

Powszechnym błędnym przekonaniem jest to, że opcja --vagrantfile spakuje plik Vagrantfile, który jest używany, gdy w tym oknie używany jest vagrant init. Nie o to chodzi. Zamiast tego, Vagrantfile jest ładowany i odczytywany jako część procesu ładowania Vagrant, gdy pudełko jest używane. Aby uzyskać więcej informacji, przeczytaj o kolejności ładowania plików Vagrantfile.

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

Po zakończeniu otrzymasz plik package.box.

3- Skopiuj wszystkie te pliki (/ config, / database, Vagrantfile, package.box itp.) I wklej je na swój komputer 2 tam, gdzie chcesz zainstalować maszynę wirtualną (w moim przypadku D: / VVV).

Teraz masz kopię wszystkiego, czego potrzebujesz na hoście komputera 2.

4- Uruchom to: vagrant box add package.box --name VVV

(--Name służy do nazwania twojej maszyny wirtualnej. W moim przypadku nazywa się VVV) (Możesz użyć --force, jeśli masz już maszynę wirtualną o tej nazwie i chcesz ją nadpisać. (Używaj ostrożnie!))

Spowoduje to rozpakowanie nowej maszyny wirtualnej włóczęgi.

5- Po zakończeniu uruchom: vagrant up

Maszyna zostanie zainstalowana i powinna być widoczna w „menedżerze skrzynek maszyny wirtualnej Oracle”. Jeśli nie widzisz maszyny wirtualnej, spróbuj uruchomić skrzynkę Oracle VM jako administrator (kliknij prawym przyciskiem myszy -> Uruchom jako administrator)

Teraz możesz mieć wszystko w porządku, ale pamiętaj, aby sprawdzić, czy Twoje hosty działają zgodnie z oczekiwaniami:

c:/windows/system32/hosts

6- Może dobrym pomysłem jest skopiowanie pliku hosta z komputera 1 do komputera 2. Lub skopiuj potrzebne linie. W moim przypadku są to hosty, których potrzebuję:

192.168.50.4 test.dev
192.168.50.4 vvv.dev
...

Gdzie 192.168.50.4 to adres IP mojej maszyny wirtualnej, a test.dev i vvv.dev to hosty.

Mam nadzieję, że to Ci pomoże :) Będę szczęśliwy, jeśli prześlesz nam swoją opinię.

Niektóre szczegóły mojej sprawy, które możesz znaleźć:

Kiedy podbiegłem vagrantem, wystąpił problem z mysql, nie działał. Musiałem uruchomić na serwerze wirtualnym (kliknij prawym przyciskiem myszy maszynę wirtualną Oracle -> Pokaż konsolę):apt-get install mysql-server

Potem znów pobiegłem włóczęgą i wszystko działało, ale bez danych w bazach danych. Zrobiłem więc mysqldump wszystkie tabele z komputera 1 i załadowałem je na komputer 2.

INNE UWAGI: Moja maszyna wirtualna nie znajduje się dokładnie na komputerze 1 i komputerze 2. Na przykład jakiś czas temu dokonałem wewnętrznej konfiguracji, aby używać NFS (aby przyspieszyć synchronizację folderów serwera) i musiałem ponownie uruchomić to polecenie na komputerze 2 gospodarz:vagrant plugin install vagrant-winnfsd

gtamborero
źródło
0

Od 2019 roku istnieje podkomenda: vagrant box repackage

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

Możesz znaleźć name provideri versionbiegającvagrant box list

vagrant box list
macinbox (virtualbox, 10.14.5)

Wyjście vagrant box repackageto plik o nazwie, package.boxktóry jest w zasadzie plikiem tgz, którego zawartość można wyświetlić w następujący sposób:

tar tzf package.box
./metadata.json
./box.ovf
./Vagrantfile
./box-disk001.vmdk
Tiago Lopo
źródło