メモ書き

自分が後で見直すためにつけている作業のメモ書きです.それ以上の意味はありません

vagrant について

Vagrantとは

  • 開発環境を構築するためのツール.
  • 仮想マシンイメージの作成を自動化できる.

Vagrantを使う理由

www.vagrantup.com

  • Vagrant は作業環境を提供.生産性と柔軟性を向上
    • 簡単に設定可能
    • 再生成可能
    • ポータブル
  • マシンを各種プロバイダ上に提供
  • マシン上でソフトウェアのインストールや設定を自動的に行うために,業界標準のプロビジョニングツールを使用可能
    • シェルスクリプト
    • Chef
    • Puppet
    • "vagrand ssh" による手動実施も可能(ただし自動化した方が繰り返し実行しやすい)
  • プロビジョニングが動くタイミング
    • 環境を生成する初回の vagrant up でプロビジョニングが実行
    • 環境が既に生成済で,レジューム中またはブートアップ中の場合は --provision 指定しない限り実行しない
    • vagrant provision が実行中の環境で使われたとき
    • vagrant reload --provision が呼ばれたとき
      • --provision フラグは強制的に実行させるために必要
    • プロビジョニングを明示的に実行させない場合は --no-provision を指定する
  • Vagrant で得すること
    • 依存性やその設定を単一で廃棄可能な環境に分離できる
      • 他のツールをいけにえに捧げる必要もない
    • 誰かが一つの Vagrantfile を生成したら,vagrant up を実行する必要があるだけ
      • これだけですべてがインストールされ,設定される
    • 同じ環境が作れるので,どの環境でメンバが作業していても同じ環境で実行できる

基本操作

既定の Vagrantfile の生成

vagrant init 
  • 基本的な要素を学ぶのに良い
    • 例えば vagrant が box を区別する際に参照する名前 config.vm.box など.
    • 他にも,ポートフォワーディングやプロビジョニング手順などの例が含まれる
  • vagrant init にパラメータとして box名を与えると,config.vm.box の値をその名称に置き換えた Vagrantfile を生成する
$ vagrant init hashicorp/precise64
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

この場合,Vagrantfile を編集せずにすぐupができる

既存の box を追加

vagrant box add 
$ vagrant box add hashicorp/precise64 

Atlas以外のURLやローカルディレクトリを指定することも可能

ボックス一覧を表示

vagrant box list 

ボックスを更新

vagrant box update 

仮想マシン(VM)を開始(または再開)する

vagrant up 
  • 存在しなければ box を取得した後 VM を生成して起動する
  • suspend 後の復帰にも使う

shutdown プロセスを経た後,VMを停止

vagrant halt 

現在の VM の状態を表示

vagrant status 

全ての VM の状態を表示

vagrant global-status 

現在の VM を削除

vagrant destroy 
  • virtualboxVM 一覧からも除去される
  • box は削除されない

box を削除

vagrant box remove 

動作中の vagrant 環境をboxへパッケージング

vagrant package 

試してみる

www.vagrantup.com

ちなみにWindows環境の場合,CLIvagrant が使えるようになるだけで,インストールしてもスタートメニューには出てこない

準備

  • プロバイダとして使用するソフトウェアをインストールしておく

Vagrantfile の取得

  • vagrant init で生成するが,ここではCore OS を入れてみる.CoreOS用 Vagrantfile は用意されているものを利用する

github.com

  • Vagrantfile の clone
$ git clone https://github.com/coreos/coreos-vagrant 
$ cd coreos-vagrant
$ vagrant up
$ vatrant ssh

仮想マシンが開始される.何が起きているかは直接見えない

$ vagrant ssh 

VM内では自由に操作可能.ただし設定によってはホストとディレクトリ共有している場合を考慮してファイル操作に注意する必要がある.

CoreOS の使い方については,こちらから
coreos.com

  • VMの削除
$ vagrant destroy
    core-01: Are you sure you want to destroy the 'core-01' VM? [y/N] y
==> core-01: Forcing shutdown of VM...
==> core-01: Destroying VM and associated drives...

destroy すると virtualbox仮想マシン一覧から消える

  • boxの削除
$ vagrant box remove coreos-alpha
Removing box 'coreos-alpha' (v1010.1.0) with provider 'virtualbox'...

up動作の比較

初回の up , halt 後の up, destroy からの up を比較

初回(または box remove 後)の up

ネットワークから再度 coreos-alpha という box が取得される
virtualbox にも仮想マシンが追加され,仮想マシンが起動される

$ vagrant up
Bringing machine 'core-01' up with 'virtualbox' provider...
==> core-01: Box 'coreos-alpha' could not be found. Attempting to find and install...
    core-01: Box Provider: virtualbox
    core-01: Box Version: >= 0
==> core-01: Loading metadata for box 'https://storage.googleapis.com/alpha.release.core-os.net/amd64-usr/current/coreos_production_vagrant.json'
    core-01: URL: https://storage.googleapis.com/alpha.release.core-os.net/amd64-usr/current/coreos_production_vagrant.json
==> core-01: Adding box 'coreos-alpha' (v1029.0.0) for provider: virtualbox
    core-01: Downloading: http://alpha.release.core-os.net/amd64-usr/1029.0.0/coreos_production_vagrant.box
    core-01:
    core-01: Calculating and comparing box checksum...
==> core-01: Successfully added box 'coreos-alpha' (v1029.0.0) for 'virtualbox'!
==> core-01: Importing base box 'coreos-alpha'...
==> core-01: Matching MAC address for NAT networking...
==> core-01: Checking if box 'coreos-alpha' is up to date...
==> core-01: Setting the name of the VM: coreos-vagrant_core-01_1461832780448_69725
==> core-01: Clearing any previously set network interfaces...
==> core-01: Preparing network interfaces based on configuration...
    core-01: Adapter 1: nat
    core-01: Adapter 2: hostonly
==> core-01: Forwarding ports...
    core-01: 22 (guest) => 2222 (host) (adapter 1)
==> core-01: Running 'pre-boot' VM customizations...
==> core-01: Booting VM...
==> core-01: Waiting for machine to boot. This may take a few minutes...
    core-01: SSH address: 127.0.0.1:2222
    core-01: SSH username: core
    core-01: SSH auth method: private key
==> core-01: Machine booted and ready!
==> core-01: Setting hostname...
==> core-01: Configuring and enabling network interfaces...

suspend 後の up

$ vagrant suspend
==> core-01: Saving VM state and suspending execution...

$ vagrant up
Bringing machine 'core-01' up with 'virtualbox' provider...
==> core-01: Checking if box 'coreos-alpha' is up to date...
==> core-01: Resuming suspended VM...
==> core-01: Booting VM...
==> core-01: Waiting for machine to boot. This may take a few minutes...
    core-01: SSH address: 127.0.0.1:2222
    core-01: SSH username: core
    core-01: SSH auth method: private key
==> core-01: Machine booted and ready!
==> core-01: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> core-01: flag to force provisioning. Provisioners marked to run always will still run.

先ほどの初回の up と比べると

==> core-01: Setting hostname...
==> core-01: Configuring and enabling network interfaces...

の部分が

==> core-01: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> core-01: flag to force provisioning. Provisioners marked to run always will still run.

となり,provisioning が省略されている.

halt からの up

$ vagrant halt
==> core-01: Attempting graceful shutdown of VM...

$ vagrant up
Bringing machine 'core-01' up with 'virtualbox' provider...
==> core-01: Checking if box 'coreos-alpha' is up to date...
==> core-01: Clearing any previously set forwarded ports...
==> core-01: Clearing any previously set network interfaces...
==> core-01: Preparing network interfaces based on configuration...
    core-01: Adapter 1: nat
    core-01: Adapter 2: hostonly
==> core-01: Forwarding ports...
    core-01: 22 (guest) => 2222 (host) (adapter 1)
==> core-01: Running 'pre-boot' VM customizations...
==> core-01: Booting VM...
==> core-01: Waiting for machine to boot. This may take a few minutes...
    core-01: SSH address: 127.0.0.1:2222
    core-01: SSH username: core
    core-01: SSH auth method: private key
==> core-01: Machine booted and ready!
==> core-01: Setting hostname...
==> core-01: Configuring and enabling network interfaces...
==> core-01: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> core-01: flag to force provisioning. Provisioners marked to run always will still run.

provisioning が省略されているのは同じ
suspend と異なり,起動時の挙動なのでブート動作が追加される.

==> core-01: Clearing any previously set forwarded ports...
==> core-01: Clearing any previously set network interfaces...
==> core-01: Preparing network interfaces based on configuration...
    core-01: Adapter 1: nat
    core-01: Adapter 2: hostonly
==> core-01: Forwarding ports...
    core-01: 22 (guest) => 2222 (host) (adapter 1)
==> core-01: Running 'pre-boot' VM customizations...

初回の up と異なり,ネットワークからの box 取得は省略される.