참고
버추얼 박스, 베이그런트 설치
Vagrant
NOTE
Vagrant는 VirtualBox와 같은 가상화 소프트웨어를 코드로 조작하기 위한 소프트웨어다!
vagrant 파일구조
가상화 머신의 IAC를 지원해준다 생각하자
설정 스크립트를 기반으로 특정 환경의 가상머신을 생성할 수 있으며, 개발환경을 공유할 수 있고 Ruby로 개발되었다.
vagrant init # vagrantfile 파일 생성
vagrant up # vagrantfile을 바탕으로 프로비저닝
vagrant halt # 가상머신 종료
vagrant ssh # 가상머신 ssh 접속
vagrant provision # 가상머신 설정 변경/적용
Ruby
복사
기본 동작 명령어
Vagrant.configure("2") do |config|
config.vm.box = "base"
end
Ruby
복사
Vagrantfile 기본코드
•
Box: VM의 베이스 이미지, 운영체제의 필수 소프트웨어가 포함된다.
Vagrant - vm.define(멀티-머신 환경)
NOTE
Vagrant.configure("2") do |config|
# 1번째 VM
config.vm.define "web" do |web|
web.vm.box = "ubuntu/bionic64"
end
# 2번째 VM
config.vm.define "db" do |db|
db.vm.box = "ubuntu/bionic64"
end
end
Ruby
복사
기본코드
Vagrant - vm.provider(리소스)
NOTE
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
# provider(Virtualbox) 설정
config.vm.provider "virtualbox" do |vb|
vb.name = "vb_name" # 가상머신 이름
vb.memory = 1024 # 메모리
vm.cpus # CPU
end
end
Ruby
복사
기본코드
Vagrant - vm.network
NOTE
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
# 포트 포워딩( 8080 -> 80 )
config.vm.network "forwarded_port", guest: 80, host: 80
# 가상머신이 직접 외부 네트워크 연결가능
config.vm.network "public_network"
# 호스트-가상머신 사설 네트워크 구축
config.vm.network "private_network", ip "192.168.32.10"
end
Ruby
복사
네트워크 코드
•
private ip 범위
◦
10.0.0.0/8
◦
172.16.0.0/12
◦
192.168.0.0/16
Vagrant - vm.provision
NOTE
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
# 쉘 스크립트 프로비저닝
config.vm.provision "shell", inline:
inline: "echo Hello, World"
# 쉘 스크립트 코드블록
$script = <<-'SCRIPT'
echo I am provisioning...
date > /etc/vagrant_provisioned_at
'SCRIPT'
config.vm.provision "shell" inline: $script
# 외부 스크립트
config.vm.provision "shell", path: "script.sh"
# Ansible 사용
config.vm.provision "ansible" do |ansible|
ansible.palybook = "playbook.yaml"
end
Ruby
복사
기본코드
Vagrant는 프로비저닝 설정에 따라 자동으로 필요한 도구(Ansible, Chef 등)을 가상머신 내에 설치하거나 호스트 머신에서 실행한다.
Vagrant - vm.disk
Vagrant - 프로그래밍(변수, 반복, 조건)
NOTE
Vagrant.configure("2") do |config|
# 변수 정의
box_image = "ubuntu/bionic64"
# 변수 사용
config.vm_box = box_image
end
Ruby
복사
변수 사용
Vagrant.configure("2") do |config|
(1..3).each do |i|
config.vm.define "web#{i}" do |web|
web.vm.box = "ubuntu/bionic64"
web.vm.network "private_network", ip: "192.168.33.#{10+i}"
end
end
end
Ruby
복사
반복문
Vagrant.configure("2") do |config|
if ENV[
end
Ruby
복사
조건문