Tại sao tôi nên sử dụng Vagrant thay vì chỉ VirtualBox?


230

Tôi đã sử dụng VirtualBox trong nhiều năm để tạo môi trường phát triển.

Rất nhiều đồng nghiệp của tôi đang nói về Vagrant và nhiều người có vẻ rất hào hứng với nó nhưng tôi dường như không thể nắm bắt được lợi ích của nó .. dường như tôi thích một loạt các lệnh mới để học để làm điều tương tự những điều tôi đã làm với Virtualbox.

Với VirtualBox, tôi cài đặt và định cấu hình một môi trường hoàn hảo, sau đó tôi có thể đóng gói nó dưới dạng OVA hoặc bất cứ thứ gì và chia sẻ nó với những người dùng văn phòng khác. Bạn có thể chụp ảnh nhanh trong VirtualBox nếu có sự cố.

Con rối và đầu bếp không thực sự là một phần của Vagrant, chúng là thứ của riêng chúng phải không?

Vì vậy, có, lợi ích cụ thể mà Vagrant cung cấp cho VirtualBox là gì?


11
Hai năm nay tôi đang sử dụng Vagrant mỗi ngày để phát triển - thật tuyệt! Nhóm của tôi sử dụng nó và nó đã giải quyết các vấn đề môi trường dev của chúng tôi.
John Hunt

1
có ý kiến ​​ở đây: Nếu bạn chưa bao giờ gặp khó khăn khi thiết lập máy chủ PXE, hãy biết VBoxManage, biết cách thiết lập nfs trong chưa đầy một phút, v.v. và cũng giống như trực tiếp quản lý chuỗi xây dựng .. gần như không có điểm nào. Giá trị tăng lên với mỗi phần của câu đố bạn đang thiếu. Việc sử dụng rộng rãi không phải từ tích hợp con rối mà bởi vì mọi người có thể xâm nhập vào lỗ hổng bảo mật ngay trên internet. không có vấn đề gì họ nói với bạn
Florian Heigl

2
3,5 năm và tôi hiện đang sử dụng docker mỗi ngày để phát triển. Điều đó tốt, nhưng một con thú khác để mơ hồ ... Tùy thuộc vào yêu cầu của bạn, tôi tin rằng vagrant vẫn là một nền tảng phát triển tốt hơn cho các nhóm - nó dễ dàng hơn để làm việc với.
John Hunt

5
4 năm trôi qua và tôi đã phát hiện ra docker rất tệ. Sống lâu.
John Hunt

3
ý kiến ​​của bạn đang làm cho điều này trở nên thú vị hơn nhiều
Florian Heigl

Câu trả lời:


151

Đây là một câu hỏi lớn, vì vậy tôi sẽ chia nó thành ba phần.

Âm đạo

Vagrant được sử dụng để thiết lập một hoặc nhiều máy ảo bằng cách:

  • Nhập hình ảnh được tạo sẵn (được gọi là "hộp")
  • Đặt cài đặt dành riêng cho VM (địa chỉ IP, tên máy chủ, chuyển tiếp cổng, bộ nhớ, v.v.)
  • Chạy phần mềm cung cấp như Puppet hoặc Chef

Lưu ý rằng nó không cài đặt phần mềm hoặc thiết lập máy trước khi tải VM và cài đặt cài đặt VirtualBox. Hãy nghĩ về nó như một công cụ viết kịch bản cho VirtualBox.

Dưới đây là một số lý do tôi đã thấy khi sử dụng Vagrant chứ không chỉ VirtualBox.

1. Thiết lập mạng Multi-VM dễ dàng

Hầu hết các nội dung người dùng quyền lực Vagrant mà tôi đã đọc là về việc thiết lập nhiều máy ảo cùng một lúc. Vagrant cung cấp cho bạn một tệp cấu hình duy nhất để thiết lập các tệp này, cho phép bạn khởi chạy tất cả chúng bằng một lệnh.

Giả sử bạn đã cấu hình ba máy ảo để kết nối mạng với nhau bằng IP tĩnh trên mạng con 192.168.1. *. Bạn thấy mình ở một vị trí đã sử dụng mạng con đó để phân phát địa chỉ IP và máy ảo của bạn hiện đang xung đột. Với Vagrant, bạn chỉ cần chỉnh sửa Vagrantfile và tải lại VM, trong khi với VirtualBox, bạn phải mở cài đặt cho từng VM, nếu không khởi động từng VM và thay đổi chúng bên trong.

2. Kiểm soát nguồn

Bằng cách đặt các cài đặt trong tệp văn bản, nó cho phép cấu hình được đặt dưới sự kiểm soát nguồn. Thực hiện một số thay đổi vào tuần trước và vô tình phá vỡ hình ảnh? Chỉ cần hoàn nguyên các thay đổi và tải lại VM. Bạn có thể thực hiện điều này với ảnh chụp nhanh VirtualBox, nhưng nó sẽ chiếm nhiều không gian hơn so với chỉ một Vagrantfile.

3. Nền tảng khác nhau

Có một số lượng lớn các hộp có sẵn tại các trang web như http://vagrantbox.es . Điều này cho phép bạn thử các hệ điều hành hoặc bản phân phối khác nhau, áp dụng cùng một quy định để thiết lập các môi trường tương tự. Điều này có thể giúp kiểm tra hoặc thêm hỗ trợ cho các nền tảng mới và sẽ tốn thời gian khi chỉ sử dụng VirtualBox.

Có rất nhiều đối số để sử dụng phần mềm cung cấp, cũng như sử dụng ảnh chụp nhanh. Để thảo luận thêm, tôi sẽ chỉ cho bạn bài viết xuất sắc của Stephen Nelson-Smith Cách xây dựng 100 máy chủ web trong một ngày .


8
Tuy nhiên, tôi không hiểu tại sao tôi nên sử dụng vagrant trong môi trường phát triển! Bởi vì, nó đắt tiền (nếu bạn muốn sử dụng VMWare!) Chúng tôi có thể chuẩn bị một máy ảo như các hộp cơ sở được sử dụng bởi vagrant sau đó sao chép bằng VMware để thiết lập một máy ảo khác. Trước hết, chúng ta có thể kiểm soát tất cả các cài đặt máy ảo bằng vmrunlệnh do VMware cung cấp thậm chí thay đổi địa chỉ IP hoặc chạy tập lệnh bên trong máy khách!
Oğuz elikdemir

3
@ OğuzÇelikdemir Đó là một điểm công bằng. Vagrant chỉ đưa ra một giao diện dễ dàng hơn cho VMWare liên quan đến việc đưa ra một máy mới. Đằng sau hậu trường, nó dùng vmrunđể điều khiển nó. Tôi đã luôn sử dụng VirtualBox và do đó không có bất kỳ kinh nghiệm nào với phụ trợ VMWare.
Adam Lukens

1
@AdamLukens, Cảm ơn các ý kiến ​​chi tiết. Những gì bạn đề cập nghe có vẻ thú vị .. nhưng tôi tự hỏi nếu bạn nhận thức được VboxManagelệnh? virtualbox.org/manual/ch08.html Khá nhiều thứ bạn đề cập có thể được tạo như một tập lệnh bằng cách chuyển tham số ip / tham số cụ thể đến vboxmanage controlvmhoặc một lệnh tương tự trong tập lệnh shell và sau đó kiểm soát phiên bản đó .. Vậy làm thế nào để vagrantcải thiện virtualbox?
alpha_989

@ alpha_989 Tôi đồng ý. Dường như không có điểm duy nhất để sử dụng Vagrant. Chỉ để thuận tiện.
Niklas Rosencrantz

27

Ngoài câu trả lời xuất sắc được đưa ra bởi Adam, Vagrant liên kết tất cả mọi thứ lại với nhau. Mặc dù Chef and Puppet (và Salt và shell script và bất kỳ nhà cung cấp nào khác mà bạn muốn sử dụng) là những thứ riêng biệt, Vagrant liên kết tất cả lại với nhau và làm cho nó hoạt động chỉ với một vagrant up.

Đó là một lệnh sẽ

  1. chỉ cần khởi động VM nếu đó là tất cả những gì cần thiết, nhưng nó cũng sẽ
  2. tạo hộp từ hộp cơ sở được chỉ định của bạn nếu điều đó cũng chưa được thực hiện, nhưng nếu bạn thậm chí không có hộp cơ sở trên máy của mình thì trước tiên
  3. lấy nó từ URL của nó và tải nó về máy của bạn.

Bạn không cần phải suy nghĩ về tất cả điều đó. Giả sử bạn đang chuyển sang một dự án khác, một dự án bắt đầu bởi đồng nghiệp. Bạn chỉ cần kiểm tra mã từ repo của mình và chạy vagrant up, không lo lắng về việc tải xuống ISO hoặc cài đặt bất cứ thứ gì, hoặc tự hỏi phiên bản phân phối nào bạn cần sử dụng cho máy khách cụ thể đó hoặc liệu bạn có bản sao VM đã có mọi thứ không bạn cần.

Bạn thậm chí không cần phải lo lắng về việc họ đã thiết lập mọi thứ bằng cách sử dụng Chef hay Puppet hay chỉ là các kịch bản shell. (Được rồi, vì vậy bạn có thể cần phải thực hiện bundle installhoặc đảm bảo rằng bạn đã cài đặt mọi thứ, nhưng vẫn không phải là vấn đề lớn.)

Bằng cách buộc tất cả mọi thứ lại với nhau và cung cấp một giao diện hợp nhất cho tất cả, nó có thể làm cho tất cả các trường hợp sử dụng đơn giản nhất trở nên dễ dàng hơn nhiều. Lúc đầu, bạn có thể cảm thấy như bạn đang học lại một cách mới để làm những gì bạn đã làm, nhưng một khi bạn đã hiểu sâu hơn về việc sử dụng Vagrant, bạn sẽ khám phá ra rằng bạn có thể làm được nhiều hơn với nỗ lực ít hơn nhiều. Nó sẽ có giá trị đầu tư thời gian ban đầu.


8
Nhưng việc gửi cho nhà phát triển một hình ảnh VM cài sẵn là một địa ngục dễ dàng và nhanh hơn nhiều so với việc họ cài đặt vagrant, tìm hiểu cách sử dụng và xử lý bất kỳ vấn đề nào trong số vô số vấn đề phát sinh, đặc biệt là khi hỗ trợ cửa sổ hộp. Tôi thực sự cũng không hiểu. Có vẻ như không có gì ngoài fanboy.
Hopeeekr

5
Cài đặt Vagrant là dễ dàng không thể tin được những ngày này. Bất cứ ai không thể cài đặt nó đều không thể tin tưởng để viết mã. Có một Vagrantfile trong mã nguồn của bạn mà nhà phát triển kiểm tra thực sự dễ dàng hơn nhiều so với việc gửi VM. Vagrantfile định nghĩa thiết lập, bao gồm URL để tải xuống VM cơ sở (sau đó nó sẽ cấu hình). Nếu ban đầu bạn không cần thực hiện thay đổi cấu hình, thì bạn đã hoàn tất. Nhưng khi bạn làm việc trong dự án của mình, bạn có thể sẽ cần phải thay đổi. Làm điều đó trong Vagrantfile của bạn.
iconoclast

5
Vì bạn đang giữ Vagrantfile với mã của mình, tất cả các nhà phát triển tham gia dự án sẽ tự động nhận được các thay đổi bạn thực hiện cho VM của mình, vì bạn đang thực hiện chúng trong Vagrantfile. Cấu hình Vagrantfile của bạn không cần phải khó khăn. Bạn có thể sử dụng việc cung cấp vỏ nếu bạn thấy Đầu bếp và Con rối bị quá mức (mà chúng thường là). Nếu bạn có thể nhập các lệnh shell trong VM, thì đó là một trở ngại nhỏ để thiết lập các lệnh cung cấp shell trong Vagrantfile. Nó sẽ mất một nỗ lực nhỏ phía trước và giúp bạn tiết kiệm rất nhiều đau đầu trong thời gian dài.
iconoclast

4
và khi nào bạn cần thay đổi một cái gì đó trên tất cả 50 máy tính?
iconoclast

4
Các cuộc thảo luận ở đây thực sự là về tối ưu hóa sớm. Không sử dụng vagrant nếu bạn không cần nó. Sử dụng vagrant khi bạn thấy việc tạo VM đang trở nên tẻ nhạt.
cammil

9

Khả năng tích hợp đầu bếp hoặc con rối với việc cung cấp VM là chìa khóa. Hầu hết người dùng Vagrant sẽ nói với bạn rằng họ chạy 'cung cấp mơ hồ' và đôi khi 'tải lại mơ hồ' thường xuyên hơn nhiều so với 'mơ hồ lên' hoặc 'phá hủy mơ hồ'. Các tác vụ này cho thấy công việc thực sự không phải là quay vòng lên / xuống VM mà là 'quản lý' chúng sau khi thực tế.

Để đặt ra một câu hỏi tốt hơn (dù sao cũng được đặt ra bởi những người dùng Chef thành thạo) có thể là lý do tại sao sử dụng Vagrant và không dùng dao với plugin phù hợp (sẽ nhanh chóng chuyển sang plugin virtualbox)? Chẳng hạn, việc chuyển các giá trị đối số được lưu trữ trong túi dữ liệu sang plugin dao là (cách) thông minh, linh hoạt và dễ quản lý hơn so với việc tung hứng một Vagrantfile khổng lồ. Tôi thường xác định các tài nguyên 'động' của mình như # CPU, dung lượng bộ nhớ, hệ điều hành nào sẽ triển khai, tên máy chủ, IP, tuyến đường, v.v., trong cơ sở dữ liệu đầu bếp để tôi không cần phải thay đổi công thức của mình; - ). Chỉnh sửa một cơ sở dữ liệu thông qua giao diện web Chef là một nhiệm vụ nhập dữ liệu thực sự dễ dàng mà tôi có thể cung cấp cho hầu hết các nhà khai thác cơ sở. Với Vagrantfile, mã modiyfing mãi mãi của bạn và tin hay không - phá vỡ mã - điều này đảm bảo khá nhiều bạn sẽ KHÔNG trao các thay đổi đơn giản cho nhân viên Vận hành,

Bên cạnh con dao thực tế chưa có plugin cho hộp ảo (mặc dù tôi hình dung một tương lai không xa), đã có các plugin cho hầu hết các sản phẩm ảo hóa 'doanh nghiệp', bao gồm vmware, xenserver và chỉ về mọi 'đám mây' chính nhà cung cấp, là tốt. Điều này có nghĩa là con dao vượt trội hơn nhiều so với những gì Vagrant cung cấp nếu / khi bạn sẵn sàng vượt ra khỏi hộp ảo. Hiện tại, cộng đồng Chef có vẻ rất vui khi cho phép người dùng hộp ảo khập khiễng cùng với Vagrant bằng cách không tích hợp apis hộp ảo cho một plugin dao. Có một plugin dao-cho phép sử dụng các túi dữ liệu để truyền các đối số. Tuy nhiên, nó vẫn yêu cầu phần mềm vagrant và nó là Vagrantfile nguyên khối để hoạt động.

Vì vậy, tôi sẽ đi ra ngoài và nói rằng Vagrant chắc chắn KHÔNG "tốt hơn" so với Đầu bếp bằng dao; nhưng thận trọng (bây giờ) nếu bạn nhấn mạnh vào hộp ảo và có lẽ 'dễ dàng' hơn so với việc quản lý đầu bếp bằng túi dữ liệu, miễn là bạn có một môi trường khá đơn giản để quản lý.


8

Dưới đây là hai trường hợp sử dụng dành cho nhà phát triển khác mà đơn giản hóa (trên VirtualBox "đơn giản"). Tôi không thấy những trường hợp sử dụng này được gọi cụ thể trong các câu trả lời trước.

  1. Vagrant giúp với mục đích giữ cho các nền tảng phát triển và sản xuất càng gần nhau càng tốt. Trong một thế giới lý tưởng, bạn sẽ cung cấp môi trường sản xuất với các tập lệnh THE SAME được sử dụng để cung cấp VM Vagrant, giảm thiểu những bất ngờ khi triển khai.

  2. Kiểm tra tích hợp và tích hợp liên tục: Vagrant dễ dàng kiểm soát từ các thử nghiệm và do đó, toàn bộ ngăn xếp nhiều máy có thể được kiểm soát dễ dàng từ các công cụ như Jenkins khi thực hiện chạy thử.

Có, VirtualBox "đơn giản" cũng có thể được sử dụng ở đây - nhưng các quy ước được sử dụng bởi vagrant giúp đơn giản hơn để thiết lập các kịch bản này.


1
Tôi thực sự chỉ sao chép vmx và vmdk từ Windows sang Linux. Có lẽ nó khác trong thế giới hộp ảo, nhưng tôi nghi ngờ điều đó! Có gì dễ hơn? Sao chép một tập tin hoặc gây rối với vagrantfiles và vô số vấn đề có thể sai?
Hopeeekr

6
Để đặt một điểm tốt hơn cho nó, Vagrant có thể được coi là một ngôn ngữ định nghĩa ảo có thể mô tả các đặc điểm của một máy ảo - phụ thuộc vào việc nó được lưu trữ dưới VirtualBox, VMware, Parallels hay what-have-you. Xem cách Vagrant không "cạnh tranh" với VirtualBox, nhưng hoạt động với nó hoặc vượt xa nó.
MarkHu 14/2/2015

Thông thường, người ta sẽ sử dụng Vagrantfile để mô tả cách thiết lập một máy ảo cho dự án - Vagrantfile sẽ cam kết kiểm soát nguồn (git, v.v.) với dự án, để chia sẻ trên GitHub, v.v. hơn toàn bộ VMDK.
Ben XO

0

Vagrant trừu tượng hóa các máy ảo để nó cho phép bạn dễ dàng chuyển đổi các cài đặt máy ảo. Bạn có thể chuyển từ Hộp ảo sang AWS hoặc Digital Ocean. Nó giống như sử dụng SQL thay vì ngôn ngữ truy vấn dành riêng cho cơ sở dữ liệu.

Vagrant cho phép các nhà phát triển thiết lập môi trường của họ một cách nhanh chóng chỉ bằng một lệnh và nó hoàn toàn giống với mọi người khác. Điều này rất quan trọng trong các công ty lớn nơi các nhà phát triển đến và đi thường xuyên. Nó có thể giảm thời gian để thiết lập từ 3 ngày xuống còn 1 giờ.

+ Những gì Adam nói.

(Tôi vẫn chưa tìm thấy cách sử dụng cho Chef hoặc Puppet ...)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.