Vagrant 시작하기
Vagrant는 Hashicorp에서 개발한 일관되고, 재현 가능하고, 복제 및 공유가 가능한 커맨드라인 기반의 가상환경 관리 도구이다. 주로 단일 개발 환경에서의 가상환경 관리에 사용되며, 보다 더 대규모의 인프라 관리를 위해서는 Puppet이나 Chef, Ansible 등과 함께 사용하거나, 역시 Hashicorp에서 만든 Terraform을 사용하는 것으로 보인다.
간단하게 로컬 환경에서 학습용으로 간이 K8S 클러스터를 구성해본다거나 하는데 사용될 수 있을 것으로 보여 알아본다.
기본적인 사용법
설치
윈도우 환경에서는 다음과 같이 입력하여 Vagrant를 설치할 수 있다.
winget insall Hashicorp.Vagrant
Vagrantfile 생성
Vagrant는 Vagrantfile이라는 설정을 기반으로 관리된다.
처음 Vagrantfile을 만들려면 다음과 같이 입력한다. 필요한 Vagrant Box가 없을 경우 자동으로 가져온다. 사용 가능한 Vagrant Box는 Hashicorp Vagrant Public Registry에서 찾을 수 있다.
vagrant init ubuntu/focal64 --box-version 20240821.0.1
vagrant box list # vagrant box 목록 조회
가상머신 실행
vagrant up
vagrant up --provider=virtualbox # virtualbox를 provider로 명시적으로 선택
vagrant status # 상태 확인 (실행 완료 전에도 Running으로 보임)
가상머신 ssh 접속
vagrant ssh
vagrant ssh-config # 키 정보 조회
가상머신 일시 중지/재개
vagrant suspend
vagrant resume
가상머신 중지
가상머신을 종료한다. docker와는 달리, 실행 중 작업 내용이 초기화되지 않으나, 다른 머신에 그대로 환경을 복제하기 위해서는 Vagrantfile에 프로비저닝 정보로 작성하거나, 별도로 폴더를 싱크하여 작업내용을 저장시켜야 한다.
vagrant halt
가상머신 삭제 / Vagrant Box 삭제
vagrant destroy
vagrant box remove ubuntu/focal
기본적인 예시
3개의 우분투 가상머신 생성하기
3개의 우분투 가상머신을 셋팅하고, 프로비저닝 명령어를 통해 HTTP 서버를 띄우고 종료시킬 수 있음을 확인해본다.
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
(1..3).each do |i|
config.vm.define "ubuntu#{i}" do |cfg|
cfg.vm.box = "ubuntu/focal64"
cfg.vm.box_version = "20240821.0.1"
cfg.vm.provider "virtualbox" do |vb|
vb.name = "ubuntu#{i}"
vb.cpus = 2
vb.memory = "1024"
end
cfg.vm.network "private_network", ip: "192.168.33.#{10 + i}"
cfg.vm.network "forwarded_port", guest: 8000, host: 8080 + i, host_ip: "127.0.0.1"
cfg.vm.synced_folder "./data", "/vagrant_data"
cfg.vm.synced_folder ".", "/vagrant", disabled: true
cfg.vm.provision "shell", name:"init", path:"init.sh"
cfg.vm.provision "shell", name:"start_server", run:"never", inline: <<-SHELL
echo "Starting simple HTTP server..."
python3 -m http.server 8000 &
echo "Server started on port 8000"
SHELL
cfg.vm.provision "shell", name:"stop_server", run:"never", inline: <<-SHELL
echo "Stopping simple HTTP server..."
pkill -f "python3 -m http.server"
echo "Server stopped."
SHELL
end
end
end
init.sh
#!/bin/bash
echo "Hello, Vagrant! $HOSTNAME" > ./index.html
apt-get update
apt-get install -y python3 python3-pip
echo "Setup complete."
프로비저닝 명령 내리기
vagrant provision --provision-with start_server
vagrant provision --provision-with stop_server