호스트(내 PC)의 디렉토리와 VM 내부의 디렉토리를 양방향으로 동기화하는 기능이다. 한쪽에서 파일을 만들면 다른 쪽에도 즉시 반영된다.
vagrant up을 하면 Vagrantfile이 있는 디렉토리가 VM의 /vagrant에 자동으로 동기화된다.
호스트: ~/myvms/ ←→ VM: /vagrant/ ├── Vagrantfile └── README.md
별도 설정 없이도 동작하는 기본 동기화다.
Vagrantfile에 config.vm.synced_folder를 추가하면 원하는 경로끼리 연결할 수 있다.
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-22.04"
# 호스트의 ./scripts → VM의 /opt/scripts
config.vm.synced_folder "./scripts", "/opt/scripts"
config.vm.network "private_network", ip: "192.168.31.10"
config.vm.network "public_network", bridge: "en0: Ethernet"
config.vm.provider "vmware_desktop" do |wm|
wm.gui = true
wm.memory = 1024
wm.cpus = 2
end
end
# 1. vagrant up 후 SSH 접속
vagrant ssh
# 2. root 계정으로 전환
sudo -i
# 3. VM에서 파일 생성
cd /opt/scripts
touch file{1..10}.sh
# 4. 호스트 PC의 ./scripts/ 디렉토리를 확인하면 파일이 생성되어 있음
호스트에서 파일을 만들어도 VM에 반영되고, VM에서 만들어도 호스트에 반영된다. 양방향 동기화다.
vagrant up을 실행하면 프로젝트 폴더에 .vagrant/ 디렉토리가 자동 생성된다.
my-project/ ├── Vagrantfile ├── .vagrant/ ← VM ID, SSH 키 등 내부 관리 정보 │ └── machines/ │ └── default/ └── scripts/ ← synced_folder로 동기화되는 디렉토리
Vagrant가 VM 상태를 추적하기 위해 사용하는 내부 폴더로, 직접 수정할 일은 없다. .gitignore에 추가해야 한다.
가장 흔한 패턴이다. 호스트의 VS Code로 편집하면 VM에 즉시 반영되므로, VM에 에디터를 설치할 필요가 없다.
호스트에서 설정 스크립트를 작성/관리하고, VM에서 바로 실행할 수 있다. Vagrant의 다음 토픽인 Provisioning과 직접 연결되는 패턴이다.
이 개념은 Docker에서 그대로 이어진다.
# Docker Compose
volumes:
- ./src:/app/src
문법만 다를 뿐 "호스트와 게스트 사이의 파일 공유"라는 개념은 동일하다.