DevOps

Vagrant

클라우드와 로컬에서 VM을 관리하는 결정적이고 반복 가능한 방법

  • #vm
  • #iac
  • #infra

Vagrant는 가상 머신(VM) 프로비저닝 프로세스를 자동화하는 도구입니다. 이 프로젝트는 원래 2010년 Hashicorp의 창립자인 미첼 하시모토가 개인적인 사이드 프로젝트로 개발했습니다.

부인 성명

한국어 실력이 부적하여 이 글이 구글 번역기를 주로 활용했기 때문에 부정확한 문법과 어휘가 있을수 있습니다. 이 점 양해 부탁드리며, 추후에 다시 검토하여 수정하도록 하겠습니다.

제공자

제공자는 Vagrant가 VM을 기본적으로 배포하고 구성하는 데 사용할 수 있는 가상화 기술입니다. 지원되는 Vagrant 제공자 목록은 다음과 같습니다.

상자(Box)

Box는 기본적으로 배포할 수 있는 VM의 이미지입니다. Vagrant에는 배포에 사용할 수 있는 관리자 또는 커뮤니티가 만든 다양한 상자가 들어 있는 자체 저장소가 있습니다.

상자는 Hashicorp Portal을 통해 발견/탐색할 수 있습니다.

몇 게 예시 상자가 다음과 같습니다.

  • centos/7
  • generic/gentoo
  • ubuntu/xenial64
  • hashicorp/precise64
  • archlinux/archlinux

Vagrantfile

Vagrantfile은 Vagrant가 배포에 사용하는 VM에 대한 모든 구성을 포함하는 파일입니다. 이 파일은 Ruby 문법으로 작성되었습니다.

이는 VM을 생성하기 위한 이미지로 사용될 centos/7을 지정하는 최소한의 Vagrantfile입니다.

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
end

vagrant init centos/7를 사용하면 초보자가 살펴보기에 유용한 CentOS용 Vagrantfile을 많이 주석 처리하여 스캐폴딩합니다. Vagrantfile을 구성하는 방법에 대한 가 더 있습니다.

Vagrantfile의 유효성을 검사하려면 validate 명령을 실행합니다.

vagrant validate

프로비저너(Provisioner)

프로비저너는 VM이 ​​생성된 후 VM을 설정하는 도구입니다. 필요한 도구와 소프트웨어가 설치되지 않은 빈 VM을 만드는 것은 그다지 유용하지 않습니다.

  • Ansible
  • Puppet
  • Chef
  • Salt
  • Raw scripts (e.g Bash)

셸 수크립트

셸 프로비저닝 블록에서는 생성/편집 시 실행되는 인라인 셸 명령을 제공할 수 있습니다.

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.provision "shell", inline: <<-SHELL
    echo hello from shell!
    sudo yum update -y
    sudo yum install -y httpd
  SHELL
end

또는, Vagrantfile에서 참조할 수 있는 별도의 셸 스크립트를 사용해도 같은 결과를 얻을 수 있습니다.

provision.sh
#!/bin/bash

echo hello from shell!
sudo yum update -y
sudo yum install -y httpd

provision.sh 스크립트는 이렇게 가져올 수 있습니다.

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.provision "shell", path: "provision.sh"
end

셸을 프로비저너로 사용하는 것에 대한 자세한 내용은 공식 문서에서 배우할 수 있습니다.

다음에

Vagrantfile을 생성하고 구성한 후 vagrant up을 실행하여 VM을 시작합니다. 처음 실행할 때는 VM을 생성하고 실행하기 전에 먼저 공식 저장소에서 지정된 상자(이미지)를 다운로드합니다.

VM이 생성되고 실행되면 vagrant ssh를 실행하여 VM에 ssh로 접속합니다. SSH에서 VM을 종료하려면 명령줄에 exit를 입력합니다. VM을 중지하려면 vagrant halt를 실행하여 VM을 우아하게 종료합니다.

기본 명령

이 섹션을 기본한 Vagrant CLI 명령 몇 가지 아라보게씁니다.

Vagrant 명령

명령설명예시
vagrant init새로운 Vagrantfile를 만드다vagrant init centos/7
vagrant upVM을 다운로드 다음에 시작하다
vagrant sshSSH를 사용하여 VM에 들어가기
vagrant ssh-configOpenSSH 유효 구성을 인쇄합니다
vagrant haltVM들 다 멈추다
vagrant suspendVM들을 일시 중단하다
vagrant resume중단된 VM들은 다시 시작하다
vagrant reloadVM들 멈추고 다시 시작하다
vagrant destroy모든 VM을 중지하고 제거하다
vagrant status현재 Vagrant 환경의 상태를 보여주다
vagrant package실행 중인 가상 환경을 재사용 가능한 상자로 패키징하다
vagrant provision실행 중인 VM에 대해 구성된 모든 프로비저너를 실행합니다.
vagrant plugin installVagrant 플러그인을 설치하다vagrant plugin install vagrant-vbguest
vagrant plugin list설치된 모든 플러그인을 나열하다
vagrant plugin uninstall설치왼 플러그인을 제거하다vagrant plugin uninstall vagrant-vbguest

Vagrant 상자 명령

명령설명예시
vagrant box add상자는 다운로드하다vagrant box add centos/7
vagrant box list다운로드된 상자가 모든 나열하다
vagrant box outdated다운로드왼 상자가 오래된 것이 있는지 확인합니다
vagrant box update상자가 최신 버전으로 업데이트하다vagrant box update centos/7
vagrant box repackage새 이름과 메타데이터로 상자를 다시 포장합니다.vagrant box repackage centos/7 --name custom-centos
vagrant box prune오래된 상자를 제거하다
vagrant box remove상자가 삭제하다vagrant box remove centos/7

제공자로서의 VirtualBox

Vagrant의 제공자로 VirtualBox를 사용하는 경우 VM을 검사하는 데 유용한 명령은 다음과 같습니다.

  • 모든 VM으로 나열하다
vboxmanage list vms
  • 모든 실행중VM들 나열하다
vboxmanage list runningvms

참고

Pal, R. Vagrant Beginner Tutorial.https://www.youtube.com/playlist?list=PLhW3qG5bs-L9S272lwi9encQOL9nMOnRa
Hashicorp. Introduction to Vagrant. Retrieved 2024, November 14 from https://developer.hashicorp.com/vagrant/intro
Vagrant (software). Wikipedia. Retrieved 2024, November 14 from https://en.wikipedia.org/wiki/Vagrant_(software)
Hashicorp. Shell Provisioner. Retrieved 2024, November 14 from https://developer.hashicorp.com/vagrant/docs/provisioning/shell