Vagrant基础简要记录
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://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
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
- sudo apt-get install ruby ruby-dev libopenssl-ruby rdoc ri irb build-essential wget ssl-cert curl
- cd /tmp
- curl -O http://production.cf.rubygems.org/rubygems/rubygems-1.8.10.tgz
- tar zxf rubygems-1.8.10.tgz
- cd rubygems-1.8.10
- sudo ruby setup.rb --no-format-executable
- 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基础简要记录的更多相关文章
- C#基础知识记录一
C#基础知识记录一 static void Main(string[] args) { #region 合并运算符的使用(合并运算符??) 更多运算符请参考:https://msdn.microsof ...
- DataBase MongoDB基础知识记录
MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...
- MarkDown基础语法记录
基础语法记录,其中有一些博客园暂不支持 <!--标题--> # 一级标题 # ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 一级标题 ...
- 【原】【BG】-一次虚拟化环境实践简要记录
部分涉及到Linux.Nginx.tomcat.MySQL等的点滴操作记录,时间长了,就忘掉了,偶尔整理一下操作的history,就此简要备份一下: [原][BG]-一次虚拟化环境实践简要记录: ht ...
- MongoDB基础知识记录
MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...
- MVC+Ext.net零基础学习记录(五)
继MVC+Ext.net零基础学习记录(四),在后面我在既有的项目上又添加了一个子项目,还用前面提到的方法,进行主项目中引用DLL,然后子项目中生成事件中使用mkdir 进行拷贝 发现一个下午就总是报 ...
- MVC+Ext.net零基础学习记录(四)
在上一篇文章[MVC+Ext.net零基础学习记录(三)]中提到了利用MVC的Area可以做到项目分离,但是实际操作起来还是有很多问题的.比如,对于物理资源的访问,会报:没有相关资源 开始的时候,我在 ...
- pt-align的用法简要记录
pt-align的用法简要记录 1.pt-align 功能:将其它工具的输出按列对齐用法:pt-align [FILES]如果没有指定文件,则默认读取标准输入的内容. 2.例如: [root@dbte ...
- java基础复习记录
java基础复习记录(数组.对象.异常) 数组 数组的定义 数组是相同类型数据的有序集合.如:篮球队就是一个数组,队员球服上有号码,相当于索引.通过某一个的某一个号码来确认是某一个队员.数组中索引从0 ...
随机推荐
- ENode框架Conference案例分析系列之 - 文章索引
ENode框架Conference案例分析系列之 - 业务简介 ENode框架Conference案例分析系列之 - 上下文划分和领域建模 ENode框架Conference案例分析系列之 - 架构设 ...
- JNI 备注
本文记录一个基础的JNI例子及过程中遇到的问题解决. 1.定义一个JAVA类如下: package jnidemo01; public class JniHello { public native v ...
- keepalived 知识备注
keepalived可用于配置nginx/lvs等负载均衡设备的双机热备. keepalived基于VRRP协议,简单的说就是两个物理路由节点(一主一备),虚拟成一个逻辑上的路由节点. 实际消息的路由 ...
- .NET应用程序与数据库交互的若干问题
我们知道,在应用程序中与数据库进行交互是一个比较耗时的过程,首先应用程序需要与应用程序建立连接,然后将请求发送到数据库,数据库执行操作,然后将结果集返回.所以在程序中,要尽量晚的与数据库建立连接,并且 ...
- EasyPR--开发详解(4)形态学操作、尺寸验证、旋转等操作
在上一篇深度分析与调优讨论中,我们介绍了高斯模糊,灰度化和Sobel算子.在本文中,会分析剩余的定位步骤. 根据前文的内容,车牌定位的功能还剩下如下的步骤,见下图中未涂灰的部分. 图1 车牌定位步骤 ...
- Android开发学习之路-动态高斯模糊怎么做
什么是高斯模糊? 高斯模糊(英语:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop.GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果,通常用它来减少图像噪 ...
- js文章列表的树形结构输出
文章表设计成这样了 后端直接给了无任何处理的json数据,现在要前端实现树形结构的输出,其实后端处理更简单写,不过既然来了就码出来 var doclist = [{ "id": 1 ...
- 【.NET深呼吸】如何反序列化动态JSON
.net本身除了支持SOAP.XML.二进制等序列化和反序列化,后来也加入了对JSON的序列化的支持.然而,在实际开发中,常常会遇到结构不确定的JSON对象,这些对象可能是其他代码动态生成的,你事先无 ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
- ASP.Net中实现上传过程中将文本文件转换成PDF的方法
iTextSharp是一个常用的PDF库,我们可以使用它来创建.修改PDF文件或对PDF文件进行一些其他额外的操作.本文讲述了如何在上传过程中将文本文件转换成PDF的方法. 基本工作 在开始之前,我们 ...