Vagrant
개요
https://www.vagrantup.com/
바그란트, 내지는 베이그런트.
가상화 소프트웨어 개발 환경을 다루는 도구이다.
가상화 소프트웨어에 대한 프로비저닝 툴인 것이다.
VirtualBox, VMWare, Hyper-V와 같은 가상 머신 세팅을 간편하게 관리하고 공유할 수 있게 된다.(버츄얼박스만이 라이센스 없이 사용가능하다.)
설정 스크립트 기반으로 생성 및 유지보수를 관리할 수 있다.
메모리, 사용할 이미지 등을 미리 전부 지정할 수 있다.
HashiCorp에서 루비 언어로 개발된 오픈소스
설치
https://developer.hashicorp.com/vagrant/install?product_intent=vagrant#windows
윈도우
본인의 맞는 파일을 다운로드한다.
msi 파일을 다운받게 된다.
약관만 동의하면 바로 설치가 가능하다.
성공적으로 설치된다면 자동으로 환경변수에 명령어가 등록되어 사용 가능해진다.
리눅스
명령어를 통한 설치 방법이 홈페이지에 대놓고 나와있어서, 그대로 복붙하면 된다.
맥도 비슷할 것 같다.
명령어
https://developer.hashicorp.com/vagrant/docs/cli
웬만해서는 이 명령어들을 다 사용할 일은 없는 것이 바람직할 것이다.
왜냐하면 vagrant 파일을 작성하여 선언적으로 환경을 세팅하는 것이 vagrant의 핵심이기 때문이다.
vagrant를 실행하는 명령어만 확실하게 아는 것이 이상적이다.
사용자 플로우
- 박스 이미지 다운로드 혹은 프로젝트 생성
- Vagrantfile 작성
- Vagrant 가상 인스턴스 라이프사이클 관리
- ssh를 통해 내부에 접근 가능하며, 이에 대한 세팅도 자동화 가능
이와 같은 흐름에 따라 vagrant를 활용할 수 있다.
- ssh를 통해 내부에 접근 가능하며, 이에 대한 세팅도 자동화 가능
기본 조작 및 명령어
이를 위해서는 박스 이미지 개념을 알아야 하고, Vagrantfile을 작성할 줄 알아야 한다.
박스 이미지는 iso, 내지는 컨테이너 이미지를 생각하면 된다. 세팅할 환경을 담고 있는 파일이다.
https://app.vagrantup.com/boxes/search
이곳을 통해 vagrant cloud에 들어가 각종 박스 이미지들을 찾아볼 수 있다.
이제 명령어 관점에서 위 과정을 조금 더 세분화시켜서 보자면,
vagrant -v
vagrant status
vagrant global-status
vagrant init
vagrant up
vagrant halt
vagrant destroy
vagrant suspend
vagrant resume
vagrant reload
vagrant ssh
vagrant provision
위의 명령어들을 이해하고 차근차근 실행해보자.
Vagrantfile
위의 명령어들은 Vagrantfile이 있는 디렉터리에서 해당 파일을 읽고 동작을 수행한다.
사용하기 위해서는 루비 언어를 작성할 줄 알아야 하는데, 다른 사람들이 잘 써놓은 스크립트들이 있으니 그냥 그것을 베껴서 사용하는 것이 추천된다.
트러블 슈팅
간혹 gui 세팅을 넣지 않은 채로 vm을 동작시키면 ssh 단계에서 시간이 오래 걸려 connection time out이 뜨는 경우가 발생한다.
이것은 ssh 키를 만드는 과정에서 사용자의 키 입력을 대기하다가 발생하는 이슈로, 다음과 같이 해결할 수 있다.[1]
vboxmanage list runningvms
vboxmanage controlvm projects_1234567890 keyboardputscancode 1c
단순하게 엔터를 vm에 전달하는 방식이다.
이걸로도 안 되는 경우가 많은데, 이럴 때는 gui 세팅을 해주는 수밖에 없다.
config.vm.provider :virtualbox do |vb|
vb.gui = true
end
이런 식으로 말이다.
이걸 넣고 up을 시키면 gui 인터페이스도 같이 켜진다.
이때 그냥 vagrant suspend로 잠시 절전시키고 해당 줄을 없앤 다음 다시 up을 시키면 문제없이 동작하게 된다.