실제 서비스는 웹 서버, DB 서버 등 여러 서버로 구성된다. 하나의 Vagrantfile에서 여러 VM을 정의하면 이런 멀티 서버 환경을 로컬에서 재현할 수 있다.
Vagrantfile을 여러 개 만들어도 되지만, 하나의 파일로 관리하면 VM 간 같은 네트워크 대역을 쉽게 공유할 수 있고 vagrant up 한 번으로 전체 환경을 올릴 수 있다.
참고: Vagrant 공식 Multi-Machine 문서
config.vm.define으로 각 VM을 정의한다.
Vagrant.configure("2") do |config|
config.vm.define "web01" do |web01|
web01.vm.box = "bento/ubuntu-22.04"
web01.vm.hostname = "web01"
web01.vm.network "private_network", ip: "192.168.31.10"
end
config.vm.define "web02" do |web02|
web02.vm.box = "bento/ubuntu-22.04"
web02.vm.hostname = "web02"
web02.vm.network "private_network", ip: "192.168.31.11"
end
config.vm.define "db01" do |db01|
db01.vm.box = "bandit145/centos_stream9_arm"
db01.vm.hostname = "db01"
db01.vm.network "private_network", ip: "192.168.31.12"
db01.vm.provision "shell", inline: <<-SHELL
yum install -y wget unzip mariadb-server -y
systemctl start mariadb
systemctl enable mariadb
SHELL
end
end
각 VM마다 다른 box를 사용할 수 있고, 개별적으로 provisioning을 설정할 수 있다.
VM 이름을 함께 입력하면 특정 VM만 제어할 수 있다.
vagrant up web01 # web01만 생성/실행
vagrant ssh web01 # web01에 접속
vagrant halt web01 # web01만 중지
vagrant destroy web01 # web01만 삭제
이름 없이 실행하면 전체 VM에 적용된다.