앞 페이지에서 Vagrant 가 무엇이고 어떻게 동작을 하는지에 대해서 전반적인 내용을 살펴보았습니다.
(https://cafe-jun12.tistory.com/33)
이번 페이지에서는 vagrantfile 의 기본적인 작성 방법에 대해서 설명하겠습니다.
Vagrant Project Struture
프로젝트의 최상위 디렉토리에서 'vagrant init' 명령어를 입력하였을때 vagrantfile 이 생성되는것을 볼수 있습니다.이것은 두가지 의미가 있습니다.
- 최상위 디렉토리로 부터 트리형식으로 Vagrant 의 많은 구성 옵션이 구성된다는것을 의미합니다. 자세히 말해서 프로젝트를 실행하는데 필요한 VM에 대한 정보 및 논리적인 리소스 자원 관련 정보 및 권한등이 이 디렉토리에서부터 시작이 된다는것
- 최상위 디렉토리로 부터 Vagrant 관련 설정의 초기화 합니다. (기존의 Vagrantfile에 설정이 있다면 Override 합니다.)
위에서 말한 두가지 의미는 매우 중요합니다. Vagrant 는 최상의 디렉토리를 VM 생성 및 관리를 해야할 프로젝트로 인식을 합니다.
위 그림을 보면 /project1, /project2, /project3 가 있고 각 디렉토리마다 vagrant init 명령어를 입력하여 Vagrantfile 을 가지고 있다는것을 가정해봅시다. /project1 위치에서 vagrant up 을 입력하여 VM 이 생성 되었다면 vagrant status 로 VM의 상태를 당연히 확인할 수가 있을것입니다. 그러면 /project2 위치에서 vagrant status 명령어를 입력했다면 /project1 에서 생성한 VM 상태를 확인해 볼수 있을까요 ?
여기서 생각을 해봐야 하는 중점적인 내용은 'Vagarnt 가 어떻게 디렉토리를 관리하냐에 대한 내용'입니다. Vagrant 는 최상위 디렉토리로 부터 VM을 관리하기 때문에 /project1 에서 만든 VM은 /project2 에서는 확인할수가 없습니다.
Vagrantfile LookUp path
Vagrant 가 최상위 디렉토리에서 트리형식으로 VM을 관리한다는 내용을 알았습니다. 그렇다면 최상위 디렉토리로 부터 하위디렉토리에 Vagrantfile이 여러개가 있다면 어떻게 될까요 ? Vagrant 는 실제로 여러개의 Vagrantfile을 로드하면서 세팅을 합니다. 자세히 말해 동일한 설정들이 여러개의 파일에 걸처서 있다면 Override 됩니다. (https://www.vagrantup.com/docs/vagrantfile/)
Vagrantfile 설정
Vagrantfile 의 모든 설정값에 대해서 정리하는것은 시간이 많이걸리고 모든 설정을 다 사용하는것도 아니기 때문에 실습에 필요한 내용에 대한 설정 값을 우선적으로 정리하고 잘 사용하지는 않지만 설명이 필요한 설정의 경우는 따로 정리해 두겠습니다.
설정에 대한 내용을 설명하기 앞써 해당 파일을 실행할때 사용되는 언어는 Ruby 입니다.따라서 VM 정보의 블록을 do ~end 묶어주고 |<name>| 으로 별칭을 설정할수가 있습니다.
만약 고객의 요구 사항이 다음과 과 같다면 다음과 같이 환경을 구축하는거라면 Vagrantfile을 다음과 같이 작성할수 있습니다.
- IP : Public_netowork 는 DHCP 에서 IP를 받아옴
- Hostname : testVagrant
- OS : bento/centos-7.4
- VirtualBox VM Name : Vagrant-VM1
아주 간단한 요구사항입니다. 이것을 Vagrantfile에 명시해보도록 하겠습니다.
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config| // Vagrant 에 대한 정보를 블록으로 정의
config.vm.define :"Vagrant-VM1" do |cfg| // 생성할 VM에 대한 정의
cfg.vm.box = "centos/7" // Vagrant-VM1의 Box를 정의
cfg.vm.provider:virtualbox do |vb| // Vagrant의 provider를 정의
vb.name = "Vagrant-VM1" // VirtualBox에서 표시할 Name 정의
end
cfg.vm.host_name="testVagrant" //VM 의 Hostname을 지정
cfg.vm.synced_folder ".","/vagrant",disable: true // 로컬에 사용할 공유폴더 지정 disable: true 공유폴더를 사용하지 않겠다
cfg.vm.network "public_network"
cfg.vm.network "forwarded_port", guest: 22,host:10000,auto_correct:false,id: "ssh"
end
end
위의 요구사향을 vagrantfile 에 명시를 다음과 같이 하였습니다. 그리고 vagrant up을 할경우 다음과 같이 요구사항에 맞는 VM이 생성된것을 볼수 있습니다.
'Server Infra > Vagrant' 카테고리의 다른 글
[Vagrant ] 1. Vagrant 기초 개념 및 Default VM (Centos 7) 생성 (0) | 2020.01.19 |
---|