概要
- 実践 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 + Ansible で開発環境を作るなら ansible_local プロビジョナがいい! を参考にさせてもらった
- ざっくりいうと
- ホストに Ansible をインストールする手間がない
- ホストの Ansible のバージョンが異なるために起こる問題を防げる
- 「Ansible はWindows をプロビジョニングはできるが、Windows 環境でAnsible 自体は実行できない」問題の解消
実行結果
$ 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
- (インストールされていなければ)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 : 名前付きスナップショットの一覧