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