momoto.github.io

Vagrantをつかって仮想マシンを管理する

 Vagrantをつかって仮想マシンを管理する手引きです。Vagrantを利用するにはVirtualBoxやAWSなどのプロバイダを利用できる状態である必要があります。

  1. 試してみる

     Vagrantbox.esで紹介されているBoxファイルから仮想マシンを新しく作成します。 Boxファイルは次のウェブサイトでも公開されています。

     例えばFedora 18 x86 MinimalのBoxファイルをつかう場合、次のようにvagrant init [box-name] [box-url]を実行して、Vagrantのプロジェクトを開始します。

    $ mkdir vagrant-fedora-18
    $ cd vagrant-fedora-18/
    $ vagrant init fedora-18 http://static.stasiak.at/fedora-18-x86-2.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 [vm-name]を実行して、作成したVagrantのプロジェクトから仮想マシンを起動します。

    vagrant-fedora-18 $ vagrant up
    Bringing machine 'default' up with 'virtualbox' provider...
    [default] Box 'fedora-18' 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: 456k/s, Estimated time remaining: 0:00:01))
    Successfully added box 'fedora-18' with provider 'virtualbox'!
    [default] Importing base box 'fedora-18'...
    [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 VM to boot. This can take a few minutes.
    [default] VM booted and ready for use!
    [default] Mounting shared folders...
    [default] -- /vagrant
    

     仮想マシンの状態はvagrant statusやプロバイダのユーザインタフェースから確かめることができます。

    vagrant-fedora-18 $ vagrant status
    Current machine states:
    
    default                   running (virtualbox)
    

     起動している仮想マシンへSSH接続するにはvagrant sshを実行します。

    $ vagrant ssh
    [vagrant@localhost ~]$
    [vagrant@localhost ~]$ cat /etc/fedora-release
    Fedora release 18 (Spherical Cow)
    
  2. Boxを管理する

    • Boxの一覧 vagrant box list
    • Boxの追加 vagrant box add <name> <url>(VagrantfileをつくらずにBoxの追加だけを行います)
    • Boxの削除 vagrant box remove <name>

     仮想マシンからBoxファイルを作成するにはvagrant packageをつかいます。 Boxファイルは仮想マシンディスクイメージ(VMDK)、OVFファイル、そしてVagrantfile等をTAR形式でまとめたものであるようです。

    $ vagrant package
    [default] Attempting graceful shutdown of VM...
    [default] Clearing any previously set forwarded ports...
    [default] Creating temporary directory for export...
    [default] Exporting VM...
    [default] Compressing package to: vagrant-fedora-18/package.box
    
  3. 仮想マシンを管理する

     Vagrantのプロジェクトディレクトリ内から、ゲストOSの起動や停止などを操作できます。

    • 仮想マシンの起動 vagrant up
    • 仮想マシンの停止 vagrant halt
    • 仮想マシンの再起動 vagrant reload
    • 仮想マシンの一時停止 vagrant suspend
    • 仮想マシンの再開 vagrant resume
    • 仮想マシンへSSH接続 vagrant ssh

     仮想マシンの状態を確認するにはvagrant statusを実行します。

    $ vagrant status
    Current machine states:
    
    default                   running (virtualbox)
    
  4. MULTI-MACHINEを利用する

     複数の仮想マシンをコントロールできるMULTI-MACHINE環境を利用するには、Vagrantfileに仮想マシンの情報を定義します。 例えば、仮想マシンを2つ、異なるホスト名とBoxで定義する場合、VagrantfileのVagrant.configure(VAGRANTFILE_API_VERSION) do |config| ... endの間に、次のように記述します。

    config.vm.define :node1 do |node1_config|
      node1_config.vm.hostname = "node1"
    end
    config.vm.define :node2 do |node2_config|
      node2_config.vm.box = "centos-6.3"
      node2_config.vm.hostname = "node2"
    end
    

     上のようにVagrantfileを書き換えたあとvagrant upを実行してみると、ゲストのFedoraとCentOSが同時に起動します。

    $ vagrant up
    
    Bringing machine 'node1' up with 'virtualbox' provider...
    Bringing machine 'node2' up with 'virtualbox' provider...
    [node1] Importing base box 'fedora-18'...
    [node1] Matching MAC address for NAT networking...
    [node1] Setting the name of the VM...
    [node1] Clearing any previously set forwarded ports...
    [node1] Creating shared folders metadata...
    [node1] Clearing any previously set network interfaces...
    [node1] Preparing network interfaces based on configuration...
    [node1] Forwarding ports...
    [node1] -- 22 => 2222 (adapter 1)
    [node1] Booting VM...
    [node1] Waiting for VM to boot. This can take a few minutes.
    [node1] VM booted and ready for use!
    [node1] Setting hostname...
    [node1] Mounting shared folders...
    [node1] -- /vagrant
    [node2] Importing base box 'centos-6.3'...
    [node2] Matching MAC address for NAT networking...
    [node2] Setting the name of the VM...
    [node2] Clearing any previously set forwarded ports...
    [node2] Fixed port collision for 22 => 2222. Now on port 2200.
    [node2] Creating shared folders metadata...
    [node2] Clearing any previously set network interfaces...
    [node2] Preparing network interfaces based on configuration...
    [node2] Forwarding ports...
    [node2] -- 22 => 2200 (adapter 1)
    [node2] Booting VM...
    [node2] Waiting for VM to boot. This can take a few minutes.
    [node2] VM booted and ready for use!
    [node2] Setting hostname...
    [node2] Mounting shared folders...
    [node2] -- /vagrant
    
    $ vagrant status
    Current machine states:
    
    node1                     running (virtualbox)
    node2                     running (virtualbox)
    

     Vagrantfileにはホスト名以外にも細かく設定を記述することができます。詳しい設定項目についてはDocumentationを参照してください。

参考

関連記事