気軽に!vagrantとVirtualBox

環境

  • インストール
    • Vagrant 2.0.1
    • VirtualBox 5.1.30

解説

概要

Vagrantは、仮想マシンを簡単に作成・破棄できるツール プラグインを入れればDocker,AWSなどもVagrantのCLIから使うことが可能 今回は比較的導入のハードルの低いVirtualBoxで行う

Vagrantのつかいかた

  1. vagrantをダウンロード、インストール
  2. 仮想化ソフト(VirtualBox等)をインストール
  3. vagrant用のディレクトリを作成(以下./vagと呼称)
  4. ./vagの下に、作成する仮想マシンの名前を付けたディレクトリを作成(以下./vag/vmと呼称)
  5. ./vag/vmディレクトリ内へターミナル,コマンドプロンプトで移動。
  6. vagrant initコマンドを実行
  7. ./vag/vm内にVagrantfileが作成されているので、これを用途に応じて書き換え
  8. vagrant startコマンドで起動
  9. vagrant haltコマンドでシャットダウン
  10. 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 : ブリッジネットワーク

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/configssh fooで接続できるようになる

vagrant global-status

  • VMの状態を確認できる
  • 信頼性が高くない(すでに存在しないVMが残っている場合がある)
    • 情報を更新する: vagrant global-config --prune

vagrant box list

  • ローカルに保存されているbox一覧の確認

vagrant plugin

  • プラグインの管理
    • list
      • 一覧表示
    • install [プラグイン名]
      • プラグインのインストール

ハンズオン

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と実行時に明示的に対象を指定できる。