VirtualBox 대신 Vagrant를 사용해야하는 이유는 무엇입니까?


230

개발 환경을 만들기 위해 수년 동안 VirtualBox를 사용해 왔습니다.

많은 동료들이 Vagrant에 대해 이야기하고 있으며 많은 사람들이 그것에 대해 매우 흥분한 것 같지만 그 이점을 파악할 수없는 것 같습니다. 내가 Virtualbox로 한 일.

VirtualBox를 사용하면 환경을 완벽하게 설치 및 구성한 다음 OVA 등으로 패키징하여 다른 사무실 사용자와 공유 할 수 있습니다. 문제가 발생하면 VirtualBox에서 스냅 샷을 찍을 수 있습니다.

꼭두각시와 요리사는 실제로 Vagrant의 일부가 아니며 자신의 것이 맞습니까?

그렇다면 Vagrant는 VirtualBox보다 어떤 이점을 제공합니까?


11
2 년 동안 나는 지금 개발을 위해 매일 Vagrant를 사용하고 있습니다. 우리 팀은 그것을 사용하고 개발 환경 문제를 해결했습니다.
John Hunt

1
PXE 서버를 설정하는 데 어려움이 없다면 VBoxManage를 알고 1 분 이내에 nfs를 설정하는 방법과 직접 빌드 체인을 관리하는 방법을 알고 있어야합니다. 전혀 중요하지 않습니다. 누락 된 퍼즐의 각 부분마다 가치가 올라갑니다. 퍼펫 통합에서 널리 사용되는 것은 아니지만 사람들이 인터넷에 침입하여 이미지에 보안 허점을 줄 수 있기 때문입니다. 그들이 무슨 말을하든
Florian Heigl

2
3.5 년이 지난 지금 나는 매일 도커를 개발에 사용합니다. 그것은 좋지만 방랑자에게는 다른 짐승입니다 ... 요구 사항에 따라 방랑자는 여전히 팀을위한 더 나은 개발 플랫폼이라고 생각합니다. 작업하기가 훨씬 쉽습니다.
존 헌트

5
4 년이 지났는데도 커가 끔찍하다는 것을 알았습니다. 오래 사는 방랑자.
John Hunt

3
귀하의 의견은 지금이 훨씬 더 재미를 만들고있다
플로리안 Heigl

답변:


151

이것은 큰 질문이므로 세 부분으로 나눌 것입니다.

방랑자

Vagrant는 다음을 통해 하나 이상의 가상 머신을 설정하는 데 사용됩니다.

  • 미리 만들어진 이미지 가져 오기 ( "상자"라고 함)
  • VM 별 설정 (IP 주소, 호스트 이름, 포트 전달, 메모리 등) 설정
  • Puppet 또는 Chef와 같은 프로비저닝 소프트웨어 실행

VM을로드하고 VirtualBox 설정을 설정 한 후에는 소프트웨어를 설치하거나 머신을 설정하지 않습니다. 이를 VirtualBox의 스크립팅 엔진으로 생각하십시오.

VirtualBox에서 Vagrant를 사용하는 이유는 다음과 같습니다.

1. 간편한 멀티 VM 네트워크 설정

내가 읽은 Vagrant 고급 사용자 콘텐츠의 대부분은 동시에 여러 VM을 설정하는 것에 관한 것입니다. Vagrant는 이러한 설정을위한 단일 구성 파일을 제공하므로 하나의 명령으로 모든 구성 파일을 시작할 수 있습니다.

192.168.1. * 서브넷에서 고정 IP를 사용하여 서로 네트워킹하도록 3 개의 VM을 구성했다고 가정합니다. 이미 해당 서브넷을 사용하여 IP 주소를 나눠주는 위치에서 자신을 발견하면 VM이 충돌합니다. Vagrant를 사용하면 Vagrantfile을 편집하고 VM을 다시로드 할 수 있지만 VirtualBox를 사용하면 각 VM을 부팅하지 않고 내부에서 변경하지 않는 경우 각 VM에 대한 설정을 열어야합니다.

2. 소스 컨트롤

텍스트 파일에 설정을 지정하면 구성을 소스 제어하에 둘 수 있습니다. 지난 주에 일부 변경 사항이 있었으며 실수로 이미지가 손상 되었습니까? 변경 사항을 되돌리고 VM을 다시로드하십시오. VirtualBox 스냅 샷을 사용하여이 작업을 수행 할 수 있지만 Vagrantfile보다 훨씬 더 많은 공간을 차지합니다.

3. 다양한 플랫폼

http://vagrantbox.es 와 같은 사이트에는 많은 상자가 있습니다 . 이를 통해 동일한 환경을 설정하기 위해 동일한 프로비저닝을 적용하여 다양한 OS 또는 배포판을 사용할 수 있습니다. 이는 새로운 플랫폼에 대한 테스트 또는 지원을 추가하는 데 도움이 될 수 있으며 VirtualBox 만 사용하면 시간이 많이 걸립니다.

프로비저닝 소프트웨어 사용과 이미지 스냅 샷 사용에 대한 많은 주장이 있습니다. 추가 토론을 위해 Stephen Nelson-Smith의 훌륭한 기사 하루에 100 개의 웹 서버를 구축하는 방법을 알려 드리겠습니다 .


8
그래도 개발 환경에서 방랑자를 사용해야하는 이유를 모르겠습니다! 비용이 많이 들기 때문에 (VMWare를 사용하려는 경우) vagrant에서 사용하는 기본 상자와 같은 가상 시스템을 준비한 다음 VMware에서 복제하여 다른 가상 시스템을 설정할 수 있습니다. 무엇보다도 vmrunIP 주소 변경 또는 게스트 머신 내부에서 스크립트 실행을 통해 VMware에서 제공하는 명령으로 모든 가상 머신 설정을 제어 할 수 있습니다 !
Oğuz Çelikdemir

3
@ OğuzÇelikdemir 그것은 좋은 지적입니다. Vagrant는 새로운 시스템을 도입하는 것과 관련하여 VMWare에 더 쉬운 프론트 엔드를 제공합니다. 무대 뒤에서 그것을 vmrun제어하는 데 사용 하고 있습니다. 나는 항상 VirtualBox를 사용 했으므로 VMWare 백엔드에 대한 경험이 없습니다.
Adam Lukens

1
@AdamLukens, 자세한 의견 주셔서 감사합니다. 당신이 언급 한 내용이 흥미롭게 들립니다 ..하지만 VboxManage명령을 알고 있는지 궁금합니다 . virtualbox.org/manual/ch08.htmlvboxmanage controlvm 셸 스크립트에서 특정 ip / parameter 또는 이와 유사한 명령 을 전달한 다음 버전을 제어 하여 언급 한 거의 모든 내용을 스크립트로 만들 수 있습니다 . 그러면 어떻게 vagrant향상 virtualbox됩니까?
alpha_989

@ alpha_989 동의합니다. Vagrant를 사용할 특별한 포인트가없는 것 같습니다. 편의상.
Niklas Rosencrantz

27

Vagrant는 Adam의 탁월한 답변 외에도 모든 것을 하나로 묶었습니다. Chef와 Puppet (및 Salt 및 shell 스크립트 및 사용하려는 다른 제공 업체)은 별개의 것이지만 Vagrant는이를 모두 연결하고 vagrant up.

그 하나의 명령은

  1. 필요한 모든 것이면 VM을 시작하십시오.
  2. 지정된 기본 상자에서 아직 상자를 만들지 않았지만 컴퓨터에 기본 상자가 없으면 먼저 상자를 만듭니다.
  3. URL에서 가져 와서 컴퓨터로 다운로드하십시오.

당신은 모든 것을 생각할 필요가 없습니다. 동료가 시작한 다른 프로젝트로 전환한다고 가정 해 보겠습니다. 리포지토리에서 코드를 체크 아웃하고 실행 vagrant up하면 ISO를 다운로드하거나 아무것도 설치하거나 특정 클라이언트에 어떤 배포판을 사용 해야하는지 또는 이미 모든 것을 가지고있는 VM의 사본이 있는지 궁금해하지 않아도됩니다. 당신은 필요합니다.

Chef 또는 Puppet을 사용하여 설정했는지 또는 쉘 스크립트만으로 설정했는지에 대해 걱정할 필요가 없습니다. (좋아요. 따라서 bundle install모든 것을 설치했는지 확인해야하지만 여전히 큰 문제는 아닙니다.)

모든 것을 하나로 묶고 통합 된 인터페이스를 제공함으로써 가장 간단한 사용 사례를 제외한 모든 것을 훨씬 쉽게 만들 수 있습니다. 처음에는 이미하고있는 일을하는 새로운 방법을 다시 배우는 것처럼 느껴질 수 있지만 Vagrant 사용에 대해 더 깊이 알게되면 훨씬 적은 노력으로 훨씬 더 많은 것을 할 수 있다는 것을 알게 될 것입니다. 초기 투자 가치가 있습니다.


8
그러나 개발자가 방랑자를 설치하고 사용 방법을 배우고 특히 지원 할 때 발생하는 수많은 문제를 처리하는 것보다 사전 설정 VM 이미지를 개발자에게 보내는 것이 훨씬 쉽고 빠릅니다. 창 상자. 나는 정말로 그것을 얻지 못한다. 팬보이가 아닌 것 같습니다.
hopeseekr

5
요즘 Vagrant 설치는 매우 쉽습니다. 설치할 수없는 사람은 코드 작성을 신뢰할 수 없습니다. 개발자가 체크 아웃하는 소스 코드에 Vagrantfile을 갖는 것은 실제로 VM을 보내는 것보다 훨씬 쉽습니다. Vagrantfile은 기본 VM을 다운로드 할 URL을 포함하여 설정을 정의한 다음 구성합니다. 처음에 구성을 변경할 필요가 없으면 모든 설정이 완료된 것입니다. 그러나 프로젝트를 진행하면서 변경해야 할 수도 있습니다. 당신의 Vagrantfile에서 그렇게하십시오.
iconoclast

5
Vagrantfile을 코드와 함께 유지하기 때문에 프로젝트에 참여하는 모든 개발자는 Vagrantfile에서 VM을 변경하므로 변경 사항이 자동으로 VM에 적용됩니다. Vagrantfile을 구성하는 것이 어려울 필요는 없습니다. Chef와 Puppet이 지나치게 과도하다고 판단되면 쉘 프로비저닝을 사용할 수 있습니다. VM에서 셸 명령을 입력 할 수 있으면 Vagrantfile에서 셸 프로비저닝 명령을 설정하는 것이 매우 어렵습니다. 약간의 선행 노력이 필요하며 장기적으로 많은 두통을 줄일 수 있습니다.
iconoclast

4
그리고 50 대의 컴퓨터에서 무언가를 변경해야 할 때?
iconoclast

4
여기서 논의는 실제로 조기 최적화에 관한 것입니다. 필요하지 않은 경우 방랑자를 사용하지 마십시오. VM 생성이 지루해지고있는 것을 발견 할 때 방랑자를 사용하십시오.
cammil

9

요리사 또는 퍼펫을 VM 프로비저닝과 통합하는 기능이 핵심입니다. 대부분의 Vagrant 사용자는 'Vagrant up'또는 'Vagrant destroy'보다 훨씬 자주 'Vagrant provision'및 가끔 'Vagrant reload'를 실행한다고 알려줍니다. 이러한 작업은 실제 작업이 VM을 회전 / 축소하는 것이 아니라 사실 후에 VM을 '관리'한다는 것을 나타냅니다.

더 나은 질문을하려면 (어쨌든 숙련 된 Chef 사용자가 제기 한) 적절한 플러그인으로 나이프를 사용하지 않고 Vagrant를 사용하는 이유가 될 수 있습니다 (순간에 virtualbox 플러그인에 도달 함)? 예를 들어, 데이터 백에 저장된 인수 값을 나이프 플러그인으로 전달하는 것은 하나의 거대한 Vagrantfile을 저글링하는 것보다 더 지능적이고 유연하며 관리 가능합니다. 나는 일반적으로 레시피를 계속 변경할 필요가 없도록 요리사 데이터 백에 CPU 수, 메모리 양, 배포 할 OS, 호스트 이름, IP, 경로 등과 같은 '동적'리소스를 정의합니다. ). Chef 웹 인터페이스를 통해 데이터 백을 편집하는 것은 가장 후배 운영자에게 제공 할 수있는 정말 쉬운 데이터 입력 작업입니다. Vagrantfile을 사용하면 영원히 수정되는 코드를 믿거 나 말거나 믿거 나 말거나 코드가 깨지므로 운영 직원에게 간단한 변경 사항을 전달하지 않을 것입니다.

사실 나이프에는 virtualbox 용 플러그인이 아직 없지만 (나중에 먼 미래에 구상하지만) vmware, xenserver 및 거의 모든 주요 '클라우드'를 포함한 대부분의 '엔터프라이즈'가상화 제품을위한 플러그인이 이미 있습니다 공급자도 마찬가지입니다. 즉, 가상 상자 너머로 이동할 준비가되었을 때 나이프가 Vagrant가 제공하는 것보다 훨씬 뛰어납니다. 현재 Chef 커뮤니티는 나이프 플러그인을 위해 virtualbox api를 통합하지 않음으로써 virtualbox 사용자가 Vagrant와 함께 뛰어 들게하는 것을 기쁘게 생각합니다. 데이터 백을 사용하여 인수를 전달할 수있는 나이프가 많은 플러그인이 있습니다. 그러나 여전히 소프트웨어가 필요하며 기능을하려면 모 놀리 식 Vagrantfile입니다.

그래서, 나는 사지로 나가서 Vagrant는 칼로 요리사보다 '더 나은'것은 아닙니다. 그러나 가상 박스를 고집하고 데이터 백으로 요리사를 관리하는 것보다 '쉽게'주장하는 경우 (현재) 관리해야 할 환경이 매우 간단해야합니다.


8

다음은 방랑자가 단순화 한 두 가지 개발자 사용 사례입니다 ( "일반"VirtualBox 사용). 이 유스 케이스는 이전 답변에서 구체적으로 언급되지 않았습니다.

  1. Vagrant는 개발 및 프로덕션 플랫폼을 가능한 한 가깝게 유지하려는 목표를 지원합니다. 이상적인 환경에서는 Vagrant VM을 프로비저닝하는 데 사용되는 SAME 스크립트를 사용하여 프로덕션 환경을 프로비저닝하고 배치시 놀라움을 최소화합니다.

  2. 통합 테스트 및 지속적인 통합 : Vagrant는 테스트에서 쉽게 제어 할 수 있으므로 테스트 실행시 Jenkins와 같은 도구를 통해 전체 다중 머신 스택을 쉽게 제어 할 수 있습니다.

예, "일반"VirtualBox도 여기에서 사용할 수 있습니다. 그러나 방랑자가 사용하는 규칙에 따라 이러한 시나리오를보다 간단하게 설정할 수 있습니다.


1
vmx와 vmdk를 Windows에서 Linux로 심각하게 복사합니다. 어쩌면 가상 상자 세계에서는 다를 수 있지만 의심합니다! 더 쉬워요? 파일을 복사하거나 vagrantfiles와 혼란스러워하는 수많은 문제가 있습니까?
hopeseekr

6
이를 자세히 설명하기 위해 Vagrant는 VirtualBox, VMware, Parallels 또는 호스팅 대상에 상관없이 가상 시스템의 특성을 설명 할 수있는 가상 정의 언어로 생각할 수 있습니다. Vagrant가 어떻게 VirtualBox와 "경쟁"하지 않고 그와 함께 또는 그 이상으로 작동하는지 확인하십시오.
MarkHu

하나는 일반적으로 프로젝트에 가상 머신을 설정하는 방법을 설명하기 위해 Vagrantfile을 사용합니다. Vagrantfile은 프로젝트와 소스 제어 (git 등), GitHub 등에 공유하기 위해 커밋됩니다. 전체 VMDK보다.
Ben XO

0

Vagrant는 가상 머신을 추상화하므로 가상 머신 구현을 쉽게 전환 할 수 있습니다. Virtual Box에서 AWS 또는 Digital Ocean으로 전환 할 수 있습니다. 데이터베이스 별 쿼리 언어 대신 SQL을 사용하는 것과 같습니다.

Vagrant를 사용하면 개발자는 단 하나의 명령으로 환경을 빠르게 설정할 수 있으며 다른 모든 사람과 정확히 동일합니다. 이것은 개발자들이 자주 오가는 대기업에서 중요합니다. 설치 시간을 3 일에서 1 시간으로 줄일 수 있습니다.

+ 아담의 말.

(아직도 주방장이나 꼭두각시의 용도를 찾지 못했습니다 ...)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.