Vagrant入門

11844 ワード

Vagrantは、英語で言えばorchestration toolの簡単な導入ツールです.開発者が迅速に開発環境を構築し、テスト者がテスト環境を構築するのを支援します.
Vagrantの基本的な動作原理は以下の通りです.
  • まず、プロファイルを読み取ることによって、ユーザが必要とする環境のオペレーティングシステム、ネットワーク構成、基礎ソフトウェアなどの情報を知る.
  • その後、仮想化管理ソフトウェアのAPI(VMWare Fusion、Oracle VirtualBox、AWS、OpenStackなど)を呼び出して、ユーザーのために基礎環境を作成します.
  • 最後に、ユーザ定義のインストールスクリプト(shell、puppet、chef)を呼び出して、対応するサービスとパッケージをインストールする.

  • Vagrantの主な適用シーン
  • 開発環境の導入開発者として異なる開発言語と異なるパッケージ依存に関わる可能性があります.開発環境を構築するのはいつも面倒なことです.JavaのMavenのような強力なプロジェクト構築ツールのサポートがある言語もありますが、Pythonのような便利なツールがない言語もあります.特に時間が経つにつれて開発環境も混乱する.Vagrantは、スクリプトファイルの説明によって仮想マシンインスタンスを作成し、shellスクリプトまたはpuppetによって開発環境を構成し、開発環境の自動化構築を解決します.同時にvagrantが作成した開発環境も簡単に整理され、共有され、特にチームでは標準的な開発環境を構築することが容易になります.
  • テスト環境の配置はテストの一環の中の集積テスト、特に分布式システムの集積テストに対して、テスト環境の構築も時間と労力のかかる仕事である.Vagrantは複数のインスタンスの導入をサポートし、単一マシン上で複数の仮想マシンインスタンスを作成して自動化された統合テストを行うことができます.単機のテスト環境がまだ十分でない場合は、AWSやOpenStackのようなクラウドにこの作業を任せることもできます.

  • Vagrantの主な概念
  • ProviderProviderとは、vmwareやvirtual boxなど、Vagrantに仮想化サポートを提供する特定のソフトウェアを指します.
  • BoxBoxは、仮想マシンミラーを表します.VagrantはPorviderによって多くのベースミラー(urlでs 3から取得)を提供し,ユーザは自分のニーズに応じてvagrant packageを用いて自分のboxを作成することができる.
  • ProjectディレクトリとディレクトリのVagrantfileはvagrantのプロジェクトを構成し、プロジェクトの下にサブプロジェクトがあり、サブプロジェクトのVagrantfile構成は親プロジェクトの構成を継承し、書き換えることができます.プロジェクトの仮想マシンインスタンスは、このディレクトリ(~/.vagrant.d/box)に格納されないため、gitなどのバージョン管理ツールでプロジェクトを管理できます.
  • VagrantfileVagrantのプロファイルで、Rubyの構文記述を使用します.プロジェクトで使用するbox,ネットワーク,共有ディレクトリ,provisionスクリプトなどを定義した.vagrant upコマンドが実行されると、現在のディレクトリのVagrantfileが読み込まれます.
  • ProvisioningProvisioningとは、仮想マシンインスタンスが起動した後、LAMPサービスのインストールなど、必要なインフラストラクチャの作業を指します.Vagrantはshell,puppet,chefを使用してprovisioning作業を完了することをサポートします.
  • PluginVagrantはプラグインメカニズムを提供し、ホストOS、GuestOS、Provider、Provisionerのサポート、例えばvagrantのawsとopenstackのサポートをpluginによって実現することができます.

  • QuickStart
    Providerのインストール
    仮想化されたProviderとしてVirtualBoxを使用し、VirtualBoxをダウンロードしてインストールすればよい.https://www.virtualbox.org/wiki/Downloads
    Vagrantのインストール
    Vagrantはwindows,mac,deb,rpmのインストールパッケージを提供し,最新バージョン1.3.5のインストールをダウンロードすればよい.Ubuntuソフトウェアウェアハウスのバージョンは1.0.1で、古いので、プロファイルを読み込むときに問題が発生する可能性がありますので、直接ウェアハウスからインストールすることはお勧めしません.
    http://downloads.vagrantup.com/
    プロジェクトの作成
    フォルダを作成し、
    mkdir linux-dev
    
    cd linux-dev

    プロジェクトの初期化
    vagrant init precise64 http://files.vagrantup.com/precise64.box

    プレイコマンドを実行すると、現在のディレクトリの下に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|
    
      # All Vagrant configuration is done here. The most common configuration
    
      # options are documented and commented below. For a complete reference,
    
      # please see the online documentation at vagrantup.com.
    
    
    
      # Every Vagrant virtual environment requires a box to build off of.
    
      config.vm.box = "precise64"
    
    
    
      # The url from where the 'config.vm.box' box will be fetched if it
    
      # doesn't already exist on the user's system.
    
      config.vm.box_url = "http://files.vagrantup.com/precise64.box"
    
    
    
    ...

    このファイルには詳細な注釈と説明があり、config.vm.boxは使用するboxを指定し、そのboxがローカルに存在しない場合、vagrantは自動的にconfigからvm.box_urlでダウンロードしてローカルに追加します.
    名前からこのboxはubuntu server 12.04ビットのvirtual boxミラーであることがわかります.
    プロビジョンスクリプトの構成
    通常、オペレーティングシステムをインストールした後、ソフトウェアをインストールしたり、構成したりすることを望んでいます.provisioningスクリプトはちょうどこの仕事を完了することができます.たとえば、オペレーティングシステムのインストールが完了したらvimとgitを自動的にインストールします.
    Vagrantfileを編集し、行を追加
      # The url from where the 'config.vm.box' box will be fetched if it
    
      # doesn't already exist on the user's system.
    
      config.vm.box_url = "http://files.vagrantup.com/precise64.box"
    
      #        
    
      config.vm.provision "shell", path: "provision.sh"

    この行は、Vagrantfileと同じディレクトリの下にあるshellスクリプトを使用するprovisionを指定します.sh
    provisionを作成します.sh
    sudo apt-get install vim git -y

    インスタンスの起動
    linux-devディレクトリでvagrant upを実行すると、vagranはそのディレクトリのVagrantfileで指定された仮想マシンインスタンスを起動します.
    まず、vagrantはローカルでboxを検索し、なければリモートからダウンロードします(s 3からダウンロードするのが遅いので、まず迅雷オフラインでローカルにダウンロードしてからvagrant box addコマンドで追加することができます).
    その後、vagrantは仮想マシンを起動し、ネットワーク構成を行い、現在のディレクトリを仮想マシンの/vagrantの下にマウントし、仮想マシンと物理マシンで直接共有できるようにします.
    最後に、vagrantはprovisioningのプロセスを開始し、仮想マシンの基礎となるソフトウェアを構成します(最初の起動時にのみ行い、後でvagrant provisionコマンドでトリガーできます).
    AlexYang-mba:linux-dev alex$ vagrant up
    
    Bringing machine 'default' up with 'virtualbox' provider...
    
    [default] Importing base box 'precise64'...
    
    [default] Matching MAC address for NAT networking...
    
    [default] Setting the name of the VM...
    
    [default] Clearing any previously set forwarded ports...
    
    [default] Creating shared folders metadata...
    
    [default] Clearing any previously set network interfaces...
    
    [default] Preparing network interfaces based on configuration...
    
    [default] Forwarding ports...
    
    [default] -- 22 => 2222 (adapter 1)
    
    [default] Booting VM...
    
    [default] Waiting for machine to boot. This may take a few minutes...
    
    [default] Machine booted and ready!
    
    [default] The guest additions on this VM do not match the installed version of
    
    VirtualBox! In most cases this is fine, but in rare cases it can
    
    cause things such as shared folders to not work properly. If you see
    
    shared folder errors, please update the guest additions within the
    
    virtual machine and reload your VM.
    
    
    
    Guest Additions Version: 4.2.0
    
    VirtualBox Version: 4.3
    
    [default] Mounting shared folders...
    
    [default] -- /vagrant
    vagrant provision
    
    
    
    [default] Running provisioner: shell...
    
    [default] Running: /var/folders/cy/jfbhmrh95bx7q5nqvg6h4qv00000gn/T/vagrant-shell20131023-1280-yxw9sy
    
    stdin: is not a tty
    
    Reading package lists...
    
    Building dependency tree...
    
    Reading state information...
    
    The following extra packages will be installed:
    
      git-man liberror-perl libgpm2 libpython2.7 patch vim-runtime

    SSH上陸
    vagrant sshコマンドを使用して、仮想マシンにログインし、次のような操作を行います.
    vagrant@precise64:~$ ls -lah /vagrant/
    
    total 16K
    
    drwxr-xr-x  1 vagrant vagrant  170 Oct 23 07:54 .
    
    drwxr-xr-x 24 root    root    4.0K Oct 23 07:19 ..
    
    -rw-r--r--  1 vagrant vagrant   32 Oct 23 07:54 provision.sh
    
    drwxr-xr-x  1 vagrant vagrant  102 Oct 23 05:51 .vagrant
    
    -rw-r--r--  1 vagrant vagrant 4.6K Oct 23 07:45 Vagrantfile

    インスタンスを閉じる
    インスタンスを閉じるには、vagrant suspending、vagrant halt、vagrant destroyの3つの方法が使用できます.
  • suspending、仮想マシンを一時停止し、仮想マシンの現在の状態(メモリとディスクが解放されない)を保存し、vagrant upコマンドを使用して運転を再開することができます.
  • halt、シャットダウン、仮想マシンは停止しますが、仮想マシンのインスタンスは保持され、破棄されず、正常なシャットダウンと理解できます.
  • destroyは、仮想マシンを破棄し、仮想マシンのインスタンスを破棄する.

  • 関連リソース
    公式サイト:http://www.vagrantup.com
    文書:http://docs.vagrantup.com/v2/
    Box: http://www.vagrantbox.es/