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


Tôi đã sử dụng VirtualBox trong nhiều năm để tạo ra một 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 dường như rất vui mừng về nó nhưng tôi dường như không thể hiểu được lợi ích của nó .. có vẻ như tôi là một loạt các lệnh mới để học để làm điều tương tự những gì tôi đã làm với Virtualbox.

Với VirtualBox, tôi cài đặt và cấu hình một môi trường hoàn hảo, sau đó tôi có thể đóng gói nó như là một OVA hoặc bất cứ điều gì và chia sẻ nó với người dùng văn phòng khác. Bạn có thể chụp nhanh trong VirtualBox nếu xảy ra 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à điều riêng của họ phải không?

Vì vậy, có, những lợi ích đặc biệt không Vagrant cung cấp trên VirtualBox ngày của riêng mình?


211
2018-04-17 14:39


gốc


Hai năm nay tôi sử dụng Vagrant mỗi ngày để phát triển - thật tuyệt vời! Nhóm của tôi sử dụng nó và nó giải quyết vấn đề môi trường dev của chúng tôi. - John Hunt
Nếu bạn chưa bao giờ gặp khó khăn trong việc thiết lập các máy chủ PXE, hãy biết VBoxManage bằng trái tim, biết cách thiết lập nfs trong vòng chưa đầy một phút vv và cũng giống như quản lý trực tiếp chuỗi xây dựng .. gần như không có điểm nào cả. Giá trị tăng lên với mỗi phần của câu đố bạn đang bỏ lỡ. Việc sử dụng rộng rãi không phải là từ sự tích hợp con rối nhưng bởi vì mọi người có thể bảo mật lỗ hình ảnh bị nhiễm ngay trên internet. không có vấn đề gì họ nói với bạn. - Florian Heigl
Tôi cũng tìm thấy những lời lang thang hữu ích hơn rất nhiều trong một nhóm đa nhà phát triển trong khi trước đó nó chỉ là tôi. Tôi đã áp đặt điều mơ hồ vào nhóm của mình và khám phá ra đó là nơi mà giá trị xuất hiện. - John Hunt
3,5 năm và bây giờ tôi sử dụng docker mỗi ngày để phát triển. Nó tốt, nhưng một con thú khác để lang thang ... Tùy thuộc vào yêu cầu của bạn, tôi tin rằng lang thang vẫn là một nền tảng phát triển tốt hơn cho các đội - nó chỉ dễ dàng hơn nhiều để làm việc với. - John Hunt
4 năm và tôi đã phát hiện ra docker là khủng khiếp. Dài sống Vagrant. - John Hunt


Các câu trả lời:


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

Vagrant

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 trước (được gọi là "hộp")
  • Đặt cài đặt dành riêng cho máy ảo (đị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 cài đặt máy quá tải máy ảo và cài đặt VirtualBox. Hãy nghĩ về nó như một công cụ tạo kịch bản cho VirtualBox.

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

1. Thiết lập mạng đa máy ảo một cách dễ dàng

Hầu hết các nội dung của người sử dụng năng lượng Vagrant mà tôi đã đọc đã 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 với nhau bằng cách sử dụng các IP tĩnh trên mạng con 192.168.1. *. Bạn thấy mình ở một vị trí đã sử dụng subnet đó để phát địa chỉ IP và các máy ảo của bạn bây giờ xung đột. Với Vagrant, bạn chỉ cần chỉnh sửa Vagrantfile và tải lại các máy ảo, trong khi với VirtualBox bạn phải mở các thiết lập cho mỗi máy ảo, nếu không khởi động mỗi máy ảo và thay đổi chúng bên trong.

2. Kiểm soát nguồn

Bằng cách đặt các thiết lập trong một tập tin 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 chỉ là 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 điều khoản để 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 chỉ bằng VirtualBox.

Có rất nhiều đối số để sử dụng phần mềm cấp phé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 tuyệt vời của Stephen Nelson-Smith Làm thế nào để xây dựng 100 máy chủ web trong một ngày.


145
2018-04-27 05:41



Tuy nhiên, tôi không hiểu tại sao tôi nên sử dụng âm đạo trong môi trường phát triển! Bởi vì, nó đắt (nếu bạn muốn sử dụng VMWare!) Chúng ta 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 đó được sao chép bởi VMware để thiết lập một máy ảo khác. Đầu tiên và quan trọng nhất, chúng tôi có thể kiểm soát tất cả các cài đặt máy ảo bằng vmrunlệnh được cung cấp bởi VMware ngay cả những thay đổi địa chỉ IP hoặc chạy một kịch bản bên trong máy khách! - Oğuz Çelikdemir
@ OğuzÇelikdemir Đó là một điểm công bằng. Vagrant chỉ đặt một front-end dễ dàng hơn cho VMWare liên quan đến việc đưa ra một máy tính mới. Đằng sau hậu trường, nó đang sử dụng vmrun để kiểm soát nó. Tôi đã luôn luôn sử dụng VirtualBox, và do đó không có bất kỳ kinh nghiệm với các phụ trợ VMWare. - Adam Lukens
@ AdamLukens, Cảm ơn các ý kiến ​​chi tiết. Những gì bạn đề cập âm thanh thú vị .. nhưng tôi tự hỏi nếu bạn nhận thức được VboxManage chỉ huy? virtualbox.org/manual/ch08.html  Khá nhiều thứ bạn đã đề cập có thể được tạo ra như một kịch bản bằng cách chuyển thông số ip / tham số cụ thể đến vboxmanage controlvm hoặc một lệnh tương tự trong một kịch bản lệnh shell và sau đó kiểm soát phiên bản đó .. Vậy làm thế nào vagrant cải thiện hơn virtualbox? - alpha_989
@ alpha_989 Tôi đồng ý. Dường như không có điểm độc đáo để sử dụng Vagrant. Chỉ để thuận tiện. - Niklas Rosencrantz


Ngoài câu trả lời tuyệt vời được đưa ra bởi Adam, Vagrant liên kết mọi thứ với nhau. Mặc dù Chef và Puppet (và các kịch bản lệnh Salt và shell và bất kỳ điều khoản 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ả 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ở đã chỉ định của bạn nếu hộp đó 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, nó sẽ là cái đầu 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ả những đ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 một đồng nghiệp. Bạn chỉ cần kiểm tra mã từ repo của bạn, và chạy vagrant up, đừng lo lắng về việc tải xuống ISO hoặc cài đặt bất kỳ thứ gì hoặc tự hỏi phiên bản nào bạn cần sử dụng cho ứng dụng khách cụ thể đó hoặc liệu bạn có bản sao VM đã có mọi thứ bạn cần hay không.

Bạn thậm chí không cần phải lo lắng về việc liệu 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 lệnh shell. (Được rồi, vì vậy bạn có thể cần phải làm bundle install hoặc nói cách khác, hãy đả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 thống nhất cho tất cả, nó có thể làm cho tất cả, nhưng các trường hợp sử dụng đơn giả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 đang làm, nhưng khi bạn sử dụng Vagrant sâu hơn, bạn sẽ khám phá ra bạn có thể làm được nhiều hơn với nỗ lực ít hơn nhiều. Nó sẽ rất đáng để đầu tư thời gian ban đầu.


25
2018-01-09 17:56



Nhưng sẽ dễ dàng hơn và nhanh hơn khi tôi gửi cho nhà phát triển một hình ảnh VM cài sẵn hơn là để cài đặt âm thanh, học cách sử dụng nó và xử lý bất kỳ vấn đề vô số nào xảy ra, đặc biệt khi hỗ trợ cửa sổ hộp. Tôi chỉ thực sự KHÔNG nhận được nó, một trong hai. Có vẻ chẳng là gì ngoài fanboys. - hopeseekr
Cài đặt Vagrant là không thể tin được dễ dàng những ngày này. Bất cứ ai không thể cài đặt nó không thể được tin cậy để 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 một máy ảo. Vagrantfile định nghĩa thiết lập, bao gồm URL để tải xuống VM cơ sở (sau đó nó cấu hình). Nếu ban đầu bạn không cầ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 thực hiện các thay đổi. Làm điều đó trong Vagrantfile của bạn. - iconoclast
Vì bạn đang giữ Vagrantfile với mã của bạn, tất cả các nhà phát triển tham gia dự án sẽ tự động nhận được những thay đổi bạn thực hiện cho máy ảo của mình, vì bạn đang tạo 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 cấp phép vỏ nếu bạn thấy đầu bếp và con rối quá mức cần thiết (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 cấp phé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
@hopeseekr Tôi cũng đã nghĩ về điều này. Tôi đã tiếp tục đọc để xem lợi ích. Tôi nghĩ cuối cùng tôi cũng có được nó. Tôi đã đọc một cuốn sách về mạng Python. Thử nghiệm là một máy bắt chước cài đặt phức tạp mà bạn có thể sử dụng để tìm hiểu. Bạn có thể xây dựng một VM w / Linux, làm điều đó bằng tay, và tôi là một người, vì vậy đó là ok. Tôi cài đặt Vagrant trên Windows và nhập ba lệnh Vagrant để gọi lên hình ảnh của mình để sử dụng trên VirtualBox. Nếu tôi có 50 máy tính thì sao? thời gian dài để thiết lập với ảnh chụp nhanh. Điều gì xảy ra nếu có thay đổi? 50 cập nhật? Đối với tôi, tôi đã có thể bắt đầu làm việc ngay lập tức mà không cần thiết lập mọi thứ. - johnny
và khi nào bạn cần thay đổi thứ gì đó trên tất cả 50 máy tính? - iconoclast


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 những người sử dụng Vagrant sẽ nói với bạn rằng họ chạy 'cung cấp vagrant' và thỉnh thoảng 'vagrant reload' nhiều hơn thường xuyên hơn 'vagrant up' hoặc 'vagrant destroy'. Những nhiệm vụ này cho thấy công việc thực tế không phải là trong các máy quay lên / xuống mà là 'quản lý' chúng sau khi thực tế.

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

Ngoài con dao thực tế chưa có một plugin cho VirtualBox (mặc dù tôi hình dung một cái trong 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 so với những gì Vagrant cung cấp nếu / khi bạn đã sẵn sàng di chuyển ra ngoài VirtualBox. Hiện tại, cộng đồng Chef có vẻ vui khi cho phép người dùng VirtualBox cùng với Vagrant bằng cách không tích hợp api ảo cho một plugin con dao. Có một plugin không có con dao, không 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à nguyên khối Vagrantfile để hoạt động.

Vì vậy, tôi sẽ đi ra ngoài một chi và nói Vagrant chắc chắn là không 'tốt hơn' hơn Chef với con dao; nhưng cần thiết (cho bây giờ) nếu bạn nhấn mạnh vào VirtualBox và có lẽ 'dễ dàng hơn' quản lý đầu bếp với 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
2018-03-21 14:13





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 âm đạo (trên VirtualBox "đơn giản"). Tôi không thấy các 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 kịch bản lệnh THE SAME được sử dụng để cung cấp máy ảo 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 rất dễ 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 điều khiển dễ dàng từ các công cụ như Jenkins khi chạy thử nghiệm.

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


8
2018-06-20 11:19



Tôi nghiêm túc chỉ cần sao chép vmx và vmdk từ Windows sang Linux. Có lẽ nó khác trong thế giới ảo, nhưng tôi nghi ngờ điều đó! Điều gì dễ dàng hơn? Sao chép một tập tin hoặc lộn xộn với vagrantfiles và vô số các vấn đề có thể đi sai? - hopeseekr
Để đặt một điểm tốt hơn vào 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 những gì bạn có. Xem cách Vagrant không phải là "cạnh tranh với" VirtualBox, nhưng làm việc với nó, hoặc vượt ra ngoài nó. - MarkHu
Người ta thường sử dụng Vagrantfile để mô tả cách một máy ảo được thiết lập cho một 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 vv. hơn toàn bộ VMDK. - Ben XO


Vagrant tóm tắt 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 cơ sở dữ liệu cụ thể.

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ỉ với một lệnh và nó chính xác giống như một người khác. Điều này là 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 đến 1 giờ.

+ Adam nói gì.

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


0
2018-03-29 01:58