반응형

앞 페이지에서 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이 생성된것을 볼수 있습니다.

 

 

 

 

반응형
cafe-jun12