Window vagrantインストールの導入

26424 ワード

以前、仮想マシンをインストールするのがどんなに面倒だったかを思い出します.まず、オペレーティングシステムのミラーファイルを見つけるのに苦労し、仮想化ソフトウェアをインストールし、GUIインタフェースの操作に従って一歩一歩作成し、プロセス全体に時間と労力がかかります.しかし、Vagrantを使ってから、腰が痛くなくて、足が痛くなくて、一気に5つの仮想機を起こすのはまだ苦労していません.

Vagrantって何?


これは公式サイト上Vagrantの紹介です.
Create and Configure lightweight, reproducible, and portable development environments.
軽量で再現性の高い携帯型の開発環境を作成および構成するために使用されます.
Vagrantを使用すると、仮想マシンの作成プロセス全体を自動化し、高度な再利用性を実現できます.開発者であれば、チームメンバーごとに同じ開発環境を簡単に作成し、「私のマシンで働ける」などのバグを根本的に防ぐことができます.もしあなたがテスト担当者であれば、同じテスト環境を1つ以上作成して並行してテストを実行することができ、テストが終わった後、これらのテスト環境を1つのキーで破棄して、本当のオンデマンドで作成することができます.もしあなたがdevopsのメンバーで、AWS、Chefなどのツールと付き合う必要があるならば、Vagrantは良い結合点です.VagrantでAWS上で直接仮想マシンを作成し、Chefのスクリプトを自動的に実行して新しい仮想マシンを構成できます.

いくつかの概念


Vagrant機能を正式に紹介する前に、Vagrantが使用している概念を理解しておきましょう.
  • Provider-Vagrantが呼び出す仮想化ツールを指すベンダー.Vagrant自体は仮想マシンを作成する能力がありません.VirtualBox、VMWare、AWSなどの仮想化ツールを呼び出して作成します.
  • Box-Vagrantが直接使用できる仮想マシンミラーファイル.異なるProviderに対して、Boxファイルのフォーマットは異なります.
  • Vagrantfile-VagrantはVagrantfileの構成に従って仮想マシンを作成する.Vagrantfileファイルでは、どのBoxを使用するか、どのソフトウェアを事前にインストールする必要があるか、仮想マシンのネットワーク構成などを指定する必要があります.

  • Vagrantのインストール


    Vagrantのインストールは非常に簡単で、Downloadsページで最新バージョンのインストールを選択できます.VagrantはWindows、Linux、Macなどのプラットフォームをサポートしています.

    Box管理


    Vagrantを使用する前に、VagrantにBox、すなわちVagrantが使用できる仮想マシンミラーファイルを追加します.Vagrant公式サイト自体はミラーファイルをメンテナンスしており、直接使用することができます.http://www.vagrantbox.es/もっとboxが使える.
    1
    
    2
    
    3
    
    4
    
    5
    
    6
    
    
    #    precise32 box    $ vagrant init precise32 http://files.vagrantup.com/precise32.box $ vagrant box list precise32 (virtualbox) $ vagrant box remove precise64 virtualbox 

    BoxはProviderに関連しており、各BoxはProvierを指定しなければならず、対応するProvierを使用してのみBoxを正しく使用することができます.

    仮想マシンの作成と実行

    1
    
    2
    
    3
    
    4
    
    5
    
    6
    
    7
    
    8
    
    9
    
    10
    
    11
    
    12
    
    13
    
    14
    
    15
    
    16
    
    17
    
    18
    
    19
    
    20
    
    21
    
    22
    
    23
    
    
    $ vagrant box list precise32 (virtualbox) $ vagrant init precise32 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] 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] 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] Mounting shared folders... [default] -- /vagrant 
    vagrant init precise32現在のディレクトリの下に、precise 32をboxとして使用するVagrantfieファイルが生成されます.vagrant upvirtual boxというproviderを使用してprecise 32という仮想マシンを初期化して起動する.
    Vagrantfileというファイルを詳しく見ることができます.
    Vagrantfile
    1
    
    2
    
    3
    
    4
    
    5
    
    6
    
    7
    
    8
    
    9
    
    10
    
    11
    
    12
    
    13
    
    14
    
    15
    
    16
    
    17
    
    18
    
    19
    
    20
    
    21
    
    22
    
    23
    
    24
    
    25
    
    26
    
    27
    
    28
    
    29
    
    30
    
    31
    
    32
    
    33
    
    34
    
    35
    
    36
    
    37
    
    38
    
    39
    
    40
    
    41
    
    42
    
    43
    
    44
    
    45
    
    46
    
    47
    
    48
    
    49
    
    50
    
    51
    
    52
    
    53
    
    54
    
    55
    
    56
    
    57
    
    58
    
    59
    
    60
    
    61
    
    62
    
    63
    
    64
    
    65
    
    66
    
    67
    
    68
    
    69
    
    70
    
    71
    
    72
    
    73
    
    74
    
    75
    
    76
    
    77
    
    78
    
    79
    
    80
    
    81
    
    82
    
    83
    
    84
    
    85
    
    86
    
    87
    
    88
    
    89
    
    90
    
    91
    
    92
    
    93
    
    94
    
    95
    
    96
    
    97
    
    98
    
    99
    
    100
    
    101
    
    102
    
    103
    
    104
    
    105
    
    106
    
    107
    
    108
    
    109
    
    110
    
    111
    
    
    # -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API      VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|  #    box  config.vm.box = "precise32"  # Create a forwarded port mapping which allows access to a specific port  # within the machine from a port on the host machine. In the example below,  # accessing "localhost:8080" will access port 80 on the guest machine.  # config.vm.network :forwarded_port, guest: 80, host: 8080  # Create a private network, which allows host-only access to the machine  # using a specific IP.  # config.vm.network :private_network, ip: "192.168.33.10"  # Create a public network, which generally matched to bridged network.  # Bridged networks make the machine appear as another physical device on  # your network.  # config.vm.network :public_network  # If true, then any SSH connections made will enable agent forwarding.  # Default value: false  # config.ssh.forward_agent = true  # Share an additional folder to the guest VM. The first argument is  # the path on the host to the actual folder. The second argument is  # the path on the guest to mount the folder. And the optional third  # argument is a set of non-required options.  # config.vm.synced_folder "../data", "/vagrant_data"  # Provider-specific configuration so you can fine-tune various  # backing providers for Vagrant. These expose provider-specific options.  # Example for VirtualBox:  #  # config.vm.provider :virtualbox do |vb|  # # Don't boot with headless mode  # vb.gui = true  #  # # Use VBoxManage to customize the VM. For example to change memory:  # vb.customize ["modifyvm", :id, "--memory", "1024"]  # end  #  # View the documentation for the provider you're using for more  # information on available options.  # Enable provisioning with Puppet stand alone. Puppet manifests  # are contained in a directory path relative to this Vagrantfile.  # You will need to create the manifests directory and a manifest in  # the file precise32.pp in the manifests_path directory.  #  # An example Puppet manifest to provision the message of the day:  #  # # group { "puppet":  # # ensure => "present",  # # }  # #  # # File { owner => 0, group => 0, mode => 0644 }  # #  # # file { '/etc/motd':  # # content => "Welcome to your Vagrant-built virtual machine!  # # Managed by Puppet.
    "
    # # } # # config.vm.provision :puppet do |puppet| # puppet.manifests_path = "manifests" # puppet.manifest_file = "site.pp" # end # Enable provisioning with chef solo, specifying a cookbooks path, roles # path, and data_bags path (all relative to this Vagrantfile), and adding # some recipes and/or roles. # # config.vm.provision :chef_solo do |chef| # chef.cookbooks_path = "../my-recipes/cookbooks" # chef.roles_path = "../my-recipes/roles" # chef.data_bags_path = "../my-recipes/data_bags" # chef.add_recipe "mysql" # chef.add_role "web" # # # You may also specify custom JSON attributes: # chef.json = { :mysql_password => "foo" } # end # Enable provisioning with chef server, specifying the chef server URL, # and the path to the validation key (relative to this Vagrantfile). # # The Opscode Platform uses HTTPS. Substitute your organization for # ORGNAME in the URL and validation key. # # If you have your own Chef Server, use the appropriate URL, which may be # HTTP instead of HTTPS depending on your configuration. Also change the # validation key to validation.pem. # # config.vm.provision :chef_client do |chef| # chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME" # chef.validation_key_path = "ORGNAME-validator.pem" # end # # If you're using the Opscode platform, your validator client is # ORGNAME-validator, replacing ORGNAME with your organization name. # # If you have your own Chef Server, the default validation client name is # chef-validator, unless you changed the configuration. # # chef.validation_client_name = "ORGNAME-validator" end

    上記のファイルからVagrantfileは、使用するBox、転送が必要なポート、指定されたディレクトリの同期、Chef、puppetなどの仮想マシンの事前構成など、多くのものを配置できることがわかります.
    Vagrantfileの構成を変更した場合は、vagrant reloadを実行して新しい構成を適用するだけです.

    ディレクトリの同期


    仮想マシンが起動したらsshに行けます.
    1
    
    2
    
    3
    
    4
    
    5
    
    6
    
    7
    
    8
    
    9
    
    10
    
    11
    
    
    $ 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 Oct 2 09:41:08 2013 from 10.0.2.2 vagrant@precise32:~$ who vagrant pts/0 2013-10-02 09:47 (10.0.2.2) vagrant@precise32:~$ hostname precise32 vagrant@precise32:~$ 

    Vagrantは、仮想マシンのルートディレクトリの下にvagrantというディレクトリを自動的に作成します.このディレクトリは、ホストVagrantfileが存在するディレクトリと同期します.この同期は相互であり、ホストディレクトリのファイルを変更しても、仮想マシンディレクトリのファイルを変更しても、自動的に他方に同期することができます.
    1
    
    2
    
    3
    
    4
    
    5
    
    6
    
    7
    
    8
    
    9
    
    
    vagrant@precise32:~$ cd /vagrant/ vagrant@precise32:/vagrant$ ls Vagrantfile vagrant@precise32:/vagrant$ touch test.txt vagrant@precise32:/vagrant$ exit logout Connection to 127.0.0.1 closed. $ ls Vagrantfile test.txt 

    マルチマシン管理


    Vagrantfileは複数のマシンの構成をサポートしています.複数のサーバとデータベース環境を設定する必要がある場合は、1つのVagrantfileで行うことができます.
    Vagrantfile
    1
    
    2
    
    
    Vagrant.configure("2") do |config| config.vm.provision "shell", inline: "echo Hello" config.vm.define "web" do |web| web.vm.box = "apache" end config.vm.define "db" do |db| db.vm.box = "mysql" end end 

    このファイルには2つのboxが構成されています.1つはweb、1つはdbです.仮想マシンを起動するには、仮想マシン名を付ける必要があります.
    1
    
    2
    
    3
    
    4
    
    5
    
    6
    
    7
    
    8
    
    
    #  web    $ vagrant up web #  db    $ vagrant up db #           $ vagrant up 

    VMをシャットダウン


    Vagrantは仮想マシンをシャットダウンする方法をいくつか提供しており、状況に応じて異なる方法を選択することができます.vagrant suspend仮想マシンをスリープ状態にする.ホストは仮想マシンの現在の状態を保存します.さらにvagrant up仮想マシンを起動すると、以前に動作していた状態に戻ることができます.この方法の利点は、スリープと起動速度が数秒しかないことです.欠点は、現在のステータスを格納するために追加のディスク領域が必要であることです.vagrant haltシャットダウンです.再起動するにはvagrant upコマンドを使いますが、時間がかかります.vagrant destroy仮想マシンはディスクから削除されます.再作成する場合はvagrant upコマンドを使用します.
    さらに1.2以上のバージョンのVagrantでは、プラグインメカニズムも参照されています.vagrant pluginによって様々なpluginを追加することができ、Vagrantのアプリケーションにより柔軟性と的確性をもたらす.例えばvagrant-windowsのプラグインを追加してwindowsシステムのサポートを増やし、vagrant-awsプラグインを追加することでAWSに仮想マシンを作成する機能を実現します.自分のプラグインを書くこともできます.Vagrantはrubyが書いたgemなので、そのプラグインの作成にもRuby言語が使われています.ここではあまり紹介しません.興味のある方は行ってみてください公式サイト調べてみてください.