Vagrant란?

  • configure, reproducible, portable work
  • VirtualBox, VMware, AWS 같은 Vitual machine 이용
  • Shell Script, Puppet, Chef 같은 자동화 설치툴 사용

설치

  • brew-cask 로 설치
    • brew cask install virtualbox vagrant

vagrant init : Vagrantfile 을 만든다.

Box

  • virtual machine 의 Base Image 이다. 여러 프로젝트에서 box 를 공유해서 사용할수 있다.
    • hashicorp/precise32, chef/ubuntu-14.04 등등
    • Box list
  • Box 추가 : vagrant box add
    • vagrant box add hashicorp/precise32 : hashicopr/precise32 관련 box 를 다운받는다.
    • Vagrantfile 을 만들어 놓았으면 box add 하지 않아도 나중에 up 하면 자동 설치
1
2
3
4
5
# Vagrant API 버젼 2
Vagrant.configure("2") do |config|
  # box 지정
  config.vm.box = "hashicorp/precise32"
end

UP AND SSH

vagrant up

  • 현재 Vagrantfile 환경을 부팅한다.

vagrant ssh

  • /vagrant 폴더와 Vagrantfile 이있는 폴더가 sync 가 된다. 파일을 삭제하면 Host 에서도 적용이된다.

vagrant destroy

  • up 에 적용됬던 내용들을 모두 지운다. box 를 지우는건 아니다.

Synced Folders

  • 터미널을 통해 소스를 수정하는건 매우 귀찮은일 따라서 Vagrant 는 Host 컴퓨터와 폴더를 공유한다.
  • 기본적으로 호스트의 Vagrantfile 이 있는 폴더와 vagrant 의 /vagrant 폴더를 공유한다.

Provision

  • 게스트 머신을 반복적으로 생성하고 사용하기 위해 프로비져닝으로 만들어서 사용한다. 내부적으로 지원하는 자동 프로비져닝을 통해 자동적으로 소프트웨어를(nginx mysql 등등) 을 설치한다.
1
2
3
4
5
6
7
8
#!/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
1
2
3
4
Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise32"
  config.vm.provision :shell, path: "bootstrap.sh"
end
  • bootstrap.sh 스크립트를 만들어주고 Vagrantfile 에서 provision 으로 shell 을 지저앟고 bootstrap.sh 를 설치하게 해준다.
  • provision 은 vagrant up 을 실행할때 만들어 지므로 이미 실행중일때는 vagrant reload –provision 으로 reload 해준다.

Networking

  • Port Forwarding : Guest machine 에 포트와 Host macine 의 포트를 연결해준다.
1
2
3
4
5
6
7
8
Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise32"
  config.vm.provision :shell, path: "bootstrap.sh"
  # 호스트의 4567 를 게스트 80으로 연결
  # 브라우져에서 127.0.0.1:4567 연결하면
  # 호스트의 apache 80번 포트로 연결된다.
  config.vm.network :forwarded_port, host: 4567, guest: 80
end

Share

  • 내가 만든 Vagrantfile 을 공유한다.

vagrant login vagrant share

Teardown

vagrant suspend

  • 현재 실행 상태를 저장하고 종료한다. 다시 vagrant up 하면 10초면 다시 실행 시킬수있다. 디스크와 램을 사용하고 있는 상태로 종료된다.

vagrant halting

  • 컴퓨터를 종료하는것과 같다. 디스크에는 남겨두고 램에서는 삭제한다. vagrant up 하면 다시 램에 올리고 실행한다.

vagrant destroy

  • 완전히 디스크에서 지워버린다. vagrant up 하면 다시 설치해서 실행하므로 오래걸린다.

Providers

vagrant up –provider=vmware_fusion vagrant up –provider=aws

  • provider 는 기본으로는 virutalbox 지만 바꿀수도 있다.

CLI

  • vagrant box
    • vagrant box add <address> : 박스 추가
    • vagrant box list : 설치된 박스 리스트
    • vagrant box outdated : 최신 업데이트 된 박스들 보여주기
    • vagrant remove <address> : 박스 삭제
    • vagrant repackage :
    • vagrant update :
  • vagrant destroy : 완전히 디스크에서 삭제
  • vagrant global-status : 현재 켜져 있는 Vagrant environments 를 보여준다. vagrant halt 등으로 꺼줘야 한다.
  • vagrant halt : vagrant 꺼준다
  • vagrant package : 현재 실행중인 Virtualbox 를 재사용 가능한 box로 만든다.
  • vagrant plugin
    • vagrant plugin install
    • vagrant plugin license
    • vagrant plugin list
    • vagrant plugin uninstall
    • vagrant plugin update
  • vagrant ssh : ssh 접속
  • vagrant status

Reference

Vagrant Docs