试用了 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
    1. (如果尚未安装)安装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 : 名前付きスナップショットの一覧

bannerAds