Table of Contents | ||||
---|---|---|---|---|
|
Note |
---|
Oracle VirtualBox 본팩은 무료이나, 확장팩의 경우 유료입니다. Extension Pack은 회사의 컴퓨터에 설치하면 안됩니다. |
문서설명
Vagrant는 단일 워크 플로에서 가상 머신 환경을 구축하고 관리하기위한 도구이다.
...
Puppet , jenkins 등과 결합을 하여 프로비저닝, 설정관리, CI 테스트등을 위한 효율적인 환경 구성이 가능하다.
Virtualbox 설치
가상화 프로그램 설치 전 BIOS 에서 가상화 관련한 기능을 활성화 해야 함.
...
virtualbox 설치 후 환경설정-확장에서 Oracle VM VirtualBox Extension Pack 도 설치를 하는 것이 좋음. Support for USB 2.0 devices, VirtualBox RDP and PXE boot for Intel cards.Oracle VM VirtualBox Extension Pack 설치시 root 권한이 필요하므로 sudo 로 Virtualbox 실행하여 UI에서 File-preference-Extensions 에서 설치하면 되됨. 설치 후에는 원하는 사용자로 실행하면됨.→ 회사에서 Extention Pack 설치하면 Oracle 에서 감사조치 날아옴.
Ubuntu 의 경우 https://www.virtualbox.org/wiki/Linux_Downloads 를 참고하여 /etc/apt/sources.list에 virtualbox관련한 저장소를 추가한 후 설치하는 것이 편리함.
|
네트워크 구성을 NAT 로 설정을 함.
Windows 의 경우 다른 드라이브에 VM을 두려고 할 경우 파일 - 환경설정 - 일반에서 기본 머신 폴더를 변경을 하면 됨. 안 그러면 C 드라이브가 꽉 참.
Vagrant 설치 및 사용
...
Vagrant 실습은 https://learn.hashicorp.com/collections/vagrant/getting-started 이용하는 것이 좋음.
윈도우용 ssh 프로그램 설치
윈도우7 에서 설치 후 vagrant 명령어 실행시 virtualbox 를 찾지 못했음. PATH 환경변수에 virtualbox 경로를 추가해 주어야 함.
...
windows 의 경우 ssh 접속을 위해서 cygwin, minGW, Git 등의 SSH 클라이언트를 미리 설치해 두는 것이 좋음. http://git-scm.com/ 설치하면 GIT bash 가 있음.
vagrant 설치
https://www.vagrantup.com/ 설치.
...
|
vagrant 사용
Vagrant 초기화. 여기에서 지정한 이미지가 로컬 pc에 없으면 자동으로 https://app.vagrantup.com/boxes/search 에서 찾아 다운로드를 받는다. 사전에 만들어놓은 VM을 가져와서 사용하는 것임.
...
git-bash 등의 커맨드라인에서 vagrant init 를 실행하면 현재의 디렉토리에서 작업을 하고 Vagrantfile 파일을 만든다. 그러므로 적절한 디렉토리로 이동을 해서 작업하는 것이 관리상 용이할 것 같다.
vagrant 설정 변경하기
vagrant init 를 하면 명령을 실행한 해당 디렉토리에 Vagrantfile 파일이 생긴다. 이 파일을 수정하면 vagrant up을 할 때 여러가지 작업을 조합할 수 있다.
Vagrant 주요 옵션
vm.box
: 사용할 이미지
vm.network :forwarded_port
: 호스트의 port를 VM gues의 지정 포트로 포워드
...
Code Block |
---|
Vagrant.configure("2") do |config| config.vm.box = "ubuntu/focal64" config.vm.network :forwarded_port, guest: 80, host: 4567 config.vm.network "private_network", ip: "192.168.33.100" # config.vm.provision "shell", path: "test.sh" config.vm.provision "shell", inline: <<-SHELL apt-get update apt-get install -y nginx echo "test" > /var/www/html/index.html SHELL config.vm.hostname = 'www.example.com' end |
vagrant provisioning - shell
처음으로 vagrant up을 할 때 프로비저닝이 실행된다. 첫 가동 이후에는 vagrant up --provision 을 지정해서 가동하거나 가상 서버 가동 후에 vagrant provisoin 을 실행하면 프로비저닝이 가능하다.
...
Code Block |
---|
$ vim Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "ubuntu/focal64" config.vm.provision "shell", inline: <<-SHELL apt-get update apt-get install -y apache2 SHELL end $ vagrant provision |
vagrant provisioning - Puppet
아래는 vagrant up 을 할 때 puppet 을 설치하고 puppet 을 통하여 /etc/motd 파일을 변경하는 예이다.
...
Vagrantfile 파일은 동일하게 유지하고 프로비저닝 부분만 따로 스크립트로 관리하는 것이 더 편리할 것 같다.
vagrant provisioning - Ansible
Vagrant + ansible 조합하기
Vagrant 에서 ansible 직접 지원하는 구문이 있을 건데 아무튼 아래와 같이 작동은 함.
...
Code Block |
---|
➜ vagrant_template git:(ansible) ✗ vagrant provision ==> default: Running provisioner: shell... default: Running: inline script default: [WARNING]: provided hosts list is empty, only localhost is available. Note that default: the implicit localhost does not match 'all' default: default: PLAY [localhost] *************************************************************** default: default: TASK [Gathering Facts] ********************************************************* default: ok: [localhost] default: default: TASK [init : Make app directory] *********************************************** default: ok: [localhost] default: default: PLAY RECAP ********************************************************************* default: localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
네트워크 설정 및 vagrant share 이용하여 환경 공유하기
포트 전달 구성(forwarded_port)을 하면 편리하게 VM의 특정 port에 접근할 수 있다.
...
Code Block |
---|
$ curl http://5292-119-206-125-157.ngrok.io |
여러 개의 VM 만들기
config.vm.define 이용하기 : https://www.vagrantup.com/docs/multi-machine/
...
Code Block |
---|
DOMAIN="example.com" # ubuntu 20.0.4 ubuntu_box="ubuntu/focal64" common_bootstrap="bootstrap.sh" Vagrant.configure(2) do |config| config.vm.define "ubuntu01" do |ubuntu| ubuntu.vm.box = "#{ubuntu_box}" ubuntu.vm.network "private_network", ip: "192.168.33.12" ubuntu.vm.hostname = "ubuntu01.#{DOMAIN}" ubuntu.vm.provision :shell, path: "#{common_bootstrap}" ubuntu.vm.provider "virtualbox" do |vb| vb.memory = "1024" end end config.vm.define "ubuntu02" do |ubuntu| ubuntu.vm.box = "#{ubuntu_box}" ubuntu.vm.network "private_network", ip: "192.168.33.13" ubuntu.vm.hostname = "ubuntu02.#{DOMAIN}" ubuntu.vm.provision :shell, path: "#{common_bootstrap}" end end |
Vagrant plugins
https://www.vagrantup.com/docs/cli/plugin.html
...
vagrant-vbguest : automatically update VirtualBox guest additions if necessary . VirtualBox guest addions 을 업데이트해야 /vagrant 디렉토리 공유가 되는 경우가 있음. OS별로 좀 다른 듯 함. auto_update, no_install 등의 옵션이 필요한 경우가 있음. 보통 auto_update 는 필요하지 않은 듯 한데 host os+guest os 에 따라서 설치안해도 되는 경우가 있음.vagrant-hostmaner : /etc/hosts를 자동으로 설정해주는 기능인데 여러 개의 VM으로 테스팅을 하는 경우 유용함. 최소한
config.hostmanager.manage_host = true
옵션을 주어야 작동하였음. https://github.com/devopsgroup-io/vagrant-hostmanager설치 : $ vagrant plugin install vagrant-hostmanager
사용 : Vagrantfile 에 다음의 설정 추가
Code Block config.hostmanager.manage_host = true config.vm.hostname = 'www.example.com'
vagrant 기타 기능
폴더 공유하기
자신만의 box 만들기
주의 및 참고사항
CentOS vagrant image 릴리즈한 것에 몇가지 조심해야 할 부분 있음.
...
Code Block | ||
---|---|---|
| ||
Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.network "forwarded_port", guest: 80, host: 8081 config.vm.network "public_network", ip: "192.168.0.2" # 이 부분 추가 # 수동으로 rsync를 실행시키면 인터럽트를 수신할 때까지 프로세스를 종료하지 않으므로 백그라운드로 실행 config.trigger.after :up do |trigger| trigger.info = "rsync auto" trigger.run = {inline: "bash -c 'vagrant rsync-auto &'"} end config.vm.synced_folder ".", "/vagrant", type: "rsync" end |
참고자료
https://docs.vagrantup.com/v2/ 에서 소개하는 책은 Vagrant: Up and Running 이며 인터넷에서 다운로드 받을 수 있음.
https://learn.hashicorp.com/collections/vagrant/getting-started 에서 나온대로 실습
...