Vagrant公式サイトのGetting Startedを超訳する。
ソフトウェア | バージョン | 備考 |
---|---|---|
OS X | 10.8.5 | |
vagrant | 1.6.0 |
インストール
アンインストール
- Windows:コントロールパネルから削除
- Mac OS X:
/Application/Vagrant
ディレクトリと/usr/bin/vagrant
ファイルを削除する - Linux:
/opt/vagrant
ディレクトリと/usr/bin/vagrant
ファイルを削除する
Vagrantを使うことのメリットを知りたければここを参照。
はじめにVagrantのインストールとVirtualBoxのインストールを済ませておく。
$ vagrant init hashicorp/precise32
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'hashicorp/precise32' could not be found. Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Loading metadata for box 'hashicorp/precise32'
default: URL: https://vagrantcloud.com/hashicorp/precise32
==> default: Adding box 'hashicorp/precise32' (v1.0.0) for provider: virtualbox
default: Downloading: https://vagrantcloud.com/hashicorp/precise32/version/1/provider/virtualbox.box
==> default: Successfully added box 'hashicorp/precise32' (v1.0.0) for 'virtualbox'!
==> default: Importing base box 'hashicorp/precise32'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'hashicorp/precise32' is up to date...
==> default: Setting the name of the VM: vagrant_introduction_default_1399426841280_52495
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/k2works/projects/github/vagrant_introduction
上記のコマンドを実行したらUbuntu 12.04 LTS 32-bitのVirtualBox環境を実行できるようになる。
vagrant ssh
コマンドでSSHログインできます、そしてvagrant destroy
コマンドで削除できます。
プロジェクトセットアップの最初のステップはVagrantfileを使って設定する。Vagrantfileの目的は以下の2点。
- プロジェクトのルートディレクトリをマークする。Vagrantの設定のほとんどはこのルートディレクトリに関連している。
- どのソフトウエアをインストールするかどのようにアクセスするかを含めて、マシンの種類と実行するリソースを明記する。
$ mkdir vagrant_getting_started
$ cd vagrant_getting_started
$ vagrant init
上記の操作でカレントディレクトリにVagrantfile
を配置できる。またvagrant init
コマンドは既に存在すうるディレクトリでも実行できる。
Vagrantのベースイメージとなるのが_boxes_
はじめにの実行を済ましているのであれば以下は実行する必要はありませんBOXを使うへ進んでください。
$ vagrant box add hashicorp/precise32
上記の操作で"hashicorp/precise32"という名前のboxをVagrant Cloudからダウンロードします。 追加したboxは複数のプロジェクトで再利用できます。
追加したboxを使うにはVagrantfile
を以下のように編集します。
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise32"
end
ここで探す。
以下のコマンドを実行することでUbuntu実行環境のマシンが起動します。
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'hashicorp/precise32'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'hashicorp/precise32' is up to date...
==> default: Setting the name of the VM: vagrant_getting_started_default_1399429293801_36944
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/k2works/projects/github/vagrant_introduction/vagrant_getting_started
起動完了後以下のコマンドでsshログインできます。
$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)
* Documentation: https://help.ubuntu.com/
Welcome to your Vagrant-built virtual machine.
Last login: Fri Sep 14 06:22:31 2012 from 10.0.2.2
構築した仮想マシンを削除したい場合はログアウト後にvagrant destroy
を実行する。
デフォルでVagrantはプロジェクトディレクトリを/vagrant
ディレクトリと同期させています。
$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)
* Documentation: https://help.ubuntu.com/
Welcome to your Vagrant-built virtual machine.
Last login: Wed May 7 02:49:45 2014 from 10.0.2.2
vagrant@precise32:~$ ls /vagrant/
Vagrantfile
vagrant@precise32:~$ touch /vagrant/foo
vagrant@precise32:~$ exit
logout
Connection to 127.0.0.1 closed.
bash-3.2$ ls
Vagrantfile foo
上記の操作で/vagrant/foo
がローカルプロジェクトと動機されていることが確認できます。
Vagrantは_自動プロビジョニング_をサポートしています。この機能を使うことでvagrant up
実行時にソフトウエアを自動的にインストールして繰り返し利用可能な状態にしてくれます。
以下のシェルスクリプトをVagrantfileと同じディレクトリにbootstrap.sh
で保存する。
公式サイトのガイドだとネームサーバエラーが出るのでecho "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
を最初に追加する。
#!/usr/bin/env bash
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
apt-get update
apt-get install -y apache2
rm -rf /var/www
ln -fs /vagrant /var/www
次にVagrantfileを以下のように編集する。
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise32"
config.vm.provision :shell, :path => "bootstrap.sh"
end
ネームサーバーエラーはバーチャルマシンのバグなので以下の方法で修正するように変更
_Vagrantfile_に以下を追加
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
再実行
$ vagrant destroy
$ vagrant up
"provision"の行を新しく追加してVagrantにshell
プロビジュナーを使ってbootstrap.sh
ファイルの内容でマシンをセットアップするようにします。
ファイルパスはプロジェクトルートの場所(Vagrantfileが設定されている場所)と関連付けれられています。
全ての設定が終わった後にvagrant up
を実行するだけでVagrantは自動的にプロビジョンしてくれます。
すでにvagrant up
を実行中ならばvagrant reload --provision
を実行すれば初期セットアップを飛ばしてバーチャルマシンを再起動します。
それでもうまく行かなければvagrant provision
を実行する。
仮想マシンのwebサーバーは起動しましたが、まだブラウザから確認することはできませんプロビジョニング環境内だけ有効になっています。
Vagrantfileを編集する
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise32"
config.vm.provision :shell, :path => "bootstrap.sh"
config.vm.network :forwarded_port, host: 4567, guest: 80
end
vagrant reload
またはvagrant up
を実行する。
ブラウザからhttp://127.0.0.1:4567
にアクセスして確認する。
静的なIPアドレスの設定もできます。詳細はこっち
VagrantではVagrant Shareという構築した環境を簡単に共有できる仕組みを用意しています。
はじめにVagrant Cloudにアカウントを作成する(無料)。
アカウントを作成したらvagrant login
でログインする。
$ vagrant login
In a moment we'll ask for your username and password to Vagrant Cloud.
After authenticating, we will store an access token locally. Your
login details will be transmitted over a secure connection, and are
never stored on disk locally.
If you don't have a Vagrant Cloud account, sign up at vagrantcloud.com
Username or Email: k2works
Password (will be hidden):
You're now logged in!
ログインできたらvagrant share
を実行する。
$ vagrant share
==> default: Detecting network information for machine...
default: Local machine address: 127.0.0.1
default:
default: Note: With the local address (127.0.0.1), Vagrant Share can only
default: share any ports you have forwarded. Assign an IP or addres to your
default: machine to expose all TCP ports. Consult the documentation
default: for your provider ('virtualbox') for more information.
default:
default: Local HTTP port: 4567
default: Local HTTPS port: disabled
default: Port: 2200
default: Port: 4567
==> default: Checking authentication and authorization...
==> default: Creating Vagrant Share session...
default: Share will be at: hot-duckbill-4965
==> default: Your Vagrant Share is running! Name: hot-duckbill-4965
==> default: URL: http://hot-duckbill-4965.vagrantshare.com
==> default:
==> default: You're sharing your Vagrant machine in "restricted" mode. This
==> default: means that only the ports listed above will be accessible by
==> default: other users (either via the web URL or using `vagrant connect`).
表示されているURLにアクセスするとこれまでに構築した環境がシェアされていることが確認できます。
シェアを実行しているターミナルでCtrl-C
を押せば終了します。
Vagrantシェアは単純なHTTPシェアよりもとパワフルです。詳細はこっち。
Vagrantには_suspend,haltそしてdestroy_の終了オプションが有ります。それぞれに長所と短所がありますので自分にとってベストな選択をしてください。
- Suspending:
vagrant suspend
の長所は早いことです。短所は終了後も仮想マシンのディスク領域とRAM領域を保持し続けることです。 - Halting:
vagrant halt
の長所は仮想マシン内のファイルを保持してくれることです。短所は起動に時間がかかることとディスク領域を保持しし続けることです。 - Destroying:
vagrant destroy
の長所は痕跡を残さないことです。短所は再起動時の仮想マシン再インポートや再プロビジョンに時間がかかることです。
作業を翌日、翌週あるいは翌年に再開するとしても以下のコマンドを実行するだけです。
$ vagrant up
はじめにではVirtualBoxを背景に解説してきました。しかし、VagrantはVMwareやAWSなどさまざまなバックエンドプロバイダを使うことができます。
プロバイダをインストールすればVagrantfileを編集する必要はありません、ただvagrant up
をプロバイダオプションを付けて実行するだけです。
$ vagrant up --provider=vmware_fusion
クラウドに移行したい?ならばAWS
$ vagrant up --provider=aws
一度vagrant up
をプロバイダオプション付きで実行したらそのほかのVagrantコマンドでは明示する必要はありません。
そんなわけでSSHの準備が完了または不要になったらvagrant destroy
のように普通にコマンドを実行すればオッケーです。
もっと詳しく知りたければこっち
$ vagrant plugin install sahara
$ vagrant up
$ vagrant sandbox on
$ vagrant sandbox rollback
$ vagrant sandbox commit
$ vagrant sandbox off
$ vagrant plugin install vagrant-aws
export AWS_ACCESS_KEY_ID=xxxxxxxxx AWSアクセスキー
export AWS_SECRET_ACCESS_KEY=xxxxxxxx AWSシークレットアクセスキー
export AWS_KEYPAIR_NAME=xxx AWSキーペア名
export AWS_PRIVATE_KEY_PATH=./aws/xxx.pem AWS秘密鍵保存場所
$ mkdir vagrant_aws_classic
$ cd vagrant_aws_classic/
$ vagrant init
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
#--- 以下を指定 --
box_name = "dummy"
box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
ssh_username = "ec2-user"
security_groups = ["web"]
region = "ap-northeast-1"
availability_zone = "ap-northeast-1a"
ami = "ami-b1fe9bb0"
instance_type = "m1.medium"
#--- ここまで --
config.vm.box = box_name
config.vm.box_url = box_url
config.vm.provider :aws do |aws, override|
aws.access_key_id = ENV['AWS_ACCESS_KEY_ID']
aws.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
aws.keypair_name = ENV['AWS_KEYPAIR_NAME']
override.ssh.username = ssh_username
override.ssh.private_key_path = ENV['AWS_PRIVATE_KEY_PATH']
#---- EC2-Classic固有の設定 ----#
# リージョンを設定
aws.region = region
# AZを設定
aws.availability_zone = availability_zone
# セキュリティグループを設定
aws.security_groups = security_groups
#---- EC2-Classic固有の設定ここまで ----#
# User-data
aws.user_data = "#!/bin/sh\nsed -i 's/^.*requiretty/#Defaults requiretty/' /etc/sudoers\n"
# タグを指定(任意)
aws.tags = aws.tags = { "Name" => "test-classic-default-minimal", "env" => "dev"}
# AMIを指定。起動したいリージョンにあるAMI
aws.ami = ami
# インスタンスタイプを設定
aws.instance_type = instance_type
end
end
$ vagrant up --provider=aws
Bringing machine 'default' up with 'aws' provider...
[fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded.
==> default: HandleBoxUrl middleware is deprecated. Use HandleBox instead.
==> default: This is a bug with the provider. Please contact the creator
==> default: of the provider you use to fix this.
==> default: Warning! The AWS provider doesn't support any of the Vagrant
==> default: high-level network configurations (`config.vm.network`). They
==> default: will be silently ignored.
==> default: Launching an instance with the following settings...
==> default: -- Type: m1.medium
==> default: -- AMI: ami-b1fe9bb0
==> default: -- Region: ap-northeast-1
==> default: -- Availability Zone: ap-northeast-1a
==> default: -- Keypair: k2works
==> default: -- User Data: yes
==> default: -- Security Groups: ["web"]
==> default: -- User Data: #!/bin/sh
==> default: sed -i 's/^.*requiretty/#Defaults requiretty/' /etc/sudoers
==> default: -- Block Device Mapping: []
==> default: -- Terminate On Shutdown: false
==> default: -- Monitoring: false
==> default: -- EBS optimized: false
==> default: Waiting for instance to become "ready"...
==> default: Waiting for SSH to become available...
==> default: Machine is booted and ready for use!
==> default: Rsyncing folder: /Users/k2works/projects/github/vagrant_introduction/vagrant_aws_classic/ => /vagrant
$ vagrant ssh
[fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded.
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2013.09-release-notes/
20 package(s) needed for security, out of 146 available
Run "sudo yum update" to apply all updates.
Amazon Linux version 2014.03 is available.
$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
[fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded.
==> default: Terminating the instance...
$ export VAGRANT_LOG=debug
$ vagrant up --provider=aws
$ mkdir vagrant_aws_vpc
$ cd vagrant_aws_vpc/
$ vagrant init
Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
#--- 以下を指定 --
box_name = "dummy"
box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
ssh_username = "ec2-user"
subnet_id = "subnet-b45640c0"
private_ip_address = "10.0.0.46"
security_groups = ["sg-29d8364c"]
region = "ap-northeast-1"
ami = "ami-b1fe9bb0"
instance_type = "t1.micro"
#--- ここまで --
config.vm.box = box_name
config.vm.box_url = box_url
config.vm.provider :aws do |aws, override|
aws.access_key_id = ENV['AWS_ACCESS_KEY_ID']
aws.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
aws.keypair_name = ENV['AWS_KEYPAIR_NAME']
override.ssh.username = ssh_username
override.ssh.private_key_path = ENV['AWS_PRIVATE_KEY_PATH']
#---- VPC固有の設定 ----#
# リージョンを設定
aws.region = region
# サブネットIDを指定
aws.subnet_id = subnet_id
# VPC内のローカルIPを指定
aws.private_ip_address = private_ip_address
# Public Subnet内を指定した場合
# 自動的にEIPを取得して割り当てるので、EIPの取得上限数(5個)に注意
aws.elastic_ip = true
# セキュリティグループを設定
# ここではIDのリストを指定
aws.security_groups = security_groups
#---- VPC固有の設定ここまで ----#
# User-data
aws.user_data = "#!/bin/sh\nsed -i 's/^.*requiretty/#Defaults requiretty/' /etc/sudoers\n"
# タグを指定(任意)
aws.tags = aws.tags = { "Name" => "test-minimal", "env" => "dev"}
# AMIを指定。起動したいリージョンにあるAMI
aws.ami = ami
# インスタンスタイプを設定
aws.instance_type = instance_type
end
end
$ vagrant up --provider=aws
Bringing machine 'default' up with 'aws' provider...
[fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded.
==> default: HandleBoxUrl middleware is deprecated. Use HandleBox instead.
==> default: This is a bug with the provider. Please contact the creator
==> default: of the provider you use to fix this.
==> default: Warning! The AWS provider doesn't support any of the Vagrant
==> default: high-level network configurations (`config.vm.network`). They
==> default: will be silently ignored.
==> default: Launching an instance with the following settings...
==> default: -- Type: t1.micro
==> default: -- AMI: ami-b1fe9bb0
==> default: -- Region: ap-northeast-1
==> default: -- Keypair: k2works
==> default: -- Subnet ID: subnet-b45640c0
==> default: -- Private IP: 10.0.0.46
==> default: -- Elastic IP: true
==> default: -- User Data: yes
==> default: -- Security Groups: ["sg-29d8364c"]
==> default: -- User Data: #!/bin/sh
==> default: sed -i 's/^.*requiretty/#Defaults requiretty/' /etc/sudoers
==> default: -- Block Device Mapping: []
==> default: -- Terminate On Shutdown: false
==> default: -- Monitoring: false
==> default: -- EBS optimized: false
==> default: Warning! Vagrant might not be able to SSH into the instance.
==> default: Please check your security groups settings.
==> default: Waiting for instance to become "ready"...
==> default: Waiting for SSH to become available...
==> default: Machine is booted and ready for use!
==> default: Rsyncing folder: /Users/k2works/projects/github/vagrant_introduction/vagrant_aws_vpc/ => /vagrant