3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

実践 Vagrant + 1.8系の新機能を試したのでメモ

Posted at

概要

  • 実践 Vagrant を読んだので簡単にまとめ
  • あと、1.8系の新機能も触ってみたのまとめ

初めてのVagrant

  • 初めての作業環境作成まで

プロジェクト作成、起動、実行、接続、停止

  • プロジェクト作成

    $ vagrant init bento/centos-7.2
    
  • 起動と実行

    $ vagrant up
    
    • .vagrant/ という名前のディレクトリが作成される
    • このディレクトリにはゲストマシンのID, ロック, 設定が保存される
    • このディレクトリはバージョン管理システムには無視させるべき
  • マシンの状態

    $ vagrant status
    
  • SSH 接続

    $ vagrant ssh
    
  • 再起動

    $ vagrant reload
    
  • サスペンド

    $ vagrant suspend
    
    • 現在の動作状況を保存した後、マシンは停止する
    • 後でリジュームすることが出来る
    • デメリットはゲストマシンが残るのでハードディスクの容量を使ってしまう
  • 停止

    $ vagrant halt
    
  • 破棄

    $ vagrant destory
    

Vagrantfile

  • vagrant はプロジェクト単位に設定を行う
  • プロジェクト="Vagrantfile"
  • Vagrantfile をバージョン管理することでチーム内で作業環境を共有できる
  • Vagrantfile はRuby で書かれている

V1 とV2 の設定

  • V1 とV2 の2つのバージョンをサポートしている

  • V1 は安定版

  • V2 はVagrant2.0 になる予定の設定構文

    • Vagrant2.0 はまだリリースされていない(2016年9月 現在)
  • 1つのVagrantfile 中にV1 とV2 の設定を混在させることができる

    Vagrant::Config.run do |config|
      # ここはV1 の設定
    end
    
    Vagrant.configure(2) do |config|
      # ここはV2 の設定
    end
    

ボックス

  • ボックス=ベースイメージ

    • マシンのテンプレートのようなもの
  • 必要なボックスはプロジェクト毎にVagrantfile のconfig.vm.box で指定する

    Vagrant.configure(2) do |config|
      config.vm.box = "bent_centos-7.2"
      config.vm.box_url = "bento/centos-7.2"
    end
    
  • ボックスの管理はvagrant box コマンドで行う

    • プロジェクトと関係なくボックスを追加する

      $ vagrant box add
      
    • インストールされているボックス群を表示

      $ vagrant box list
      
    • ボックスを削除

      $ vagrant box remove
      
      • 実行中のプロジェクトが使っているボックスを削除してもプロジェクトに影響はしない
      • しかし、動作していなかったプロジェクトを起動する場合にはボックスを再度ダウンロードする必要がある

共有ファイルシステム

  • 仮想マシンとホストマシン間でファイルやフォルダの同期が出来る

  • 共有ファイルシステムはvagrant destroy によって廃棄されない

  • ゲストマシンが生成した重要なデータをバックアップしたい際などに便利

  • デフォルトでは

    • ホストマシン側
      • プロジェクトのディレクトリ(Vagrantfile があるディレクトリ)
    • 仮想マシン
      • /vagrant
  • デフォルトの共有フォルダの場所はVagrantfile で上書き出来る

    • V2 の設定
    config.vm.synced_folder "../data", "/vagrant_data"
    

ネットワーキング

  • ゲストのポート80 をホストのポート8080 へとフォワードする

    • V2 の設定
    config.vm.network "forwarded_port", guest: 80, host: 8080
    

仮想マシンのプロビジョニング

  • Vagrant は自動的なプロビジョニングをサポートしている

  • 設定されたプロビジョナをvagrant up の際に実行する

    • デフォルトは新たに環境を生成する時のみプロビジョニングが実行される

    • 生成済みの環境でプロビジョニングを実行させる

      $ vagrant up --provision
      
  • サポートしているプロビジョナ

    • シェルスクリプト
    • Chef
    • Puppet
    • Ansible
    • Ansible_local
    • Docker
  • 複数のプロビジョナを指定することも可能

    • 指定された順序でそれぞれのプロビジョナが実行される
    Vagrant.configure(2) do |config|
      config.vm.box = "ubuntu/trusty64"
    
      # 先に Ansible 1.x をインストールさせる
      config.vm.provision :shell, path: "install-ansible.sh"
    
      # Ansible_local で任意の Playbook を実行する
      config.vm.provision "ansible_local" do |ansible|
        ansible.playbook = "playbook.yml"
      end
    end
    
  • 複数のプロビジョナを指定して、その中から特定のプロビジョナだけ実行することも可能

    $ vagrant up --provision-with=ansible
    
  • 「プロビジョニングしない」モードも可能

    $ vagrant up --no-provision
    

ansible_local プロビジョナ

  • Vagrant 1.8 から追加

  • プロビジョナ: ansible との違い

    プロビジョナ プロビジョニングの仕組み
    ansible Vagrant ホスト側でansible-playbook を実行する
    ansible_local 仮想マシン側でansible-playbook を実行する
  • 何が嬉しいのか?

実行結果

$ vagrant up
(省略)
==> default: Running provisioner: ansible_local...
    default: Installing Ansible...    ← 1
    default: Running ansible-playbook... ← 2

PLAY [Configure webserver with nginx] ******************************************

TASK [setup] *******************************************************************
ok: [default]

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

PLAY RECAP *********************************************************************
default                    : ok=2    changed=1    unreachable=0    failed=0
  1. (インストールされていなければ)Ansible のインストール
    • 仮想マシン上だとこんな感じ

    • ちなみにインストールされたバージョンはansible 2.1.1.0

      USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
      
      root      1964  0.9  0.8  97900  3876 ?        Ss   17:25   0:00  \_ sshd: vagrant [priv]
      vagrant   1967  0.3  0.3  97900  1800 ?        S    17:25   0:00  |   \_ sshd: vagrant@notty
      root      3000  0.0  0.5 175104  2656 ?        Ss   17:25   0:00  |       \_ sudo -E -H bash -l
      root      3007  0.0  0.3 106060  1488 ?        S    17:25   0:00  |           \_ bash -l
      root      3012 13.0  4.8 323696 22884 ?        S    17:25   0:00  |               \_ /usr/bin/python /usr/bin/yum -y --enablerepo=epel    install ansible
      
  • ansible-playbook コマンドによる Playbook の実行
    • 通常 ansible-playbook コマンドを実行したのと同等にタスク実行時に逐次出力が行われる
    • 実行結果も色付けされる

参考: Ansible 実行に使用したファイル

  • インベントリ

    $ cat hosts
    [webservers]
    127.0.0.1
    
  • playbook

    $ cat web-notls.yml
    - name: Configure webserver with nginx
      hosts: all
      become: True
      tasks:
        - name: install nginx
          yum: name=nginx update_cache=yes
    

機能


Snapshot (1.8の新機能)

公式ドキュメント:https://www.vagrantup.com/docs/cli/snapshot.html

概要

  • 仮想マシンのその時点の状態を保存
  • Vagrantではコマンド一発で実行できる
  • 従来saharaプラグインで提供されていたのと同等?

コマンド

  • 単一スナップショット
    • vagrant snapshot push : スナップショット作成
    • vagrant snapshot pop : スナップショット復元
  • 複数(名前付き)スナップショット
    • vagrant snapshot save <スナップショット名> : スナップショット作成
    • vagrant snapshot restore <スナップショット名> : スナップショット復元
    • vagrant snapshot list : 名前付きスナップショットの一覧
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?