วิธีการส่งออกเครื่องเสมือน Vagrant เพื่อถ่ายโอน


108

ฉันมีกล่องพเนจรพร้อมใช้งาน (กำหนดค่าด้วย LAMP stack) ฉันต้องการโอนไปยังพีซีเครื่องอื่น ฉันจะส่งออกได้อย่างไร ฉันเดาว่าฉันจะได้รับไฟล์ (หรือไฟล์) ที่สามารถคัดลอกไปยังพีซีเครื่องอื่นได้ดังนั้นฉันจึงสามารถเรียกใช้คำสั่งเพื่อนำเข้ากล่องคนจรจัดได้


1
ฉันเขียนสคริปต์สำหรับการถ่ายโอนกล่องคนจรจัดโดยอัตโนมัติ ดูsoniah / transfer_vagrant_boxes
Sonia Hamilton

// มีใครลองใช้สคริปต์ของ Sonia บ้าง?
Nathan Basanese

@NathanBasanese AFAIU สคริปต์เหล่านี้ช่วยในการถ่ายโอนกล่องฐานไม่ใช่ผลลัพธ์ที่รัน VMs เนื่องจากใช้ประโยชน์จากการบรรจุหีบห่อใหม่ (ดูเอกสาร)
Olivier Berger

คำตอบ:


120

คุณมีสองวิธีในการทำเช่นนี้ฉันจะเรียกว่าวิธีสกปรกและวิธีที่สะอาด :

1. วิธีสกปรก

สร้างกล่องจากสภาพแวดล้อมเสมือนปัจจุบันของคุณโดยใช้vagrant packageคำสั่ง:

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

จากนั้นคัดลอกกล่องไปยังพีซีเครื่องอื่นเพิ่มโดยใช้vagrant box addและเรียกใช้โดยใช้vagrant upตามปกติ

โปรดทราบว่าไฟล์ในไดเร็กทอรีการทำงานของคุณ (ไฟล์ที่มีVagrantfile) จะถูกแชร์เมื่อเครื่องเสมือนบูทดังนั้นคุณต้องคัดลอกไปยังพีซีเครื่องอื่นด้วย

2. วิธีที่สะอาด

ในทางทฤษฎีไม่จำเป็นต้องทำการส่งออก / นำเข้ากับ Vagrant หากคุณมองการณ์ไกลในการใช้การจัดเตรียมสำหรับการกำหนดค่าสภาพแวดล้อมเสมือน (เชฟหุ่นแอนซิเบิล) และระบบควบคุมเวอร์ชันเช่นคอมไพล์สำหรับไดเร็กทอรีการทำงานของคุณการคัดลอกสภาพแวดล้อมจะทำได้ง่ายในจุดนี้เมื่อรัน:

git clone <your_repo>
vagrant up

5
พยายามที่จะเป็นผู้ดูแลระบบที่สะอาดและมองการณ์ไกล ... คุณไม่จำเป็นต้องใส่ iso การติดตั้งระบบปฏิบัติการใน git repo ของคุณหรือไม่? คุณแนะนำเช่นนั้นหรือไม่ เมื่อใช้ ansible repo ของคุณจะมี Vagrantfile และ playbook ที่ตอบได้ Vagrantfile จะ 1. ดาวน์โหลด basebox จากvagrantcloud 2. เรียกใช้ playbook แบบ ansible เพื่อจัดเตรียม / กำหนดค่า basebox โดยใช้ไฟล์ / repos / cloud-storage อื่น ๆ ขวา? หรือมีอย่างอื่นใน git repo?
เตาอบ

8
"วิธีที่สะอาด" บัญชีสำหรับฐานข้อมูล (mySQL, Wordpress) ที่อาจอยู่ใน vm หรือไม่ จะซิงค์กับพีซีเครื่องอื่นได้อย่างไร
kevllar

1
@kevllar วิธีที่สะอาดหมายความว่าไม่มีข้อมูลภายนอกที่เก็บ git ที่จำเป็นในการเริ่มต้นสภาพแวดล้อม dev ใหม่ ซึ่งหมายความว่าการติดตั้งและกำหนดค่าฐานข้อมูลจะเสร็จสมบูรณ์ในระหว่างการจัดเตรียมกล่องคนจรจัดใหม่ (ผ่าน Chef / Puppet / what-have-you)
Hovis Biddle

2
วิธีที่ Hashicorp แนะนำก็คือ 'สกปรก' เช่นกัน? เช่นแพคเกจกล่องและอัปโหลดไปยังเซิร์ฟเวอร์ atlas? ฉันไม่แน่ใจว่าวิธีที่ 'สะอาด' จะจำลองสภาพแวดล้อมได้จริงหรือไม่ซึ่งฉันคิดว่าเป็นจุดประสงค์ทั้งหมดของคนจรจัด ....
sijpkes

1
ฉันไม่เข้าใจว่าวิธีทางการถือว่าสกปรกได้อย่างไร วิญญาณที่ดีสามารถอธิบายได้ว่าทำไม?
thclpr

28

ฮาร์ดไดรฟ์ใน Mac ของฉันส่งเสียงบี๊บระหว่างโปรเจ็กต์ฉันจึงตัดสินใจติดตั้ง SSD ฉันต้องการย้ายโครงการของฉันจากดิสก์หนึ่งไปยังอีกดิสก์หนึ่ง สิ่งที่ควรพิจารณา:

  • ฉันเป็นคนเร่ร่อนที่มี virtualbox บนเครื่อง Mac
  • ฉันใช้คอมไพล์

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน:

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`

ฉันมีปัญหาเล็กน้อยเกี่ยวกับการเพิ่ม VB Guest

ใส่คำอธิบายภาพที่นี่

ฉันแก้ไขด้วยวิธีนี้


// ฉันจะลองสิ่งนี้ @KJPrince ขอบคุณที่ทำลายมันลงสำหรับเรา
Nathan Basanese

// ฉันลองแล้ว แต่ฉันได้รับข้อผิดพลาดที่ลิงค์ต่อไปนี้เมื่อฉันคัดลอกไดเรกทอรี VirtualBoxVMs ของฉันไปที่ ~ / VirtualBox \ VMs และรันvagrant box list: 0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs/…
นาธาน Basanese

18

นี่เป็นเรื่องง่ายจริงๆ

  1. ติดตั้งกล่องเสมือนและคนจรจัดบนเครื่องระยะไกล
  2. ห่อเครื่องจักรเร่ร่อนของคุณ

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

  3. คัดลอกกล่องไปยังรีโมทของคุณ

  4. เริ่มต้นกล่องบนเครื่องระยะไกลของคุณโดยเรียกใช้

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

  5. วิ่ง vagrant up


1
หากชื่อของเครื่องเป็นเวลานานและคุณขี้เกียจเกินไปที่จะมองไปที่ Virtualbox GUI และพิมพ์ชื่อหรือรหัส - คุณสามารถแสดงรายการชื่อทั้งหมด VM VBoxManage list vmsของคุณและรหัสที่มีคำสั่งสถานีนี้: หลังจากที่คุณสามารถคัดลอกและทำตามที่บอกไว้ใน @Phil ขั้นตอนที่ 2 และ 4 :) ใช่.
Sid

@Sid ทำไมไม่แค่ $ vagrant box list
Ken Ratanachai S.

@KenRatanachaiS เพราะคำสั่งของคุณแสดงรายการกล่องเช่น: ( scotch/box (virtualbox, 3.0)) คำสั่งของฉัน - เครื่องเสมือนที่มีตัวระบุเช่น"Win10 - SandBox" {bc251c06-501f-4c0f-bgfa-21f2815ba2cd}
Sid

6

วิธีที่ง่ายที่สุดคือบรรจุกล่อง Vagrant จากนั้นคัดลอก (เช่นscpหรือrsync) ไปยังพีซีเครื่องอื่นเพิ่มและvagrant up;-)

สำหรับขั้นตอนโดยละเอียดโปรดดูที่=> นี่มีวิธีใดบ้างในการโคลนกล่องพเนจรที่ติดตั้งไว้แล้ว


2

คำตอบข้างต้นไม่ได้ผลสำหรับฉัน ฉันใช้เวลา 2 วันในการหาวิธีโยกย้าย Vagrant + VirtualBox Machine จากคอมพิวเตอร์ไปยังเครื่องอื่น ... เป็นไปได้!

ขั้นแรกคุณต้องเข้าใจว่าเครื่องเสมือนถูกแยกออกจากโฟลเดอร์ซิงค์ / แชร์ของคุณ ดังนั้นเมื่อคุณบรรจุเครื่องคุณจะบรรจุโดยไม่มีไฟล์ แต่มีฐานข้อมูล

สิ่งที่คุณต้องทำ:

1- เปิด CMD ของเครื่องโฮสต์คอมพิวเตอร์ของคุณ 1 เครื่อง (บรรทัดคำสั่งเปิดในฐานะผู้ดูแลระบบด้วยปุ่มขวา -> "เรียกใช้ในฐานะผู้ดูแลระบบ") และไปที่ไฟล์ที่ติดตั้งคนจรจัดของคุณ ในกรณีของฉัน: C: / VVV คุณจะเห็น Vagrantfile ของคุณและโฟลเดอร์เหล่านี้ด้วย:

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

โฟลเดอร์ / www / คือที่ที่ฉันมี Sync Folder กับโดเมนการพัฒนาของฉัน คุณอาจมีโฟลเดอร์ซิงค์ของคุณอยู่ที่อื่น แต่อย่าลืมเข้าใจว่าคุณกำลังทำอะไรอยู่ นอกจากนี้ / config และ / database เป็นโฟลเดอร์ที่ซิงค์

2- รันคำสั่งนี้: vagrant package --vagrantfile Vagrantfile

(คำสั่งนี้ทำแพ็คเกจของเครื่องเสมือนของคุณโดยใช้การกำหนดค่า Vagrantfile ของคุณ)

นี่คือสิ่งที่คุณสามารถอ่านได้ในเอกสาร Vagrant เกี่ยวกับคำสั่ง:

ความเข้าใจผิดทั่วไปคือตัวเลือก --vagrantfile จะเป็นแพ็กเกจ Vagrantfile ที่ใช้เมื่อใช้ vagrant init กับช่องนี้ กรณีนี้ไม่ได้. Vagrantfile จะถูกโหลดและอ่านเป็นส่วนหนึ่งของกระบวนการโหลด Vagrant เมื่อใช้กล่องแทน สำหรับข้อมูลเพิ่มเติมโปรดอ่านเกี่ยวกับลำดับการโหลด Vagrantfile

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

เมื่อเสร็จสิ้นคุณจะมีไฟล์ package.box

3- คัดลอกไฟล์เหล่านี้ทั้งหมด (/ config, / database, Vagrantfile, package.box ฯลฯ ) และวางลงในคอมพิวเตอร์ 2 ของคุณในตำแหน่งที่คุณต้องการติดตั้งเครื่องเสมือนของคุณ (ในกรณีของฉัน D: / VVV)

ตอนนี้คุณมีสำเนาของทุกสิ่งที่คุณต้องการบนโฮสต์คอมพิวเตอร์ 2 ของคุณแล้ว

4- เรียกใช้สิ่งนี้: vagrant box add package.box --name VVV

(ชื่อ - ใช้เพื่อตั้งชื่อเครื่องเสมือนของคุณในกรณีของฉันมันชื่อ VVV) (คุณสามารถใช้ - บังคับถ้าคุณมีเครื่องเสมือนที่มีชื่อนี้อยู่แล้วและต้องการเขียนทับ (ใช้อย่างระมัดระวัง!))

สิ่งนี้จะเปิดกล่องเครื่องเสมือนคนเร่ร่อนใหม่ของคุณ

5- เมื่อเสร็จสิ้นให้เรียกใช้: vagrant up

เครื่องจะติดตั้งและคุณจะเห็นใน "Oracle virtual machine box manager" หากคุณไม่เห็นเครื่องเสมือนให้ลองเรียกใช้กล่อง Oracle VM ในฐานะผู้ดูแลระบบ (คลิกขวา -> Run as administrator)

ตอนนี้คุณอาจมีทุกอย่างเรียบร้อย แต่อย่าลืมดูว่าโฮสต์ของคุณเป็นไปตามที่คุณคาดไว้หรือไม่:

c:/windows/system32/hosts

6- อาจเป็นความคิดที่ดีที่จะคัดลอกไฟล์โฮสต์จากคอมพิวเตอร์ 1 ไปยังคอมพิวเตอร์ 2 หรือคัดลอกบรรทัดที่คุณต้องการ ในกรณีของฉันนี่คือโฮสต์ที่ฉันต้องการ:

192.168.50.4 test.dev
192.168.50.4 vvv.dev
...

โดยที่ 192.168.50.4 คือ IP ของเครื่องเสมือนของฉันและ test.dev และ vvv.dev กำลังพัฒนาโฮสต์

ฉันหวังว่านี่จะช่วยคุณได้ :) เรายินดีหากคุณแสดงความคิดเห็นเกี่ยวกับการเดินทางของคุณ

ลักษณะเฉพาะบางประการในกรณีของฉันที่คุณอาจพบ:

เมื่อฉันวิ่งพเนจรขึ้นมามีปัญหากับ mysql มันใช้งานไม่ได้ ฉันต้องรันบนเซิร์ฟเวอร์เสมือน (คลิกขวาที่ oracle virtual machine -> Show console):apt-get install mysql-server

หลังจากนั้นฉันก็วิ่งเร่ร่อนอีกครั้งและทุกอย่างก็ใช้งานได้ แต่ไม่มีข้อมูลในฐานข้อมูล ดังนั้นฉันจึงทำการ mysqldump all-tables จาก Computer 1 และอัปโหลดไปยัง Computer 2

หมายเหตุอื่น ๆ : เครื่องเสมือนของฉันไม่ตรงกับคอมพิวเตอร์ 1 และคอมพิวเตอร์ 2 ตัวอย่างเช่นฉันได้ทำการกำหนดค่าภายในเมื่อไม่นานมานี้เพื่อใช้ NFS (เพื่อเร่งความเร็วโฟลเดอร์ซิงค์เซิร์ฟเวอร์) และฉันจำเป็นต้องเรียกใช้คำสั่งนี้อีกครั้งบนคอมพิวเตอร์ 2 เจ้าภาพ:vagrant plugin install vagrant-winnfsd


1

ตามที่ระบุไว้ใน

ฉันจะเปลี่ยนตำแหน่งที่ Vagrant มองหาฮาร์ดไดรฟ์เสมือนได้อย่างไร

สถานะเครื่องเสมือนจะถูกเก็บไว้ในโฟลเดอร์ VirtualBox ที่กำหนดไว้ล่วงหน้า การคัดลอกเครื่องที่เกี่ยวข้อง (โฟลเดอร์) นอกเหนือจากโครงการคนจรจัดไปยังโฮสต์อื่นของคุณควรรักษาสถานะเครื่องเสมือนของคุณ


0

ในปี 2019 มีคำสั่งย่อย: vagrant box repackage

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

คุณสามารถค้นหาname providerและversionเรียกใช้vagrant box list

vagrant box list
macinbox (virtualbox, 10.14.5)

ouput ของvagrant box repackageคือไฟล์ที่เรียกว่าpackage.boxซึ่งโดยพื้นฐานแล้วเป็นไฟล์ tgz ซึ่งสามารถแสดงเนื้อหาได้ดังนี้:

tar tzf package.box
./metadata.json
./box.ovf
./Vagrantfile
./box-disk001.vmdk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.