Vagrant是一种开源软件,它为跨众多操作系统构建可重复的开发环境提供了一种方法。Vagrant使用提供者(provider)来启动隔离的虚拟环境。默认的提供者是Virtualbox

Vagrant ( http://www.vagrantup.com/ ) is a powerful development tool, which

lets you manage and support the virtualization of your development environment.

Instead of running all your projects locally on your own computer, having to juggle

the different requirements and dependencies of each project, Vagrant lets you run

each project in its own dedicated virtual environment.

Vagrant uses Providers to integrate with the third-party virtualization software,

which provides the virtualized machines for our development environment. The

default provider is for Oracle's VirtualBox however, there are providers to work

with Amazon Web Services and VMware Fusion. The entire configuration is stored

in simple plain text files. The Vagrant configuration (Vagrantfile), Puppet, and Chef

manifests are simply written in text files in a Ruby Domain Specific Language. This

means we can easily share the configurations and projects with colleagues, using

Version Control Systems such as Git or Subversion.

Docker vs Vagrant

http://stackoverflow.com/questions/16647069/should-i-use-vagrant-or-docker-for-creating-an-isolated-environment

http://ju.outofmemory.cn/entry/52470

vagrant可以帮助用户管理/部署虚拟机的程序。docker是一个帮助用户创建/运行/管理基于lxc的linux container的程序。coreos是一个专门为运行linux container而设计的发行版。

安装和使用

https://atlas.hashicorp.com/boxes/search

https://docs.vagrantup.com/v2/providers/ VMWare和Virtualbox等各种提供者

Vagrant can be installed on Linux, Windows, and Mac OS X, and although it

uses Ruby, the package includes an embedded Ruby interpreter. The only other

requirement is a virtualization tool such as Oracle's VirtualBox. The Oracle's

VirtualBox provider is available for free, and is included built-in with Vagrant

https://www.virtualbox.org/

http://downloads.vagrantup.com

Each virtual machine starts with what Vagrant calls a base box. This is a specially

packaged version of an operating system with some specific configurations in

place. The number of configurations and packages installed on this packaged

operating system is typically minimal (containing only a few tools which allow it

to communicate with Vagrant).

初始化

Ubuntu的几个box

Ubuntu10

•  Lucid32 is available at  http://files.vagrantup.com/lucid32.box

•  Lucid64 is available at  http://files.vagrantup.com/lucid64.box

Ubuntu12

•  Precise32 is available at  http://files.vagrantup.com/precise32.box

•  Precise64 is available at  http://files.vagrantup.com/precise64.box

Ubutnu14

vagrant init ubuntu/trusty64; vagrant up --provider virtualbox

vagrant init precise64 http://files.vagrantup.com/precise64.box

Vagrantfile生成[ruby]

vagrant init base64

vagrant init

vagrant box add <name> <url> [--provider provider] [--force]

Powering up

vagrant up

Vagrant will then perform the following:

•  Copy the base box

•  Create a new virtual machine with the relevant provider (the default

being VirtualBox)

•  Forward any configured ports; by default, it will forward port 22 (SSH) on

the VM to port 2222 on the host; this will allow us to connect to the VM

•  Boot (power up) the VM

•  Configure and enable networking, so that we can communicate with the VM

•  Map shared folders between the host and the guest (by default, it will map

the folder containing the Vagrant project to  /vagrant on the guest machine)

•  Run any provisioning tools that are set up such as Puppet, Chef, or

SSH provisioning

vagrant suspend

vagrant resume

vagrant halt

vagrant destroy

vagrant ssh

和HOST机器共享

Port forwarding

Vagrantfile 文件中进行端口映射

config.vm.network :forwarded_port, guest: 80, host: 8888

Synced folders

config.vm.synced_folder "/Users/michael/assets/" "/var/www/assets"

The first parameter is the path to the folder on our machine, the second being the

mount point on the VM.

Networking

config.vm.network :private_network, ip: "192.168.1.100"

Auto-running commands

config.vm.provision :shell, :inline => "sudo apt-get update"

config.vm.provision :shell, :path => "provision.sh"  (the location of the

script specified is relative to our project root, that is, /vagrant )

Provisioning

Puppet modules

http://docs.puppetlabs.com/references/latest/type.html

http://forge.puppetlabs.com/

puppet apply --modulepath=/home/michael/provision/modules /home/michael/provision/manifests/default.pp

独立运行模式

config.vm.provision :puppet do |puppet|

puppet.manifests_path = "provision/manifests"

puppet.manifest_file = "default.pp"

puppet.module_path = "provision/modules"

end

client/server模式

config.vm.provision :puppet_server do |puppet|

puppet.puppet_server = "puppet.internal.michaelpeacock.co.uk"

puppet.puppet_node = "vm.internal.michaelpeacock.co.uk"

end

SSH

config.vm.provision :shell, :path => "provision/setup.sh"

config.vm.provision :shell, :inline => "apt-get install apache2"

vagrant provision 命令可以重新进行provisioning

multiple virtual machines

Vagrantfile的配置

# -*- mode: ruby -*-

# vi: set ft=ruby :

Vagrant.configure("2") do |config|

config.vm.define :server1 do |server1|

server1.vm.box = "precise64"

server1.vm.network :private_network, ip: "10.11.1.100"

end

config.vm.define :server2 do |server2|

server2.vm.box = "precise64"

server2.vm.network :private_network, ip: "10.11.1.101"

end

end

1. Power up the project ( vagrant up )

2. Connect to  server1 ( vagrant ssh server1 )

3. Ping  server2 from  server1 ( ping 10.11.1.101

不同的配置

# -*- mode: ruby -*-

# vi: set ft=ruby :

Vagrant.configure("2") do |config|

config.vm.define :server1 do |server1|

server1.vm.box = "precise64"

server1.vm.network :private_network, ip: "10.11.1.100"

server1.vm.provision :puppet do |puppet|

puppet.manifests_path = "provision/manifests"

puppet.manifest_file = "server1.pp"

puppet.module_path = "provision/modules"

end

end

config.vm.define :server2 do |server2|

server2.vm.box = "precise64"

server2.vm.network :private_network, ip: "10.11.1.101"

server2.vm.provision :puppet do |puppet|

puppet.manifests_path = "provision/manifests"

puppet.manifest_file = "server2.pp"

puppet.module_path = "provision/modules"

end

end

end

LAMP

|-- provision

| |-- manifests

| | -- init.pp

| -- modules

-- Vagrantfile

根下的Vagrantfile文件内容

# -*- mode: ruby -*-

# vi: set ft=ruby :

Vagrant.configure("2") do |config|

config.vm.provision :shell, :inline => "apt-get update"

config.vm.box = "precise64"

config.vm.network :forwarded_port, guest: 80, host: 8080

config.vm.provision :puppet do |puppet|

puppet.manifests_path = "provision/manifests"

puppet.module_path = "provision/modules"

puppet.manifest_file  = "default.pp"

end

end

目录provision下是Puppet使用的各模块的安装和配置文件

http://pan.baidu.com/s/1ntKFSVn#path=%252Fshare vagrant_lamp_stack.zip

建立自己的Box

1.安装VirtualBox虚拟机

a) 网络需要设置为NAT

b) 虚拟机名字:vagrant-ubuntu-raring

c) hostname : vagrant-ubuntu-raring

d) Domain:  vagrantup.com

e) Root password:  vagrant

f) Main account username:  vagrant

g) Main account password:  vagrant

h) install  openssh-server

2.Install Guest Additions

a) sudo apt-get install linux-headers-$(uname -r) build-essential

b) sudo mount /dev/cdrom /media/cdrom

c) sudo sh /media/cdrom/VBoxLinuxAdditions.run

3.Vagrant authentication

a) sudo groupadd admin

b) sudo usermod -a -G admin vagrant

4.vi sudo 修改

a) %admin ALL=(ALL) NOPASSWD: ALL

b) Defaults env_keep="SSH_AUTH_SOCK"

c) #Default requiretty

5.ssh无秘码登陆

a) wget https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub –o ~/.ssh/authorized_hosts

b) chmod 0644 ~/.ssh/authorized_keys

6.Provisioners

a) sudo apt-get install puppet

b) Chef

  1. sudo apt-get install ruby ruby-dev libopenssl-ruby rdoc ri irb build-essential wget ssl-cert curl
  2. cd /tmp
  3. curl -O http://production.cf.rubygems.org/rubygems/rubygems-1.8.10.tgz
  4. tar zxf rubygems-1.8.10.tgz
  5. cd rubygems-1.8.10
  6. sudo ruby setup.rb --no-format-executable
  7. sudo gem install chef --no-ri --no-rdoc

7.Cleanup

a) rm –rf /tmp/*

b) sudo apt-get clean

8.Export

a) vagrant package --base vagrant-ubuntu-raring

b) website: http://docs.vagrantup.com/v2/cli/package.html

测试自己的box

$vagrant box add /../../my.box

$vagrant init my

$vagrant up

如上的过程就可建立自己的box

https://atlas.hashicorp.com/boxes/search 这里有很多开放的box

Vagrant基础简要记录的更多相关文章

  1. C#基础知识记录一

    C#基础知识记录一 static void Main(string[] args) { #region 合并运算符的使用(合并运算符??) 更多运算符请参考:https://msdn.microsof ...

  2. DataBase MongoDB基础知识记录

    MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...

  3. MarkDown基础语法记录

    基础语法记录,其中有一些博客园暂不支持 <!--标题--> # 一级标题 # ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 一级标题 ...

  4. 【原】【BG】-一次虚拟化环境实践简要记录

    部分涉及到Linux.Nginx.tomcat.MySQL等的点滴操作记录,时间长了,就忘掉了,偶尔整理一下操作的history,就此简要备份一下: [原][BG]-一次虚拟化环境实践简要记录: ht ...

  5. MongoDB基础知识记录

    MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...

  6. MVC+Ext.net零基础学习记录(五)

    继MVC+Ext.net零基础学习记录(四),在后面我在既有的项目上又添加了一个子项目,还用前面提到的方法,进行主项目中引用DLL,然后子项目中生成事件中使用mkdir 进行拷贝 发现一个下午就总是报 ...

  7. MVC+Ext.net零基础学习记录(四)

    在上一篇文章[MVC+Ext.net零基础学习记录(三)]中提到了利用MVC的Area可以做到项目分离,但是实际操作起来还是有很多问题的.比如,对于物理资源的访问,会报:没有相关资源 开始的时候,我在 ...

  8. pt-align的用法简要记录

    pt-align的用法简要记录 1.pt-align 功能:将其它工具的输出按列对齐用法:pt-align [FILES]如果没有指定文件,则默认读取标准输入的内容. 2.例如: [root@dbte ...

  9. java基础复习记录

    java基础复习记录(数组.对象.异常) 数组 数组的定义 数组是相同类型数据的有序集合.如:篮球队就是一个数组,队员球服上有号码,相当于索引.通过某一个的某一个号码来确认是某一个队员.数组中索引从0 ...

随机推荐

  1. Web应用之LAMP源码环境部署

    一.LAMP环境的介绍 1.LAMP环境的重要性 思索许久,最终还是决定写一篇详细的LAMP的源码编译安装的实验文档,一来是为了给自己一个交代,把技术进行系统的归纳,将技术以极致的形式呈现出来,做为一 ...

  2. FineReport如何用JDBC连接阿里云ADS数据库

    在使用FineReport连接阿里云的ADS(AnalyticDB)数据库,很多时候在测试连接时就失败了.此时,该如何连接ADS数据库呢? 我们只需要手动将连接ads数据库需要使用到的jar放置到%F ...

  3. 我的MYSQL学习心得(十一) 视图

    我的MYSQL学习心得(十一) 视图 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  4. 【转】ofbiz数据库表结构设计

    真心不错的文章,可以加深对企业信息化的设计理解:) http://blog.sina.com.cn/s/blog_a2ca5d8c01017fa0.html http://blog.sina.com. ...

  5. 记一次Redis被攻击的事件

    最近几个月非常忙,所以很少有时间写博客,这几天终于闲了一些,于是就在整理平时的一些笔记.恰好这几天Redis服务器发生了问题,就记录一下. 我司有两款分别是2B和2C的App,类似于阿里旺旺的卖家版和 ...

  6. ASP.NET Web API Selfhost宿主环境中管道、路由

    ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...

  7. CSharpGL(28)得到高精度可定制字形贴图的极简方法

    CSharpGL(28)得到高精度可定制字形贴图的极简方法 回顾 以前我用SharpFont实现了解析TTF文件从而获取字形贴图的功能,并最终实现了用OpenGL渲染文字. 使用SharpFont,美 ...

  8. 实现ABP中Person类的权限功能

    菜单项的显示功能已经完全OK了.那么我们就开始制作视图功能吧. 首先测试接口是否正常 我们通过代码生成器将权限和application中大部分功能已经实现了.那么我们来测试下这些接口ok不. 浏览/a ...

  9. 创建一个Phone实体,完成多页面的电话簿项目

    添加实体 在类库CORE中添加: [Table("PbPhones")] public class Phone : CreationAuditedEntity<long> ...

  10. ajax-异步JavaScript和XML

    什么是ajax? ajax是异步的javascript和XML ( Asynchronous Javascript And XML ) 优点:节省用户操作时间,提高用户体验.减少数据请求次数. 什么是 ...