Home > Vagrant

Vagrant Archive

vagrant-serverspec で TDD ライクにサーバ構築を行う

この記事の所要時間: 933

Shin x blog Advent Calendar 2013 の 24 日目です。

vagrant

先日リリースされた vagrant-serverspec を使って、テストドリブンなサーバ構築を行ってみました。

vagrant-serverspec

vagrant-serverspec は、サーバ、インフラの状態をテストするツール serverspec を Vagrant のプロビジョナとして実行できるプラグインです。これを使うことで、vagrant コマンドから、serverspec のテストを実行することができます。

詳しくは、@ryuzee さんの下記エントリを参照して下さい。

vagrant-serverspecを使ってプロビジョニング結果をテストする | Ryuzee.com

仕様

今回構築するサーバの仕様は下記です。PHP 5.5.x をインストールして、ビルトインサーバを起動するというものです。(※ちなみにビルトインサーバは開発用途でのみ利用して下さい。)

* PHP 5.5.x を yum でインストール(remi-php55)
* date.timezone を Asia/Tokyo に設定
* ビルトインサーバを Port 8000 で起動

また、環境は下記で動作確認しています。必要であれば、それぞれについてインストールを行なって下さい。

* Vagrant 1.4.1
* VirtualBox 4.3.0
* serverspec 0.13.7
* ansible 1.2.2

vagrant-serverspec インストール

vagrant plugin コマンドで、vagrant-serverspec をインストールします。

$ vagrant plugin install vagrant-serverspec

Vagrantfile 作成

Vagrant で仮想サーバを構築して、このサーバを仕様を満たす形に進めていきます。まず、vagrant init コマンドで Vagrantfile を作成します。

$ vagrant init centos64_ja
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.

serverspec-init でデフォルトのテストケースを作成

テストドリブンということで、先に serverspec のテストを作っていきます。

serverspec-init コマンドで、デフォルトのテストケースを生成します。いくつかオプションを選択する必要があるので、下記のように回答しています。

$ serverspec-init
Select OS type:

  1) UN*X
  2) Windows

Select number: 1

Select a backend type:

  1) SSH
  2) Exec (local)

Select number: 1

Vagrant instance y/n: y
Auto-configure Vagrant from Vagrantfile? y/n: y
 + spec/
 + spec/default/
 + spec/default/httpd_spec.rb
 + spec/spec_helper.rb
 + Rakefile

作成されたスペックファイルを元にテストケースを作ります。今回は、PHP に関するテストとなるので、spec/default/httpd_spec.rb を spec/default/php_spec.rb というファイルにリネームします。そして、このファイルにテストケースを書いていきます。

まずは、下記のように、PHP パッケージがインストールされているかだけを確認するテストを書きました。

$ mv spec/default/httpd_spec.rb spec/default/php_spec.rb
$ vim spec/default/php_spec.rb
require 'spec_helper'

describe package('php') do
  it { should be_installed }
end

作成したテストケースが実行されるように Vagrantfile に serverspec のプロビジョニング設定を記述します。spce/default/ 以下の全てのスペックファイルを対象としています。

  config.vm.provision :serverspec do |spec|
    spec.pattern = "spec/default/*_spec.rb"
  end

これで、vagrant up を実行すると、serverspec のテストが実行されます。では、実際にvagrant upを実行してみましょう。下記のように、serverspec プロビジョナが実行され、テストが失敗しました。まだ、PHP はインストールしていないので、これは当然の結果です。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
(snip)
[default] Running provisioner: serverspec...
F

Failures:

  1) Package "php" should be installed
     Failure/Error: it { should be_installed }
       sudo rpm -q php
       パッケージ php はインストールされていません。
       expected Package "php" to be installed
     # ./spec/default/php_spec.rb:4:in `block (2 levels) in '

Finished in 5.07 seconds
1 example, 1 failure

Failed examples:

rspec ./spec/default/php_spec.rb:4 # Package "php" should be installed

では、PHP をインストールするプロビジョニングをシェルで記述してみます。このプロビジョニングは、serverspec よりも前に実行する必要があるので、serverspec プロビジョニングより上に記述します。

  config.vm.provision :shell, :inline => <<-EOT
    #
    # yum repository
    #
    rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
    rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
    yum -y install php --enablerepo=remi-php55
  EOT

  config.vm.provision :serverspec do |spec|
  (snip)

これで、PHP をインストールが行われ、その後に serverspec が実行されるので、テストが通るはずです。vagrant provision コマンドを実行して、プロビジョニングを行うと、今後はちゃんとテストが通りました。

$ vagrant provision
(snip)
[default] Running provisioner: serverspec...
.

Finished in 4.31 seconds
1 example, 0 failures

次に PHP のバージョンが、5.5.x であることを確認するためにテストを追加します。spec/default/php_spec.rb に下記を追加します。

describe command('php -v') do
  it { should return_stdout /^PHP 5\.5\./ }
end

テストを再実行します。次は、--provision オプションで、serverspec のみを実行するようにします。ちゃんとテストが通りました。これで、サーバには PHP パッケージがインストールされており、バージョンが 5.5.x であることが確認できました。

$ vagrant provision --provision=serverspec
[default] Running provisioner: serverspec...
..

Finished in 4.23 seconds
2 examples, 0 failures

date.timezone を Asia/Tokyo に変更する

次に PHP ではお馴染みの date.timezone 設定が Asia/Tokyo であることを確認します。

serverspec では、php_config という、そのままずばり PHP の設定を確認するためのリソースタイプが用意されているので、これを spec/default/php_spec.rb に追加します。

describe 'PHP config parameters' do
  context  php_config('date.timezone') do
    its(:value) { should eq 'Asia/Tokyo' }
  end
end

プロビジョニングを再実行して、今回追加したテストが失敗することを確認します。

$ vagrant provision
(snip)
[default] Running provisioner: serverspec...
..F

Failures:

  1) PHP config parameters Php config "date.timezone" value should eq "Asia/Tokyo"
     Failure/Error: its(:value) { should eq 'Asia/Tokyo' }
       sudo php -r 'echo get_cfg_var( "date.timezone" );'

       expected: "Asia/Tokyo"
            got: ""

       (compared using ==)
     # ./spec/default/php_spec.rb:13:in `block (3 levels) in '

Finished in 5.23 seconds
3 examples, 1 failure

Failed examples:

rspec ./spec/default/php_spec.rb:13 # PHP config parameters Php config "date.timezone" value should eq "Asia/Tokyo"

では、このテストが通るように date.timezone を設定するプロビジョニングを書きましょう。

今回は、php.ini の値を上書きするために zzmyphp.ini というファイルを作成し、ここに date.timezone の設定を記述することにします。

$ mkdir provision
$ vi provision/zzmyphp.ini
date.timezone="Asia/Tokyo"

このファイルをシェルプロビジョニングで、仮想サーバの /etc/php.d/ にコピーします。

  config.vm.provision :shell, :inline => <<-EOT
    #
    # yum repository
    #
    rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
    rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
    yum -y install php --enablerepo=remi-php55
    cp -a /vagrant/provision/zzmyphp.ini /etc/php.d/ # <--- 追加
  EOT

これでテストが通るはずです。vagrant provision を再実行します。下記のとおり、テストが通ったので、date.timezone の値が Asia/Tokyo となっていることが確認できました。

$ vagrant provision
(snip)
[default] Running provisioner: serverspec...
...

Finished in 5.12 seconds
3 examples, 0 failures

ビルトインサーバを起動

最後に PHP のビルトインサーバを 8000 ポートで起動します。DocumentRoot は、/vagrant にします。

まずテストから書きます。ここでは簡易的にポート 8000 で Listen しているかを確認します。

describe port(8000) do
  it { should be_listening }
end

プロビジョニングを行なって、追加したテストが失敗することを確認しておきます。

$ vagrant provision
(snip)
[default] Running provisioner: serverspec...
...F

Failures:

  1) Port "8000" should be listening
     Failure/Error: it { should be_listening }
       sudo netstat -tunl | grep -- :8000\
       expected Port "8000" to be listening
     # ./spec/default/php_spec.rb:18:in `block (2 levels) in '

Finished in 6.07 seconds
4 examples, 1 failure

Failed examples:

rspec ./spec/default/php_spec.rb:18 # Port "8000" should be listening

では、シェルプロビジョニングでビルトインサーバを起動するように設定します。ここでは supervisor を使って、ビルトインサーバを起動するようにします。

  config.vm.provision :shell, :inline => <<-EOT
    rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
    rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

    yum -y install php --enablerepo=remi-php55
    cp -a /vagrant/provision/zzmyphp.ini /etc/php.d/
    
    # 追加
    yum -y install supervisor
    cp -a /vagrant/provision/supervisord.conf /etc/
    chkconfig supervisord on
    service supervisord start
  EOT

vagrant provision を実行すると、ビルトインサーバが起動され、テストが通りました。これで、ビルトインサーバがポート 8000 で起動していることが確認できました。

$ vagrant provision
(snip)
[default] Running provisioner: serverspec...
....

Finished in 6.07 seconds
4 examples, 0 failures

プロビジョナを ansible に変更

これで仕様どおりに稼働するサーバを構築することができました。すでに仕様を検証する serverspec のテストがあるので、構築するためのプロビジョナを変更しても、要求された仕様を満たしているかを検証することができます。ではプロビジョナを ansible に変えて再度サーバを構築し直してみましょう。

Vagrantfile のシェルプロビジョニングの設定を削除して、代わりに ansible の設定を下記のように書きます。

  config.vm.provision :ansible do |ansible|
    ansible.playbook = "provision/playbook/main.yml"
  end

provision/playbook 以下に main.yml というプレイブックを配置しています。やっている内容は、シェルプロビジョニングとほぼ同じです。

---
- hosts: all
  sudo: yes
  tasks:
    - name: add yum repositories
      copy: src=files/{{ item }} dest=/etc/yum.repos.d/
      with_items:
        - epel.repo
        - epel-testing.repo
        - remi.repo

    - name: add rpm-gpg-keys
      copy: src=files/{{ item }} dest=/etc/pki/rpm-gpg/
      with_items:
        - RPM-GPG-KEY-EPEL-6
        - RPM-GPG-KEY-remi

    - name: install PHP 5.5.x
      yum: name=php enablerepo=remi-php55

    - name: put zzmyphp.ini
      copy: src=../zzmyphp.ini dest=/etc/php.d/ backup=yes

    - name: install supervisor
      yum: name=supervisor

    - name: put supervisord.conf
      copy: src=../supervisord.conf dest=/etc/supervisord.conf backup=yes

    - name: enable supervisor
      service: name=supervisord enabled=yes state=started

では、この ansible プロビジョニングでもテストが通るかを確かめてみます。前回のシェルプロビジョニングで構築した内容が残っているので、仮想マシンを破棄してから、再構築します。

下記のとおり、ansible によるプロビジョニングが実行され、テストが無事に通りました。これにより、要求された仕様が満たされていることが確認できました。

$ vagrant destory -f
$ vagrant up
(snip)
[default] Running provisioner: ansible...

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************                                                                                                                                                      [98/3036]
ok: [default]

TASK: [add yum repositories] **************************************************
changed: [default] => (item=epel.repo)
changed: [default] => (item=epel-testing.repo)
changed: [default] => (item=remi.repo)

TASK: [add rpm-gpg-keys] ******************************************************
changed: [default] => (item=RPM-GPG-KEY-EPEL-6)
changed: [default] => (item=RPM-GPG-KEY-remi)

TASK: [install PHP 5.5.x] *****************************************************
changed: [default]

TASK: [put zzmyphp.ini] *******************************************************
changed: [default]

TASK: [install supervisor] ****************************************************
changed: [default]

TASK: [put supervisord.conf] **************************************************
changed: [default]

TASK: [enable supervisor] *****************************************************
changed: [default]

PLAY RECAP ********************************************************************
default                    : ok=8    changed=7    unreachable=0    failed=0

[default] Running provisioner: serverspec...
....

Finished in 10.62 seconds
4 examples, 0 failures

さいごに

Vagrant と serverspec の相性が良いのは分かっていたのですが、vagrant up の後にいちいち rake spec を実行するのが面倒だなと感じていました。

vagrant-serverspec を使えば、プロビジョニングの後に自動で serverspec が実行されるので、構築とテストを一息で行うことができます。

仕様を決める、テスト書く、vagrant provision 、プロビジョニング書く、vagrant provision の流れはなかなか気持ち良いです。こうして検証済のプロビジョニングは、本番環境など Vagrant 以外の環境でも利用できますし、当然ながらそのテストも serverspec で行うことができます。

サーバ設定はわりと仕様が決まりやすく、テストが書きやすいと思うので、vagrant-serverspec を使って、テストドリブンなサーバ構築を行ってみて下さい。

参考

  • serverspec
  • jvoorhis/vagrant-serverspec
  • AnsibleWorks | Radically simple IT automation
  • Ansible - Provisioning - Vagrant Documentation
    • コメント (Close): 0
    • トラックバック (Close): 0

    Vagrant に見るインテグレーションのヒント

    この記事の所要時間: 612

    Shin x blog Advent Calendar 2013 の 23 日目です。

    vagrant

    今年一年を振り返った時に、一番インパクトがあったのは Vagrnat でした。

    昨年までも存在は知っていたものの、本質を理解しておらず、単に仮想マシンをコマンドで扱えるもの程度の認識でした。今年に入り、利用法が分かった後は、開発環境や検証環境などを構築するのに大いに役立っています。

    Vagrant はパッケージとしてよく出来ており、それまで一部の人しか扱わなかった仮想化環境を多くの人に解放してくれました。ここでは、Vagrant の構成から、システムインテグレーションを行う上でのヒントを見出してみたいと思います。

    既存技術をインテグレーションしたツール

    まず、Vagrant で興味深いのは、基礎的な技術要素は、Vagrant 自身では提供しておらず、外部のソフトウェアやサービスを利用しているという点です。

    仮想化環境にしても、プロビジョニングツールにしても、以前から存在しており、特段珍しいものではありません。これらを上手く組み合わせて、Vagrant という一つのツールとして扱えるようにしています。

    Vagrant を知っても、すぐに触手が伸びなかった人(私も含めて)は、このインテグレーションしている部分が見えず、単に技術要素だけを見ていたのではないでしょうか。もちろん、技術要素が無ければ動作しないのですが、そこだけを見ていると本質を見誤ります。それらを組み合わせて、より良い使い方を提示しているのが Vagrant というツールです。

    ある意味、技術要素は上手く隠蔽して、ツールの目的を果たせるような作りにするのが手腕の見せ所なのかもしれません。

    実行環境を同梱

    Vagrant 1.0.x の頃は、パッケージでのインストールの他に gem でのインストールも可能でした。もともと gem コマンドを使っている人にとっては便利なものですが、そうで無い人にとっては、まずは gem の環境を整える必要があり、インストールの障壁となる場合がありました。また、Ruby や gem のバージョンがユーザ毎に異なるので、その環境固有が問題が生じてしまいます。

    そこで Vagrant 1.1 からは、Ruby の実行環境ごと Vagrant にパッケージングして、これさえダウンロードすれば、同じ環境で動くようになっています。これには、Vagrant 開発側が多様な環境をサポートする手間を削減するという面もありますが、ユーザとしても、自分の環境に Ruby があろうが無かろうが、そんなことは気にする必要が無く、ただパッケージをダウンロードして、インストールするだけで良くなりました。

    実行環境が同梱できるかどうかはケースバイケースになりますが、ストレージやネットワークがリッチになった今では、こういった方針は、開発側、ユーザの双方にとってメリットになりますね。

    メインの操作を vagrant up に集約

    Vagrant で、一番行う操作は vagrant up でしょう。

    このコマンドを実行するだけで、仮想マシンの構築から、プロビジョニングの実行を自動で行ってくれます。その裏では、Vagrantfile に書かれた情報を読み取って、仮想環境を作り、ベース仮想イメージを取得し、仮想マシンを起動。OS ブートが完了したら、プロビジョニングを実行して、仮想サーバの設定を行っています。

    ユーザは、こういった一連の流れを意識することなく、複雑なところは Vagrant が連携するソフトウェアと協調して、良しなにやってくれます。これは非常に分かりやすい方法です。

    Vagrantfile を利用するだけの人は、このコマンド(と halt / destroy などの基本的なコマンド)だけを覚えるだけで、Vagrant の恩恵を十二分に受けることができます。

    また、Vagrantfile を書く側の人にとっても、操作方法がはっきりしているので、それに合わせて Vagrantfile やプロビジョニング設定の記述することになります。vagrant up するだけで全ての環境構築が完了するように設定を書いていくわけです。記述した Vagrantfile を管理する方法も、プロジェクトのソースコードと同じリポジトリに含めて、git clone して、vagrant up するという流れができるように行います。

    こうして、主となる操作がはっきりしているので、使う側はそれだけ覚えれば良く、設定する側もそれに合わせて構築すれば良くなります。

    vagrant up を打ち出して、これだけで環境構築ができます!と謳ったのは、Vagrant の本質を伝えるにはとても有効な手法だったと思います。

    プラガブルなソフトウェアとエコシステムの利用

    先に書いたとおり、Vagrant は多様な技術を組み合わせて使うツールなので、別システムとの連携が必須です。

    Vagrant では、そういった外部ツールとの連携処理をプラグインで実装しています。利点は、もし新しい技術が登場した場合、Vagrant 本体は触らなくても、プラグインを追加すれば、利用が可能となるということです。プラグインは、gem パッケージにて配布できるようになっているので、有志によるプラグインが作られています。

    gem パッケージで配布されているからといって、ユーザは gem を意識する必要はありません。プラグインのインストールには vagrant plugin というコマンドが用意されており、これを使うことで、プラグインのインストールやアップデート、アンインストールが可能です。

    実際、仮想化環境、プロビジョニングツールは、プラグインとなっているので、Vagrant 本体に同梱されているもの以外にも、AWSDigital OceanFabric など多くプラグインが公開されています。中には Vagrant 自体のパッケージに同梱されていくパターンもあります。

    ソフトウェア自体はプラガブルにして、機能拡張が容易に行えるようにしています。プラグインの配布には、Ruby のエコシステムを利用して、誰もが開発したプラグインを配布できるようにしています。そして、ユーザにはそういった構成を知る必要は無く、単にいつものコマンドを使うだけで良いわけです。

    さいごに

    同じように既存の技術を組み合わせて、パッケージングしていると感じるのが、Docker です。これも lxc や aufs など、以前からある技術を利用していますが、それらを組み合わせて、コンテナベースの仮想マシンという形を作り上げています。エコシステムに関しては、まだ荒削りな面がありますが、これも次第に成熟が進んでいくと期待しています。

    Vagrant が多くの人に受け入れられているということは、ある意味レゴブロック型プログラミングでも上手くやれば、多くの人に使ってもらえるようなものが作れるということを示唆しているように思います。個人的にはこの点でも Vagrnat や Docker は気になるソフトウェアで、今後何かを作っていく時のヒントにしていきたいですね。

    • コメント (Close): 0
    • トラックバック (Close): 0

    ざっくり分かる Vagrant 1.4 / Docker Provisioner

    この記事の所要時間: 745

    Shin x blog Advent Calendar 2013 の 10 日目です。

    vagrant

    Vagrant 1.4 がリリースされました。Docker Provisioner を中心に新機能をざっくりと見てみました。

    ダウンロードページの変更

    さあ、1.4 をダウンロードしよう、と今までのダウンロードページに行くと 1.4 のリンクがありません><

    新しいダウンロードページからダウンロードしましょう。

    Download Vagrant – Vagrant

    Docker Provisioner

    Docker 対応として Docker Provisioner が追加されました。

    このプロビジョナを使うと Docker 自体のインストールが自動で行われ(!)、その後、docker pull や docker run を実行することができます。

    下記の Vagrantfile では Docker Provisioner を使って、docker run を実行する例です。

    他のプロビジョナ( chef や puppet 等)と一緒に使うことも可能なようです。

    precise64 Box ファイルで vagrant up してみました。Docker インストールやコンテナ実行が行われていますね。

    $ vagrant up
    (snip)
    [default] Running provisioner: docker...
    [default] Installing Docker (latest) onto machine...
    [default] Starting Docker containers...
    [default] -- Container: ubuntu
    $
    

    vagrant ssh して、VM の中に入りました。Docker は最新の 0.7.1 が入っています。

    vagrant@precise64:~$ docker info
    Client version: 0.7.1
    Go version (client): go1.2
    Git commit (client): 88df052
    Server version: 0.7.1
    Git commit (server): 88df052
    Go version (server): go1.2
    Last stable version: 0.7.1
    Go version (client): go1.2
    

    docker info を見ると aufs が Driver となっています。

    vagrant@precise64:~$ docker info
    Containers: 1
    Images: 3
    Driver: aufs
     Root Dir: /var/lib/docker/aufs
      Dirs: 5
    

    docker ps -a で確認すると、Vagrantfile に書いた bash コマンドが実行されていました。

    vagrant@precise64:~$ docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    54ead2bad23d        ubuntu:12.04        bash -l             About a minute ago   Exit 0                                  condescending_albattani
    

    Docker – Provisioning – Vagrant Documentation

    CentOS の Box ファイル

    CentOS 6.5 の Box ファイルでも試してみました。上記の Vagrantfile から box ファイルを変更しただけです。

    $ vagrant up
    (snip)
    [default] Running provisioner: docker...
    [default] Installing Docker (latest) onto machine...
    Vagrant attempted to execute the capability 'docker_install'
    on the detect guest OS 'redhat', but the guest doesn't
    support that capability. This capability is required for your
    configuration of Vagrant. Please either reconfigure Vagrant to
    avoid this capability or fix the issue by creating the capability.
    $
    

    あ、エラーになりました。redhat 系のゲスト OS はサポートしていないようです。。。Docker 自体は、CentOS で動くようになっているので、今後に期待ですね。

    private network を設定しているとエラー

    private network を設定しているとエラーが発生する場合があるようです。

    “Configuring and enabling network interfaces” fails with ssh error Issue #2614 mitchellh/vagrant

    他の新機能

    Machine-Readable Output

    システムが読み込みやすい形式で、vagrant コマンドの実行結果?を出力します。changelog を見ると –machine-readable フラグを使うようなのです。

    試しに vagrant up –machine-readable を実行したのですが、何も出力されませんでした。

    Machine Readable Output – Command-Line Interface – Vagrant Documentation

    Enforcing a Vagrant Version

    Vagrant.require_version オプションを Vagrantfile に記述することで、実行する vagrant のバージョンを指定できます。バージョンが合わないために予期せぬ挙動になることを防止します。

    Synced Folder Plugins

    synced_folder の実装をプラグインで行うことができるようになりました。nfs がプラグインとして提供されています。

    すでに、rsync, scp, NFS(ホストがゲストをマウントするパターン))のプラグイン実装が存在するようです。

    Box downloading will resume if interrupted

    Box ファイルのダウンロードが中断しても、次回再開できるようになりました。

    Box checksums

    追加した BOX ファイルのチェックサムを検証します。

    NFS on VirtualBox no longer requires a static IP

    VirtualBox 上の NFS では、static IP が必要なくなりました。

    Running multiple “vagrant up” commands in parallel with VirtualBox

    VirtualBox での vagrant up を並行して実行できるようになりました。CI 環境などでは有効ですね。( Docker で良いかもしれませんが。)

    Multiple SSH keys

    複数の SSH Key を指定することが可能になりました。また、プロビジョニングで、安全ではない Vagrant のキーをより安全なキーに置き換えることもできます。

    さいごに

    synced_folder のプラグイン化や、Box ファイルダウンロードの resume 機能など色々な改良が施されたバージョンですが、今回の目玉は、Docker Provisioner ですね。

    これまでもプロビジョニングで Docker インストールや docker コマンドの実行は可能でしたが、Docker Provisioner の登場により、さらに手軽に Docker を利用できます。

    Docker を利用するベースとして Vagrant を使うというシーンが増えていきそうです。

    Vagrant 1.4 – Vagrant

    • コメント (Close): 0
    • トラックバック (Close): 0

    WordPress を Docker で動かす( OSX / Vagrant )

    この記事の所要時間: 319

    Shin x blog Advent Calendar 2013 の 9 日目です。

    wordpress_on_docker

    Docker で PHP アプリケーションを動かしてみようということで、WordPress でやってみます。

    WordPress 用 Docker コンテナを作る

    Docker は現状 Linux 上でしか動かないので、OSX 上では直接動きません。Vagrant で Linux(CentOS)の仮想マシンを作り、その上で Docker を動かします。

    さっそく Linux 環境から WordPress が動く Docker コンテナまで、一気に構築できる Vagrantfile を作りました。これを使うだけで環境構築は終わりです。

    shin1x1/vagrant-docker-wpdev

    まず、GitHub から git clone します。

    $ git clone https://github.com/shin1x1/vagrant-docker-wpdev
    $ cd vagrant-docker-wpdev
    $ ls
    wordpress/ Vagrantfile
    

    vagrant up で、仮想マシンを起動します。自動で、Docker のインストール、Docker イメージを生成、コンテナの起動と一連の流れが実行されます。

    $ vagrant up
    (snip)
    Step 29 : ENTRYPOINT ["/usr/bin/supervisord"]
     ---> Running in 43bd85e2cde6
     ---> f846d6a8f9fb
    Successfully built f846d6a8f9fb
    751f8c8e48519ca624a9167b46b3cbd406b7aeb4ded70b0356992ff3dadc50f0
    $ 
    

    vagrant up コマンドが完了したら、OSX のブラウザから http://192.168.33.11/ にアクセスしましょう。

    WordPress の初期画面が表示されれば ok です。

    docker-wordpress-init

    ではウィザードを進んで設定を行いましょう。データベースの設定には、データベース名=「test」、データベースユーザ名=「root」、データベースパスワード=「docker」に設定して下さい。

    docker-wordpress

    これで Docker で動く WordPress ができました。やったね!

    WordPress の編集

    WordPress のソースコードは、OSX の wordpress/ ディレクトリにあります。

    このディレクトリは Docker コンテナから参照しているので、OSX 上で編集、ブラウザで確認という流れで作業を進めることができます。

    docker-wpdev

    この Vagrantfile では、WordPress の Docker コンテナとして、docker-wpdev を利用しています。

    WordPress の Docker コンテナはいくつか公開されているのですが、docker-wpdev はソースコードのディレクトリをホスト側からマウントする機構になっており、開発環境などでソースコードを頻繁に書き換える用途に向いていますね。

    さいごに

    Docker は面白い OSS なのですが、Linux 上でしか動かないため、OSX では Vagrant などで Linux 環境を用意する必要があります。

    ここでは CentOS を Linux 環境として使いましたが、Docker を動かすだけなら、より軽量な CoreOSboot2docker を使う方が良いかもしれません。(ダウンロードも速いですし)

    Docker が OSX 上で動くようになるといいなあ。

    • コメント (Close): 0
    • トラックバック (Close): 0

    CentOS 6.5 に Docker をインストールしてみた

    この記事の所要時間: 330

    Shin x blog Advent Calendar 2013 の 7 日目です。

    docker

    いよいよ CentOS 6.5 から Docker がサポートされたということで、実際にインストールしてみました。

    Vagrant で CentOS 6.5 環境

    Vagrant で CentOS 6.5 環境を作ります。( CentOS 6.5 環境がある場合は不要です。)

    CentOS 6.5 の Box ファイルには、Opscode が提供している Bento プロジェクトのものを利用しました。

    $ vagrant init opscode-centos65 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box
    $ vagrant up
    $ vagrant ssh
    

    Docker インストール

    では、CentOS に Docker をインストールします。

    Docker は、EPEL リポジトリで配布されているので、追加しておきます。あとは yum で、docker-io パッケージを入れるだけです。docker の起動設定なども行っていきます。

    [vagrant@localhost ~]$ rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
    [vagrant@localhost ~]$ yum -y install docker-io
    [vagrant@localhost ~]$ chkconfig docker on
    [vagrant@localhost ~]$ service docker start
    

    Docker で Hello World

    ではさっそく Docker を試してみましょう。Docker 公式の centos イメージを使って、コンテナ内で echo を実行してみます。

    [vagrant@localhost ~]$ sudo docker run centos /bin/echo "Hello World"
    Hello World
    

    centos イメージのバージョンを見てみました。まだ 6.4 のようです。

    [vagrant@localhost ~]$ sudo docker run centos /bin/echo /etc/redhat-release
    CentOS release 6.4 (Final)
    

    /bin/bash を実行すれば、コンテナ内でシェルが起動できます。

    [vagrant@localhost ~]$ sudo docker run -i -t centos /bin/bash
    bash-4.1#
    

    Vagrantfile

    CentOS 6.5 で Docker をインストールする Vagrantfile を書いています。ご参考まで。

    さいごに

    ついに CentOS で Docker が来ましたね。これで Docker 探索が捗ります:D

    ちなみに AWS でも試そうとしたのですが、Amazon Linux ではインストールはできたもの動作が不安定でした(たまたまかもですが)。CentOS は公式も AMI はまだ 6.4 のままだったので、まだ試していません。

    あ、公式サイトでも RHEL/CentOS のインストール手順が掲載されましたね。(昨晩は無かった。。。)

    Requirements and Installation on Red Hat Enterprise Linux / CentOS – Docker Documentation

    参考

    Docker Documentation – Docker Documentation
    Docker: Linuxコンテナを使ってアプリケーションの配置を支援する
    仮想環境構築に docker を使う – apatheia.info

    • コメント (Close): 0
    • トラックバック (Close): 0

    PHP開発環境のサンプルVagrantfile

    この記事の所要時間: 510

    PHPカンファレンス2013でPHP開発環境をVagrantで作る発表を行ったのですが、具体的なVagrantfileが欲しいという声を頂いたので、GitHubに公開しました。

    vagrant

    ご自身で構築するベースになれば良いと思うので、どう作れば良いの?と言う方は参考にしてみて下さい。

    なお、このリポジトリの Vagrantfile は、開発PC内の VirtualBox 上で開発環境として動かすことを想定しています。セキュリティについては考慮されていないのでご注意下さい。

    vagrant-lapp-sample

    https://github.com/shin1x1/vagrant-lapp-sample

    このリポジトリは、PHPアプリケーション(CakePHP)をイメージしています。構成は以下です。

    • CentOS 6.4
    • Apache 2.2
    • PHP 5.4
    • PostgreSQL 9.3
    • phpPgAdmin

    ディレクトリ構成としては、app/ がアプリケーションのコードを置くディレクトリで、vagrant/ に Vagrant のファイルを置くイメージです。

    app/ には、サンプルとして CakePHP アプリケーションを置いています。(cake bake project したもの)

    使い方

    git clone でプロジェクトのコードを取得して、あとは vagrant ディレクトリ で、vagrant up を実行するだけです。

    $ git clone https://github.com/shin1x1/vagrant-lapp-sample
    $ cd vagrant-lapp-sample/vagrant
    $ vagrant up
    

    アプリケーションへのアクセス

    ブラウザから http://192.168.33.30/ にアクセスすると、PHPアプリケーションを実行することができます。

    phpPgAdminへのアクセス

    ブラウザから http://192.168.33.30/phpPgAdmin/ にアクセスすると、phpPgAdmin を利用できます。ユーザは vagrant、パスワードは pass です。(厳密にはパスワードは何でも ok です)

    ポイント

    synced_folder

    このリポジトリのルートディレクトリ( app/ があるディレクトリ)を synced_folder に設定しており、仮想マシンからは /share でアクセスすることができます。

    つまり、ホストPCで app/webroot/index.php というファイル編集すると、仮想マシンでは /share/app/webroot/index.php のファイルが自動で更新されます。

    ドキュメントルート

    Apache のドキュメントルートは、/share/app/webroot に設定しています。

    これは vagrant/httpd.conf で設定しており、プロビジョニング実行時に /etc/httpd/conf/httpd.conf に上書きされます。変更が必要であれば、vagrant/httpd.conf を編集して、vagrant provision でプロビジョニングを再実行すると良いでしょう。

    なお php.ini も同様に vagrant/php.ini を用意しています。

    設定ファイルの準備

    Apache や PHP などの設定ファイルを準備する際は、下記手順で行っています。

    仮想マシン内での /vagrant ディレクトリが、ホストPCでは Vagrantfile があるディレクトリと synced_folder になっているのがポイントです。

    • まずが vagrant up で仮想マシンを起動
    • vagrant ssh でログインして、yum で対象パッケージをインストール
    • 設定ファイルを変更、動作確認
    • cp -a /etc/http/conf/http.conf /vagrant/
    • ホスト PC の variant/ に httpd.conf がコピーされる
    • プロビジョニングで、/vagrant/httpd.conf を /etc/httpd/conf/ にコピーするコードを書いておく

    データベース

    この Vagrantfile では、データベースの構築は行っていますが、アプリケーションで必要なテーブル定義などは行っていません。

    このあたりはプロジェクトによって方法が異なると思いますが、フレームワークやライブラリ等でマイグレーション機能があればそちらを、無ければ dmp ファイルを適用するコマンドをプロビジョニングで記述することになります。
    ( PostgreSQL であれば、 psql -Uvagrant app < pgsql.dmp など。)

    シェルプロビジョニング

    プロビジョニングには、シェルを使っています。

    普段、サーバにSSHログインして yum や apt-get などでインストールしているコマンドをそのまま Vagrantfile に記述していくだけなので、簡単に書けるのが利点です。

    Chef や Puppet、Ansible などのプロビジョニングツールを利用しても良いのですが、以前にこういったツールを使ったことが無いのであれば、まずはシェルで構築してみて、次の段階として好みのプロビジョニングツールを試してみるがおすすめです。(もちろん、一気にプロビジョニングツールを使いたい方はその方法でも問題ありません。)

    Composer

    composer.json が存在すれば、composer.phar をダウンロードして、composer install を実行するようにしています。

    このリポジトリでは、CakePHP と PHPUnit を Composer でインストールしています。

    • コメント (Close): 0
    • トラックバック (Close): 0

    Vagrantで作るPHP開発環境[実践編]をPHPカンファレンス2013で発表してきた

    この記事の所要時間: 354

    2013/09/15に開催されたPHPカンファレンス2013でVagrantに関する発表をしてきました。

    発表資料はこちらです。

    Vagrant で作る PHP 開発環境 実践編 from Masashi Shinbara

    (2013/10/09追記)
    PHP開発環境を構築するサンプル Vagrantfile をアップしました。
    PHP開発環境のサンプルVagrantfile

    第7回関西PHP勉強会で発表した下記の内容をベースに、より実践的な内容を追加しました。

    もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境 from Masashi Shinbara

    PHPシステムの開発環境をVagrantで作ることを題材に、基本的な流れをお話しました。

    ポイントは、プロビジョニングにシェルを使う部分と、やはり synced_folder ですね。AWS上にも同じ環境を構築できる部分ももう少し深くお話したかったのですが、時間が足りませんでした><

    また、Vagrantfile があるディレクトリ(vagrant upしたカレントディレクトリ)も synced_folder となっていて、仮想マシンでは /vagrant としてアクセスできるということも知っておくと便利です。これを利用するとChefのtemplateリソースのように設定ファイルをあらかじめ用意しておいて、所定の場所にコピーするなどが簡単にできます。

    発表後には何人かの方にフィードバックを頂いて、Vagrant + Chef-solo を一気にやって躓いたという方やPHPでプロビジョニングをやることもできるという点に気付いた方もいて、シェルスクリプトをプロビジョニングに使う方法もあるよということが伝わって良かったです。

    なかには、PHPを使っていないけど、Vagrantの話を聞きにきました!という方もいて、個人的にはとても嬉しかったです。

    ちなみにスライドにある「Vagrantが見せる夢」は、今年のPHPカンファレンスのテーマが「PHPの夢を語ろう。」となっているからです:D Vagrantを使うとより多くの人が簡単にPHP開発環境を手にすることができる、というのは実際に思うところです。

    今回は 2F 小展示ホールで発表したのですが、ここは以前のPHPカンファレンスではメイン会場として使われていた場所で、落ち着いて発表することができました。会場の雰囲気も良く、あっという間に発表時間が過ぎました。参加頂いたみなさんありがとうございました!

    発表でも触れましたが、Vagrant はじめの一歩として執筆したVagrant入門ガイドは下記です。こちらも合わせて、よろしくおねがいしますm(_ _)m

    PHPエンジニア養成読本

    9/13に発売された「PHPエンジニア養成読本」をイベント会場内のジュンク堂さんにて販売して頂きました。おかげさまで持ち込まれていた在庫は全て完売ということになりました。ご購入いただいた、みなさんありがとうございましたm(_ _)m

    途中、サイン会なども開かれていて、購入して頂いた方と少しお話することができ、楽しかったです。

    LT 司会

    カンファレンスの最後といえば LT 大会!今回も WordCamp Tokyo とPHPカンファレンスとで合同の LT 大会だったのですが、PHPカンファレンス側の司会として登壇しました。スタッフでも無いのに申し訳ない気もしたのですが、後で聞くと皆さんオーバーワークだったようで(5トラックもあったので。。。)、少しでも負担減に協力できたのなら良かったです。

    ただ、もしかするとスタッフの中でやってみたい方もいたかもしれないので、次回は手を挙げると良いと思います。

    カンファレンスセッション

    今回は特に色々とやることが多かったので、他の方のセッションはほとんど参加できませんでした。。。PHP言語系やRubyからPHPへの話、あとインフラ系の話は面白そうだと思っていたのですが、自身のやることと、あと久しぶりに会う人と話すのが楽しく、気がつくと終わっていました。TLを見ると、かなり面白そうな内容だったようなので、あとでUstやスライドを見てみます。

    今年は 5 トラックということで、運営は大変だったと思うのですが、スピーカーとして参加した私はとても快適に過ごすことができました。運営スタッフのみなさん、本当にありがとうございました。

    • コメント (Close): 0
    • トラックバック (Close): 0

    Vagrantをはじめてみたい方へ「Vagrant入門ガイド」を書きました

    この記事の所要時間: 337


    vagrant_beginners_guide

    「Vagrant入門ガイド」という電子書籍を技術評論社さんから出版しました。Kindle ストアGihyo Digital Publishing にて購入できます。

    Vagrantは、まだエンジニアが中心に触っている状況ですが、いずれはWebデザイナーやコーダーの方など、サーバ構築を自分ではやらない人にも、制作するWebサイト、システムの動作検証を行う環境として利用する場面が増えていくと思います。

    blog エントリなども多数あるのですが、断片的な情報も多く、また、Vagrant自身の進化が早いため、最新の環境だと上手くインストールできなかったり、動かないということがままあります。(このblogの過去エントリも。。。)

    もちろん、じっくりと調べていけば解決できる問題なのですが、できれば、はじめの一歩くらいは、まとまった情報が日本語であると良いなと思い、本書を書きました。

    目次

    本書は、Vagrantはじめの一歩ということで、vagrantコマンドの使い方が中心となっています。順に進んでいけば、自分のPCにVargrantとVirtualBoxをインストールして、仮想マシンを起動する流れが出来上がります。

    本書の内容をベースに、自らVagrant上で仮想サーバを構築していくならVagrantfileやプロビジョニングを習得していくと良いでしょう。また、誰か作ったVargrantfile(Githubに公開されているものやチームのエンジニアが作ったものなど)を使うだけなら、これでVargrantを活用することができます。

    基本は入門者向けの内容ですが、すでにVargrantを使っている人向けということで、vagrantコマンドの各サブコマンドの引数や実行例を付録に収録しています。(正直これを書くためにはじめて知ったオプションもあり、個人的にも勉強になりました:D)

    Vagrantの使い方は人それぞれだと思うのですが、特にWeb制作の現場では、エンジニアで無い人にも広く使ってもらえる可能性のあるソフトウェアだと思います。本書がVagrantを触るきっかけになれば嬉しいです。

    なおVagrantの対象バージョンですが、今週リリースされたばかりの Vagrant 1.3.1 に対応しています。(さすが電子書籍!)

    1.Vagrantとは
    プロバイダ(Provider)
    プロビジョニング(Provision)
    Boxファイル
    Vagrantfile
    vagrantコマンド
    まとめ
    
    2.環境設定
    VirtualBoxのインストール
    Vagrantのインストール
    
    3.設定ファイルの準備
    Boxes(Boxファイル)のインストール
    Boxファイルの追加
    Boxファイルの確認
    Boxファイルの削除
    Vagrantfileの作成
    Vagrantfileの生成
    
    4.仮想マシンの起動と操作
    仮想マシンを起動
    仮想マシンへSSHログイン
    仮想マシンの状態を確認
    仮想マシンを停止
    仮想マシンを削除
    
    5.仮想マシンでWebサーバを構築
    
    6.プラグインで拡張
    saharaプラグインをインストール
    saharaプラグインを使う
    まとめ
    
    7.応用(複数の仮想マシン)
    複数の仮想マシンを起動
    仮想マシンのエクスポート
    
    Appendix:vagrant サブコマンド
    box
    destroy
    halt
    init
    plugin
    plugin uninstall
    provision
    reload
    resume
    ssh
    ssh-config
    status
    suspend
    up
    

    PHPカンファレンス2013でVagrantについてお話します

    今週末(2013/09/14)に東京で開催されるPHPカンファレンス2013で、Vargrantに関するセッションを行ないます。このセッションは本書の内容を超えて、PHPの開発現場でVargrantを活用するお話をしたいと思っています。

    ちなみに「PHPエンジニア養成読本」も明日発売だったりするので、本書と合わせてよろしくお願いしますm(_ _)m

    • コメント (Close): 0
    • トラックバック (Close): 0

    Vagrant + VirtualBox で nfs を使って、synced_folder を速くする

    この記事の所要時間: 354

    Vagrant + VirtualBox で便利な synced_folder を nfs を使ってパフォーマンスを向上する方法です。

    vagrant

    開発環境として Vagrant + VirtualBox を使う上で欠かせないのが synced_folder です。ホストとゲスト間でディレクトリを共有できるので、ホストで書いたコードをゲストですぐに実行することができます。

    synced_folder はVirtualBox が持つ shared folders という機能をつかているのですが、代わりに nfs を使うことで、パフォーマンスを向上させることができます。

    nfsd をホスト側で起動

    synced_folder に nfs を利用するには、ホスト側で nfsd を起動する必要があります。

    OS X(Lion / Mountain Lion)では標準で nfsd がインストールされているのでこれを利用します。nfsd コマンドで enable にすると、nfsd を起動して、さらに再起動時も自動で nfsd が起動するようになります。

    なお nfsd を起動するには /etc/exports が必要になります。存在しない場合は、作成しておきます(内容は空で良いです)。

    $ sudo touch /etc/exports
    $ ls /etc/exports
    /etc/exports
    

    nsfd enable コマンドで nfsd を起動します。

    $ sudo nfsd enable
    
    $ sudo nfsd status
    nfsd service i enabled
    nfsd is running (pid xxxxx, 8 threads)
    

    nfsd disable コマンドを実行すると、nfsd が停止して、再起動後も起動しなくなります。

    $ sudo nfsd disable
    
    $ sudo nfsd status
    nfsd service is disabled
    nfsd is not running
    

    Vagrantfile で nfs を指定

    Vagrantfile で synced_folder を NFS で利用する設定を行ないます。

    ポイントは2つです。まず host-only ネットワークで IP アドレスを指定します。そして、synced_folder に :nfs => true を設定します。

    vagrant up すると、synced_folder で指定したディレクトリをゲストが NFS マウントします。

    $ vagrant up
    Bringing machine 'default' up with 'virtualbox' provider...
    (snip)
    [default] Exporting NFS shared folders...
    Preparing to edit /etc/exports. Administrator privileges will be required...
    The nfsd service does not appear to be running.
    Starting the nfsd service (use 'enable' to permanently enable)
    [default] Mounting NFS shared folders...
    

    ゲストにログインすると NFS マウントしていることが分かります。

    $ vagrant ssh
    [vagrant@localhost ~]$ df -h
    Filesystem            Size  Used Avail Use% マウント位置
    /dev/mapper/VolGroup-lv_root
                          8.4G  1.1G  7.0G  14% /
    tmpfs                 230M     0  230M   0% /dev/shm
    /dev/sda1             485M   32M  429M   7% /boot
    /vagrant              931G  359G  572G  39% /vagrant
    192.168.33.1:/path/to/directory                      <---- NFS でマウントした synced_folder
                          931G  359G  572G  39% /share
    

    ホストの /etc/exports には下記のように対象のディレクトリが自動で追記されています。

    $ cat /etc/exports
    # VAGRANT-BEGIN: 0f0224b9-b61c-47ff-b769-49d1e3103b28
    "/path/to/directory" 192.168.33.30 -mapall=501:20
    # VAGRANT-END: 0f0224b9-b61c-47ff-b769-49d1e3103b28
    

    なお、もし IP が指定されていないと、vagrant up 時に下記のようなエラーが表示されます。

    $ vagrant up
    Bringing machine 'default' up with 'virtualbox' provider...
    (snip)
    NFS requires a host-only network with a static IP to be created.
    Please add a host-only network with a static IP to the machine
    for NFS to work.
    

    パフォーマンス

    NFS を使った場合、実際の開発でどれほど恩恵があるかを判断するために簡単な Web アプリケーションを siege で計測してみました。

    対象アプリケーションはCakePHPのコントローラで「Hello」という文字列を出力するのみで、DBへの接続は行なっていません。それぞれの方式でマウントしたディレクトリをdocument_rootに指定しています。

    ホストから「siege -c 10 -t 60s -b http://URL/」で5回計測を行ない、その平均値を算出しました。

    計測結果は下記になります。NFS の方が 3.5倍多くのリクエストをさばいており、パフォーマンスが向上していることが分かります。

    方式 計測値 Rate
    share folders(synced_folderデフォルト) 11.366 trans/sec 1
    NFS 40.066 trans/sec 3.52

    参考までに、Vagrant サイトでは実際の Rails プロジェクトのテストを使った結果が掲載されています。NFS が 22s に対して、Shared folders は 5m14s となっており、大きく速度が異なっています。

    VirtualBox Shared Folders: 5m 14s
    Host File System: 10s
    Native VM File System: 13s
    NFS Shared Folders: 22s
    NFS Shared Folders (warm cache): 14s
    http://docs-v1.vagrantup.com/v1/docs/nfs.html

    まとめ

    NFS を使うことで簡単に synced_folder のパフォーマンスを上げることができます。synced_folder のパフォーマンスに不満がある場合は NFS を一度試してみて下さい。

    ただ、ホスト側で nfsd を動かす必要があるので、Windows など nfsd が標準でインストールされていない環境では気軽に使えないのが難点ですね。

    参考

    • コメント (Close): 0
    • トラックバック (Close): 0

    Vagrant を使うなら、VirtualBox 4.2.16 以降で

    この記事の所要時間: 633

    VirtualBox 4.2.14 + Vagrant 1.2.2 の組み合わせで、正常に動作しなかった問題が、VirtualBox 4.2.16 で解決されたようです。

    VirtualBox 4.2.14 + Vagrant 1.2.2 の組み合わせで、一部の環境にて vagrant up ができないという現象がありました。

    $ vagrant up
    Bringing machine 'default' up with 'virtualbox' provider...
    [default] Importing base box 'precise32'...
    There was an error while executing `VBoxManage`, a CLI used by Vagrant
    for controlling VirtualBox. The command and stderr is shown below.
    
    Command: ["import", "/Users/hans/.vagrant.d/boxes/precise32/virtualbox/box.ovf"]
    
    Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
    Interpreting /Users/hans/.vagrant.d/boxes/precise32/virtualbox/box.ovf...
    OK.
    0%...
    Progress object failure: NS_ERROR_CALL_FAILED
    

    https://github.com/mitchellh/vagrant/issues/1847

    Vagrant の github サイトでもこの問題に関する issue が上がっていましたが、いずれも VirtualBox 4.2.16 で解決したようです。

    手元の環境をVirtualBox 4.2.8 から 4.2.16 にアップグレードしたところ、Vagrant 1.2.2 との組み合わせで正常に動作しました。(sahara プラグインもちゃんと動きました:D)

    • Mac OS X 10.7.5
    • Vagrant 1.2.2
    • VirtualBox 4.2.16
    $ vagrant -v
    Vagrant version 1.2.2
    $ VirtualBox -h
    Oracle VM VirtualBox Manager 4.2.16
    (C) 2005-2013 Oracle Corporation
    All rights reserved.
    (snip)
    
    $ vagrant init precise32 http://files.vagrantup.com/precise32.box
    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.
    
    $ vagrant up
    Bringing machine 'default' up with 'virtualbox' provider...
    [default] Box 'precise32' was not found. Fetching box from specified URL for
    the provider 'virtualbox'. Note that if the URL does not have
    a box for this provider, you should interrupt Vagrant now and add
    the box yourself. Otherwise Vagrant will attempt to download the
    full box prior to discovering this error.
    Downloading or copying the box...
    Extracting box...te: 1905k/s, Estimated time remaining: --:--:--)
    Successfully added box 'precise32' with provider 'virtualbox'!
    [default] Importing base box 'precise32'...
    [default] Matching MAC address for NAT networking...
    [default] Setting the name of the VM...
    [default] Clearing any previously set forwarded ports...
    [default] Fixed port collision for 22 => 2222. Now on port 2201.
    [default] Creating shared folders metadata...
    [default] Clearing any previously set network interfaces...
    [default] Preparing network interfaces based on configuration...
    [default] Forwarding ports...
    [default] -- 22 => 2201 (adapter 1)
    [default] Booting VM...
    [default] Waiting for VM to boot. This can take a few minutes.
    [default] VM booted and ready for use!
    [default] Configuring and enabling network interfaces...
    [default] Mounting shared folders...
    [default] -- /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: Fri Sep 14 06:22:31 2012 from 10.0.2.2
    vagrant@precise32:~$
    
    • コメント (Close): 0
    • トラックバック (Close): 0

    ホーム > Vagrant

    検索
    フィード
    メタ情報

    Return to page top