试用了 Vagrant + 1.8 系列的新功能,记录如下

简要概述
実践 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
Vagrant文件
-
- 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
盒子 (hé zi)
-
- ボックス=ベースイメージ
マシンのテンプレートのようなもの
必要なボックスはプロジェクト毎に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
用户 进程号 %CPU %MEM VSZ RSS 终端 状态 开始时间 执行时间 命令
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
功能
快照(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 : 名前付きスナップショットの一覧