-
Vagrant에 대하여카테고리 없음 2019. 9. 26. 15:59
아래 내용들은 Vagrant 공식 문서를 참고하여 작성되었다.
개요
Vagrant는 단일 작업으로 가상머신환경을 빌드하고 관리하기 위한 툴이다.
Vagrant와 CLI 툴의 차이
Vagrant와 Docker의 차이
- Vagrant는 여러 운영체제 간의 일관된 개발 환경을 제공하는 데에 집중하는 툴이다.
- Docker는 소프트웨어를 길게 유지할 수 있도록 관리하는 데에 집중하는 툴이다.
- Vagrant는 Mac, Linux에서 Windows 개발 환경을 실행할 수 있다. Docker는 아니다.
- Docker는 BSD와 같은 운영체제를 지원하지 않는다.
Vagrant와 Terraform의 차이
- Vagrant는 개발 환경을 관리하는 데에 집중하는 툴이다.
- Terraform은 더 일반적인 인프라 관리에 집중하는 툴이다.
Install
바이너리 파일을 다운로드 받아서 설치한다.
다운로드 위치: https://www.vagrantup.com/downloads.html
- 설치 과정
[bylee@bylee5 install]$ wget https://releases.hashicorp.com/vagrant/2.2.5/vagrant_2.2.5_x86_64.rpm --2019-09-26 15:16:09-- https://releases.hashicorp.com/vagrant/2.2.5/vagrant_2.2.5_x86_64.rpm Resolving releases.hashicorp.com (releases.hashicorp.com)... 151.101.1.183, 151.101.65.183, 151.101.129.183, ... Connecting to releases.hashicorp.com (releases.hashicorp.com)|151.101.1.183|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 42025029 (40M) [application/x-redhat-package-manager] Saving to: ‘vagrant_2.2.5_x86_64.rpm’ vagrant_2.2.5_x86_64.rpm 100%[============================================================>] 40.08M 11.2MB/s in 3.8s 2019-09-26 15:16:13 (10.7 MB/s) - ‘vagrant_2.2.5_x86_64.rpm’ saved [42025029/42025029] [bylee@bylee5 install]$ sudo rpm -i vagrant_2.2.5_x86_64.rpm [bylee@bylee5 install]$ vagrant Usage: vagrant [options] <command> [<args>] -v, --version Print the version and exit. -h, --help Print this help. Common commands: box manages boxes: installation, removal, etc. cloud manages everything related to Vagrant Cloud destroy stops and deletes all traces of the vagrant machine global-status outputs status Vagrant environments for this user halt stops the vagrant machine help shows the help for a subcommand init initializes a new Vagrant environment by creating a Vagrantfile login package packages a running vagrant environment into a box plugin manages plugins: install, uninstall, update, etc. port displays information about guest port mappings powershell connects to machine via powershell remoting provision provisions the vagrant machine push deploys code in this environment to a configured destination rdp connects to machine via RDP reload restarts vagrant machine, loads new Vagrantfile configuration resume resume a suspended vagrant machine snapshot manages snapshots: saving, restoring, etc. ssh connects to machine via SSH ssh-config outputs OpenSSH valid configuration to connect to the machine status outputs status of the vagrant machine suspend suspends the machine up starts and provisions the vagrant environment upload upload to machine via communicator validate validates the Vagrantfile version prints current and latest Vagrant version winrm executes commands on a machine via WinRM winrm-config outputs WinRM configuration to connect to the machine For help on any individual command run `vagrant COMMAND -h` Additional subcommands are available, but are either more advanced or not commonly used. To see all subcommands, run the command `vagrant list-commands`.
소스 설치는 https://www.vagrantup.com/docs/installation/source.html 문서를 참고한다.
Vagrant Github 주소는 https://github.com/hashicorp/vagrant이다.
Project Setup
Vagrant 프로젝트 설정의 첫 단계는 Vagrantfile을 생성하는 것이다.
Vagrantfile의 목적은 2가지이다.
- 프로젝트의 최상위 폴더를 표시한다. Vagrant의 구성 옵션들은 최상위 폴더와 관련되어 있다.
- 머신의 종류와 프로젝트를 실행하는 데 필요한 자원을 기술한다. 또한 설치할 소프트웨어가 무엇이 있는지, 소프트웨어에 어떻게 접근하는지를 기술한다.
Vagrant는 폴더를 초기화하기 위해 내장 명령어(vagrant init)가 있다. 이에 대한 예는 다음과 같다.
$ mkdir vagrant_getting_started $ cd vagrant_getting_started $ vagrant init hashicorp/precise64
위는 실행하면 Vagrantfile이 생기고, 내용은 다음과 같다.
[bylee@bylee5 vagrant_getting_started]$ cat Vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The "2" in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please don't change it unless you know what # you're doing. Vagrant.configure("2") do |config| # The most common configuration options are documented and commented below. # For a complete reference, please see the online documentation at # https://docs.vagrantup.com. # Every Vagrant development environment requires a box. You can search for # boxes at https://vagrantcloud.com/search. config.vm.box = "hashicorp/precise64" # Disable automatic box update checking. If you disable this, then # boxes will only be checked for updates when the user runs # `vagrant box outdated`. This is not recommended. # config.vm.box_check_update = false # Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine. In the example below, # accessing "localhost:8080" will access port 80 on the guest machine. # NOTE: This will enable public access to the opened port # config.vm.network "forwarded_port", guest: 80, host: 8080 # Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine and only allow access # via 127.0.0.1 to disable public access # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1" # Create a private network, which allows host-only access to the machine # using a specific IP. # config.vm.network "private_network", ip: "192.168.33.10" # Create a public network, which generally matched to bridged network. # Bridged networks make the machine appear as another physical device on # your network. # config.vm.network "public_network" # Share an additional folder to the guest VM. The first argument is # the path on the host to the actual folder. The second argument is # the path on the guest to mount the folder. And the optional third # argument is a set of non-required options. # config.vm.synced_folder "../data", "/vagrant_data" # Provider-specific configuration so you can fine-tune various # backing providers for Vagrant. These expose provider-specific options. # Example for VirtualBox: # # config.vm.provider "virtualbox" do |vb| # # Display the VirtualBox GUI when booting the machine # vb.gui = true # # # Customize the amount of memory on the VM: # vb.memory = "1024" # end # # View the documentation for the provider you are using for more # information on available options. # Enable provisioning with a shell script. Additional provisioners such as # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the # documentation for more information about their specific syntax and use. # config.vm.provision "shell", inline: <<-SHELL # apt-get update # apt-get install -y apache2 # SHELL end
이미 존재 폴더에 `vagrant init`을 하면 Vagrant를 setup할 수 있다.
특정 Github에서 사용하면 모든 사람이 사전 작업없이 Vagrant로 이익을 얻을 수 있다.
Boxes
뼈대로부터 가상머신을 빌드하는 것 대신(느리고 지겨운 과정이 될 수 있음)에 Vagrant는 가상머신을 빠르게 클론하기 위해 기본 이미지를 사용한다. 이러한 기본 이미지는 Vagrant에서 "boxes"라고 한다. 자신의 Vagrant 환경에서 사용할 box를 지정하는 것은 새로운 Vagrantfile을 생성한 후의 첫 단계이다.
Installing a Box
이전에 `설정` 부분의 내용에서 이미 Box를 생성했다. 하지만 이 절을 읽을 가치가 있다. 왜냐하면 Box를 어떻게 관리하는지 더 배울 수 있다.
Boxes는 `vagrant box add` 명령어로 Vagrant에 추가할 수 있다. 여러 Vagrant 환경에서 Box를 재사용하기 위해 특정 이름으로 Box를 저장한다. 아직 Box를 추가하지 않았다면 다음과 같이 할 수 있다.
$ vagrant box add hashicorp/precise64
위를 실행하면 HashiCorp's Vagrant Cloud box catalog에서 "hashicorp/precise64" 이름의 Box를 다운로드할 것이다.
local file, custom URL 등에서 Box를 추가할 수 있지만 HashiCorp's Vagrant Cloud에서 Box를 다운로드하는 것이 더 쉽다.
Boxes는 전역적으로 저장할 수 있다. 각각의 프로젝트는 클론한 초기 이미지로 Box를 사용하고 기본 이미지를 절대로 수정하지 않는다. 이는 "hashicorp/precise64" Box를 사용해 2개의 프로젝트를 하고 있다고 해도 다른 머신에 영향을 주지 않는다.
위 명령어로 Boxes가 namespace라는 것을 알 수 있다. Boxes는 2개의 부분으로 구성된다. slash 구분자의 앞은 username이고 뒤는 boxname이다. 위 명령어에서 username은 "hashicorp"이고, boxname은 "precise64"이다. boxname은 URL 또는 local file path를 통해 지정될 수 있다.
Using a Box
위의 내용들을 통해 Box는 Vagrant에 추가되었기 때문에 이를 기본으로 사용하도록 하기 위해 프로젝트를 설정해야 한다. Vagrantfile을 열고 다음과 같은 내용으로 변경한다.
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" end
위의 "hashicorp/precise64"는 Box를 추가하는 데 필요한 이름과 일치해야 한다. Vagrant가 어떤 Box를 사용할지 알아야 한다. 만약 이전에 Box를 추가하지 않았다면 이를 실행할 때 Vagrant는 해당 Box를 자동적으로 다운로드하고 추가한다.
`config.vm.box_version`을 지정해서 Box의 버전을 명시적으로 지정할 수 있다. 다음은 예이다.
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.box_version = "1.1.0" end
`config.vm.box_url`를 사용해 직접 Box의 URL를 지정할 수 있다. 다음은 예이다.
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.box_url = "https://vagrantcloud.com/hashicorp/precise64" end
Finding More Boxes
많은 Box를 찾을 수 있는 장소는 HashiCorp's Vagrant Cloud box catalog이다.
Up And SSH
Vagrant 환경을 시작할 시간이다. 자신의 터미널에서 다음을 실행한다.
$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Box 'hashicorp/precise64' could not be found. Attempting to find and install... default: Box Provider: virtualbox default: Box Version: >= 0 ==> default: Loading metadata for box 'hashicorp/precise64' default: URL: https://vagrantcloud.com/hashicorp/precise64 ==> default: Adding box 'hashicorp/precise64' (v1.1.0) for provider: virtualbox default: Downloading: https://vagrantcloud.com/hashicorp/boxes/precise64/versions/1.1.0/providers/virtualbox.box default: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com ==> default: Successfully added box 'hashicorp/precise64' (v1.1.0) for 'virtualbox'! ==> default: Importing base box 'hashicorp/precise64'... ==> default: Matching MAC address for NAT networking... ==> default: Checking if box 'hashicorp/precise64' version '1.1.0' is up to date... ==> default: Setting the name of the VM: vagrant_getting_started_default_1569485098122_4270 Vagrant is currently configured to create VirtualBox synced folders with the `SharedFoldersEnableSymlinksCreate` option enabled. If the Vagrant guest is not trusted, you may want to disable this option. For more information on this option, please refer to the VirtualBox manual: https://www.virtualbox.org/manual/ch04.html#sharedfolders This option can be disabled globally with an environment variable: VAGRANT_DISABLE_VBOXSYMLINKCREATE=1 or on a per folder basis within the Vagrantfile: config.vm.synced_folder '/host/path', '/guest/path', SharedFoldersEnableSymlinksCreate: false ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... default: The guest additions on this VM do not match the installed version of default: VirtualBox! In most cases this is fine, but in rare cases it can default: prevent things such as shared folders from working properly. If you see default: shared folder errors, please make sure the guest additions within the default: virtual machine match the version of VirtualBox you have installed on default: your host and reload your VM. default: default: Guest Additions Version: 4.2.0 default: VirtualBox Version: 5.2 ==> default: Mounting shared folders... default: /vagrant => /home/bylee/test/vagrant_getting_started
위 명령어는 몇분 걸리고 Ubuntu를 실행하는 가상머신을 생성한다.
Vagrant는 UI 없이 가상머신을 실행하기 때문에 실제적으로 아무 것도 볼 수 없다. 이를 실험하기 위해 다음처럼 머신에서 SSH를 통해 접속할 수 있다.
$ vagrant ssh Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64) * Documentation: https://help.ubuntu.com/ New release '14.04.6 LTS' available. Run 'do-release-upgrade' to upgrade to it. Welcome to your Vagrant-built virtual machine. Last login: Fri Sep 14 06:23:18 2012 from 10.0.2.2 vagrant@precise64:~$
위 명령어는 SSH 세션으로 연결한다.
`rm -rf /` 명령어를 주의해라. Vagrant는 Vagrantfile을 포함하는 호스트 폴더와 `/vagrant` 폴더를 공유하기에 모든 파일을 삭제할 수 있다. 공유 폴더는 다음 절에서 설명된다.
SSH 세션 종료는 CTRL+D로 할 수 있다.
vagrant@precise64:~$ logout Connection to 127.0.0.1 closed.
vagrant destroy 명령어를 실행하면 Vagrant는 가상머신의 모든 자원 사용을 종료한다.
vagrant destory 명령어는 실제로 다운로드된 Box 파일을 제거하지 않는다. Box 파일을 완전히 제거하려면 vagrant box remove 명령어를 사용할 수 있다.
Synced Folders
이는 더 쉽게 가상머신을 가질 수 있게 한다. 많은 사람들은 SSH로 터미널 기반 에디터를 사용해 파일을 편집하길 원하지 않는다. 다행히도 Vagrant는 하지 않는다. `synced folders`를 사용하면 Vagrant는 guest 머신과 파일을 자동적으로 동기화한다.
기본적으로, Vagrant는 프로젝트 폴더를 guest 머선의 `/vagrant` 폴더와 공유한다.
`vagrant ssh`를 머신에서 할 때 `/home/vagrant`에 있다. `/home/vagrant`는 동기화된 `/vagrant` 폴더와 다른 폴더이다.
자신의 터미널이 비호환 guest 추가(또는 guest 추가 없이)에 대한 오류를 표시한다면 Box를 갱신해거나 다른 Box를 선택해야 한다. 예를 들어 hashicorp/precise64이다. 일부 사용자는 vagrant-vbguest plugin 성공을 하지만 Vagrant core team에서 공식적으로 지원하지 않는다.
다시 `vagrant up`을 실행하고, 보기 위해 자신의 머신에서 SSH한다.
$ vagrant up ... $ vagrant ssh ... vagrant@precise64:~$ ls /vagrant Vagrantfile
가상머신에서 보이는 Vagrantfile은 host 머신에서 보이는 Vagrantfile과 같다.
이를 실험하기 위해 파일을 touch한다.
vagrant@precise64:~$ touch /vagrant/foo vagrant@precise64:~$ exit $ ls foo Vagrantfile
"foo"는 이제 host 머신에 있다. Vagrant는 동기화하여 폴더를 유지한다.
synced folders로 원하는 에디터를 host 머신에서 계속 사용할 수 있고, guest 머신과 파일 동기화가 된다.
Provisioning(준비하는)
Ubuntu를 복사한 가상머신을 가지고 있고, 자신의 머신에서 파일을 편집할 수 있다. 파일은 가상머신과 동기화되고, 웹서버를 통해 파일을 제공한다.
SSH로 들어가서 웹서버를 설치한다. Vagrant를 사용하는 모든 사람은 같은 것을 해야 한다. 대신에 Vagrant는 automated provisioning 기능을 내장하고 있다. 이 기능을 사용하는 Vagrant는 `vagrant up`할 때 guest 머신은 반복적으로 생성되고 사용 준비를 하기 위해 소프트웨어를 자동으로 설치할 것이다.
Installing Apache
기본 프로젝트에 Apache를 설치하는데 shell script를 사용해 할 수 있다. 다음 shell script를 생성하는데 Vagrantfile과 같은 폴더에 bootstrap.sh로 저장한다.
#!/usr/bin/env bash apt-get update apt-get install -y apache2 if ! [ -L /var/www ]; then rm -rf /var/www ln -fs /vagrant /var/www fi
위 shell script를 실행하기 위해 Vagrant를 설정한다. 설정은 Vagrantfile을 편집해서 할 수 있다. 다음은 예이다.
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.provision :shell, path: "bootstrap.sh" end
"provision" 줄이 추가되었고, 머신을 구성할 때 `shell` 준비자(provisioner)를 사용하도록 한다. 파일 경로는 프로젝트 위치(Vagrantfile이 있는 위치)와 관련되어 있다.
Provision!
구성되면 머신을 생성하기 위해 `vagrant up`을 실행하고, Vagrant는 자동적으로 준비한다(provision). shell script의 output 내용을 터미널에서 볼 수 있다. guest 머신이 이미 이전 단계부터 실행되고 있다면 `vagrant reload --provision`(가상머신을 빠르게 재시작하는데 초기 import 단계를 뛰어넘는다)를 실행한다. reload 명령어에 대한 준비 표시(provision flag)는 Vagrant에 준비자를 실행하도록 알린다. 이는 보통 Vagrant가 `vagrant up`할 때만 가능하다.
Vagrant가 완전히 구동하면 웹서버가 실행되고, 웹사이트를 브라우저에서 아직은 볼 수 없지만 머신의 SSH에서 파일을 load해서 provisioning 동작을 확인할 수 있다. 다음은 예이다.
$ vagrant ssh ... vagrant@precise64:~$ wget -qO- 127.0.0.1
위 shell script에서 Apache를 설치하고 Apache의 기본 DocumentRoot를 구성하였기 때문에 동작한다.
복잡한 provision script는 사용자정의 Vagrant box를 만드는 것이 효율적이다. 이에 대한 더 자세한 내용은 packaging custom boxes 문서를 참고한다.
networking 옵션을 사용하면 자신의 웹 브라이저를 통해 guest 머신에 접속할 수 있다.
Networking
웹서버를 있고 host 머신에서 파일을 수정할 수 있으며 guest 머신과 파일은 자동적으로 동기화된다. 하지만 터미널를 통해 웹 페이지에 접근하는 것은 매우 만족스럽지 못하다. host 머신에서 guest 머선에 접근할 수 있는 추가 옵션을 제공하기 위해 Vagrant의 networking 기능을 사용한다.
Port Forwarding
한가지 옵션은 port forwarding을 사용하는 것이다. Port Forwarding은 host 머신의 port와 공유하기 위해 guest 머신의 port를 지정할 수 있다. 이는 자신의 머신 port에 접근하도록 허용하지만 실제로 지정된 guest 머신 port로 모든 네트워크 트래픽을 전달한다.
port를 설정하면 guest의 Apache에 접근할 수 있다. 이는 Vagrantfile을 편집한다. 다음은 예이다.
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.provision :shell, path: "bootstrap.sh" config.vm.network :forwarded_port, guest: 80, host: 4567 end
위 내용을 적용하기 위해 `vagrant reload` 또는 `vagrant up`(머신의 실행 여부에 따라)을 실행한다.
머신이 다시 실행되면 브라우저에서 `http://127.0.0.1:4567`을 입력한다. Vagrant에서 자동적으로 구성하여 가상머신으로부터 제공되는 웹 페이지를 볼 수 있다.
Other Networking
Vagrant는 다른 네트워크 형식이 있다. 정적 IP 주소를 guest 머신에 할당하거나 기존 네트워크에 guest 머신을 bridge할 수 있다. 이에 관심이 있다면 networking 페이지를 보라
Share
웹서버를 실행하면 머신에서 접근 가능하기 때문에 매우 기능 개발 환경이다. 개발 환경을 제공하는 것 뿐만 아니라 Vagrant는 이러한 개발 환경을 공유하거나 협력이 쉽다. 이 기능을 Vagrant Share라고 한다.
Vagrant Share는 인터넷 연결이 되어 있는 모든 사람에게 Vagrant 환경을 공유한다. Vagrant 환경에서 직접 검색할 수 있는 URL를 제공한다.
installation guide를 해본다. 아래 내용에서는 `vagrant-shere` plugin이 필요하다.
`vagrant share`를 실행한다. 다음은 예이다.
$ vagrant share ... ==> default: Creating Vagrant Share session... ==> default: HTTP URL: http://b1fb1f3f.ngrok.io ...
위 URL은 다를 것이다. 위의 URL를 시도하지 말라. 대신에 `vagrent share`의 output인 URL를 복사하고 방문한다.
공유 폴더의 파일을 수정하고 URL를 새로고침하면 갱신되어 보일 것이다. URL은 Vagrant 환경에서 직접 찾는다.
공유 세션을 끝내기 위해서는 터미널에서 Ctrl+C를 한다. 더이상 환경이 공유되고 있지 않다는 것을 확인하기 위해 다시 URL를 새로고침한다.
Vagrant share는 HTTP 공유보다 더 강력하다. 더 자세한 내용은 complete Vagrant Share documentation를 보라.
Vagrant Share는 `ngrok` 드라이버가 기본이다. `classic` 드라이버는 비활성화(deprecated)되었다.
Vagrant Share는 생산 트래픽을 처리하도록 설계되지 않았다. 개발 또는 Q/A 외에 Vagrant Share를 사용하지 말라. Vagrant Share 서비스는 생산-수준 트래픽을 전달하도록 설계되지 않았다.
Teardown
이제 완전한 가상머신을 있고 기본 웹 개발을 위해 사용할 수 있다. 하지만 이제 기어를 바꾸거나 다른 프로젝트를 수행하거나 점심을 먹거나 집에 갈 시간이라고 말할 수 있다. 개발 환경을 어떻게 지울 수 있는가?
Vagrant는 guest 머신에 대해 suspend, halt, destory가 가능하다. 이러한 옵션은 장단점이 있다. 가장 적합한 방법을 선택하라.
Suspending `vagrant suspend`를 사용하면 가상머신은 머신의 현재 실행 상태를 저장하고, 가상머신을 중지한다. 다시 시작하고 싶다면 `vagrant up`을 실행하여 멈춤 부분부터 재시작될 것이다. 이 방법의 장점은 매우 빠르다. 보통 멈추고 시작하는데 5초에서 10초가 걸린다. 단점은 가상머신이 디스크 공간을 여전히 차지하고 있는 상태이고, 디스크상에 가상머신 RAM의 모든 상태를 저장하기 위해서는 훨씬 큰 디스크 공간이 필요하다.
Halting `vagrant halt`를 사용하면 가상머신은 guest 운영체제를 종료하고 guest 머신를 종료한다. 다시 시작할 때 `vagrant up`를 사용할 수 있다. 이 방법의 장점은 머신을 확실히 종료하는 것이고, 디스크 내용을 보존하여 다시 시작할 수 있다. 단점은 cold boot부터 시작하는데 추가 시간이 걸리고, guest 머신은 디스크 공간을 여전히 차지하고 있다.
Destorying `vagrant destory`를 사용하면 가상머신은 guest 머신의 모든 흔적을 제거할 것이다. 이는 guest 머신을 정지하고 종료하고 guest 하드디스크의 모두를 제거한다. 다시 시작하려고 할 때 `vagrant up`을 하면 된다. 장점은 머신에 주름(cruft)를 남기지 않을 것이다. guest 머신에서 사용하는 디스크 공간과 RAM은 회수되고, host 머신은 깨끗하게 유지된다. 단점은 다시 시작하려고 할 때 `vagrant up`은 머신을 다시가져와야(reimport)하고 다시 준비(re-provision)해야 하기 때문에 추가 시간이 걸린다.
Rebuild
오늘이든 지금부터 일주일이든, 지금부터 일년이든 다시 프로젝트로 되돌아가서 시작할 수 있다. 다음은 예이다.
$ vagrant up
Vagrantfile를 통해 Vagrant 환경은 이미 모두 구성되어 있기 때문에 누구나 `vagrant up`를 언제든지 간단히 실행하고, Vagrant는 작업 환경을 재생성할 것이다.
Providers
여기서는 항상 백엔트가 VirtualBox였다. 하지만 Vagrant는 다양한 백엔트 Provider를 사용할 수 있다. 예를 들어 VMware, Hyper-V 등이다. 구성하는 방법의 더 자세한 내용은 각각의 Provider의 페이지를 읽어라.
Provider를 설치했다면 Vagrantfile에서 어떠한 수정도 필요없다. 단지 적절한 Provider로 `vagrant up`하면 Vagrant가 나머지를 실행한다. 다음은 예이다.
$ vagrant up --provider=vmware_fusion
다른 Provider로 `vagrant up`를 실행하면 Vagrant의 다른 명령어에는 어떤 Provide를 사용할지 알릴 필요가 없다. Vagrant는 자동으로 알아낼 수 있다. 따라서 SSH, destroy 등을 할 때 일반 명령어를 실행한다. 예를 들어 `vagrant destory`이다. 추가 플러그는 필요없다.
Provider에 대한 자세한 내용은 providers 문서를 읽어라.
Vagrantfile