vagrant について
Vagrantを使う理由
- Vagrant は作業環境を提供.生産性と柔軟性を向上
- 簡単に設定可能
- 再生成可能
- ポータブル
- マシン上でソフトウェアのインストールや設定を自動的に行うために,業界標準のプロビジョニングツールを使用可能
- プロビジョニングが動くタイミング
基本操作
既定の Vagrantfile の生成
vagrant init
$ 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
- 既存のBOXはAtlasのサイトから検索可能
- 以下は追加例.https://app.vagrantup.com/ubuntu/boxes/precise64 から box が追加される.
$ vagrant box add hashicorp/precise64
Atlas以外のURLやローカルディレクトリを指定することも可能
ボックス一覧を表示
vagrant box list
ボックスを更新
vagrant box update
box を削除
vagrant box remove
試してみる
ちなみにWindows環境の場合,CLIで vagrant が使えるようになるだけで,インストールしてもスタートメニューには出てこない
準備
- プロバイダとして使用するソフトウェアをインストールしておく
- ここでは VirtualBox を使用
Vagrantfile の取得
- vagrant init で生成するが,ここではCore OS を入れてみる.CoreOS用 Vagrantfile は用意されているものを利用する
- Vagrantfile の clone
$ git clone https://github.com/coreos/coreos-vagrant
- 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 取得は省略される.