YOUNG-JIN.OH
웃어라. 온 세상이 너와 함께 웃을 것이다.
울어라. 너 혼자만 울게 될 것이다.

Vagrantfile 설정

참고 사이트:

VirtualBox에서 직접 가상머신을 추가하면서 하드웨어를 설정하고 운영체제를 설치했던 내용을 Vagrantfile을 구성해서 코드 상으로 가상머신을 만들어 봅니다.

# 선행작업
$ vagrant plugin install vagrant-disksize

적당한 디렉토리를 생성한 다음 Vagrantfile 을 작성합니다.

$ vi Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.box_check_update = false
  config.vm.provider "virtualbox" do |vb|
    vb.name = "Ubuntu Server 18.04-2"
    vb.memory = 2048
    vb.cpus = 2
    vb.gui = false
  end
  config.vm.hostname = "dev-server"
  config.disksize.size = "10GB"
  config.vm.synced_folder "./", "/vagrant", disabled: true
  config.vm.network "public_network", bridge: "en0: Wi-Fi (AirPort)", ip: "192.168.7.101"
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get upgrade -y
    apt-get dist-upgrade -y
    apt-get autoremove -y
    reboot
  SHELL
end

저장후 실행합니다.

$ vagrant up
Bringing machine ‘default’ up with ‘virtualbox’ provider…
==> default: Importing base box ‘ubuntu/bionic64’…
==> default: Matching MAC address for NAT networking…
==> default: Setting the name of the VM: Ubuntu Server 18.04-2
==> default: Clearing any previously set network interfaces…
==> default: Preparing network interfaces based on configuration…
default: Adapter 1: nat
default: Adapter 2: bridged
==> default: Forwarding ports…
default: 22 (guest) => 2222 (host) (adapter 1)

==> default: Running ‘pre-boot’ VM customizations…
==> default: Booting VM…
==> default: Waiting for machine to boot. This may take a few minutes…
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key

… (생략1)…
==> default: Setting hostname…
==> default: Configuring and enabling network interfaces…
==> default: Running provisioner: shell…
default: Running: inline script
… (생략2)…

Vagrant 자체적으로 가상머신과 통신하기 위해 Private Network를 NAT로 구성하며, ssh 포트 포워딩 설정이 자동으로 생성됩니다. (22 => 2222) 저는 192.168.7.101 이라는 새로운 IP로 접근할 수 있는 어댑터를 Bridge로 추가하여 Public Network를 구성하였습니다. ssh 접속을 위해 private key가 자동으로 생성됩니다.

실행결과를 보면, 네트워크 어댑터가 2개가 생성이 됩니다. 어댑터 1은 Vagrant 자체에서 사용하는 용도로 삭제할 수 없습니다. 그 외 이름, 기본메모리, 프로세서, 하드용량 등이 지정한 대로 만들어졌습니다. 별다른 설정이 없으면 호스트의 Vagrantfile 이 있는 위치와 가상머신의 /vagrant 디렉토리가 공유(synced_folder)가 되는데, 저는 사용하지 않기 위해 disabled를 하였기 때문에 설정되지 않았습니다.

$ vagrant ssh
vagrant@dev-server:~$ ifconfig

enp0s3: flags=4163 mtu 1500
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::c4:57ff:fe7d:c4fe prefixlen 64 scopeid 0x20
ether 02:c4:57:7d:c4:fe txqueuelen 1000 (Ethernet)
RX packets 47223 bytes 54962054 (54.9 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10056 bytes 746562 (746.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

enp0s8: flags=4163 mtu 1500
inet 192.168.7.101 netmask 255.255.255.0 broadcast 192.168.7.255
inet6 fe80::a00:27ff:feba:f0ca prefixlen 64 scopeid 0x20
ether 08:00:27:ba:f0:ca txqueuelen 1000 (Ethernet)
RX packets 1004 bytes 88714 (88.7 KB)
RX errors 0 dropped 818 overruns 0 frame 0
TX packets 19 bytes 1426 (1.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
…(생략)…

처음 가상머신이 켜졌을 때 provisioning이 구동되어 Shell Script가 실행되면서 apt-get 패키지 업데이트가 진행되었는데요. (생략2 부분) 필요하면 다시 실행할 수 있습니다.

# Provision 실행
$ vagrant provision

==> default: Running provisioner: shell…
default: Running: inline script
default: Hit:1 http://archive.ubuntu.com/ubuntu bionic InRelease
default: Get:2 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
default: Get:3 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
default: Get:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
default: Fetched 252 kB in 3s (80.1 kB/s)
default: Reading package lists…
default: Reading package lists…
default: Building dependency tree…
default:
default: Reading state information…
default: Calculating upgrade…
default: 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
default: Reading package lists…
default: Building dependency tree…
default: Reading state information…
default: Calculating upgrade…
default: 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
default: Reading package lists…
default: Building dependency tree…
default:
default: Reading state information…
default: 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.