気軽に!vagrantとVirtualBox
環境
- インストール
- Vagrant 2.0.1
- VirtualBox 5.1.30
解説
概要
Vagrantは、仮想マシンを簡単に作成・破棄できるツール プラグインを入れればDocker,AWSなどもVagrantのCLIから使うことが可能 今回は比較的導入のハードルの低いVirtualBoxで行う
Vagrantのつかいかた
- vagrantをダウンロード、インストール
- 仮想化ソフト(VirtualBox等)をインストール
- vagrant用のディレクトリを作成(以下
./vag
と呼称) ./vag
の下に、作成する仮想マシンの名前を付けたディレクトリを作成(以下./vag/vm
と呼称)./vag/vm
ディレクトリ内へターミナル,コマンドプロンプトで移動。vagrant init
コマンドを実行./vag/vm
内にVagrantfile
が作成されているので、これを用途に応じて書き換えvagrant start
コマンドで起動vagrant halt
コマンドでシャットダウンvagrant destroy
コマンドで削除
Vagrantfile解説
config.vm.box = "[box名]"
- 作る仮想マシンのイメージを指定
- (例)
config.vm.box = "ubuntu/xenial64"
config.vm.network = "[ネットワーク種別]", ip, "[IPアドレス]"
- NICを追加し割り当てるネットワークを指定
- (例)
config.vm.network = "private_network", ip: "192.168.33.10"
- ネットワーク種別
- private_network: ホストオンリーアダプタ
- ホストとVM、VM同士の通信ができる
- private network +
virtualbox__intnet: "network_name"
: 内部ネットワーク- 指定の名前で内部ネットワークを作成、ホストとVMは繋がらないがVM同士は繋がる
- public_network : ブリッジネットワーク
- private_network: ホストオンリーアダプタ
- ネットワーク種別
config.vm.hostname = "[ホスト名]"
- ホスト名を設定する
- (例)
config.vm.hostname = "testname"
config.vm.provision
- 初回起動時にプロビジョニングを行う
- 後述のハンズオンを参照
コマンド解説
vagrant (...) --help
--help
オプションをつけると各コマンド、サブコマンドのヘルプが見られる- (例)
vagrant init --help
vagrant plugin install --help
vagrant init
- Vagrantfileが作成される
- このファイルの内容をもとに仮想マシンが作成される
- 作成時にboxイメージを指定することもできる
vagrant init ubuntu/xenial64
-m
オプションでコメント行なしのVagrantfileを作成できる
vagrant up
- VMの作成・起動
vagrant halt
- VMのシャットダウン
vagrant destroy
- VMの削除
vagrant reload
- (Vagrantfileをもとに)VMを再設定
- provisionは適用されない
- 適用する場合:
vagrant reload --provision
- 適用する場合:
vagrant ssh
- VMにSSH接続
vagrant ssh-config
- sshの設定情報を標準出力
- リダイレクトでファイルに保存できる:
vagrant ssh-config >> $HOME/.ssh/config
ssh default
で接続できる
--host
で出力するHostを設定できるvagrant ssh-config --host foo >> $HOME/.ssh/config
でssh foo
で接続できるようになる
vagrant global-status
- VMの状態を確認できる
- 信頼性が高くない(すでに存在しないVMが残っている場合がある)
- 情報を更新する:
vagrant global-config --prune
- 情報を更新する:
vagrant box list
- ローカルに保存されているbox一覧の確認
vagrant plugin
- プラグインの管理
- list
- 一覧表示
- install [プラグイン名]
- プラグインのインストール
- list
ハンズオン
nginx + Ruby 環境
Vagrantfile
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "ubuntu/xenial64" config.vm.network "private_network", ip: "192.168.33.101" config.vm.provision "shell", privileged: false, inline: <<-SHELL set -i sudo apt-get update sudo apt-get -y install nginx build-essential libssl-dev libreadline-dev git clone https://github.com/rbenv/rbenv.git ~/.rbenv git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc source ~/.bashrc rbenv install 2.4.0 rbenv global 2.4.0 SHELL end
コマンド
vim Vagrantfile vagrant up vagrant ssh
FAQ
Q: VagrantがVirtualBoxをどうやって認識しているのか
- 対応している仮想化ソフトウェアを自動的に探す
- 複数ある場合はVagrantにデフォルトの仮想化ソフトウェアを設定しておくことができる
- Vagrantfileで指定できる
vagrant up --provider=virtualbox
と実行時に明示的に対象を指定できる。