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 ...
随机推荐
- 解决 Error: getaddrinfo EADDRINFO 错误
安装npm失败,提示Error: getaddrinfo EADDRINFO,原因在于虚拟机未连接互联网,悲剧.
- Linux Socket 原始套接字编程
对于linux网络编程来说,可以简单的分为标准套接字编程和原始套接字编程,标准套接字主要就是应用层数据的传输,原始套接字则是可以获得不止是应用层的其他层不同协议的数据.与标准套接字相区别的主要是要开发 ...
- JavaScript之web通信
web通信,一个特别大的topic,涉及面也是很广的.因最近学习了 javascript 中一些 web 通信知识,在这里总结下.文中应该会有理解错误或者表述不清晰的地方,还望斧正! 一.前言 1. ...
- keil MDK error: L6236E: No section matches selector - no section 错误
今天板子刚到,新建的第一个工程就报错了. .\Objects\cse.sct(7): error: L6236E: No section matches selector - no section t ...
- Spark 学习总结
摘要: 1.spark_core 2.spark_sql 3.spark_ml 内容: 1.spark_core 原理篇: Spark RDD 核心总结 RangePartitioner 实现简记 S ...
- Google翻译之路
如何将整个网站都翻译成某种语言,想必大家都有碰到这样的问题吧. 如果能够访问Google的话, 那这个太容易不过了. 来看,下面的就是Google提供的直接翻译某个网站. http://transla ...
- .Net开源工作流Roadflow的使用与集成
序言 最近公司要整理公司内部oa系统,需要使用到工作流,所以就开始了开源工作流挑选,使用,到集成到公司内部系统的工作. 首先在网上搜了文档,自己也有补充,整理啦国内几款工作流的比较,由于没有个个击破式 ...
- 聊聊excel生成图片的几种方式
目录 I:需求. II:实现思路. III:实现方式. IV:优缺点分析. V:结论. VI:wps安装与配置. 正文 1.需求:把excel生成等比的图片. ...
- DM9000驱动移植在mini2440(linux2.6.29)和FS4412(linux3.14.78)上的实现(deep dive)篇一
关于dm9000的驱动移植分为两篇,第一篇在mini2440上实现,基于linux2.6.29,也成功在在6410上移植了一遍,和2440非常类似,第二篇在fs4412(Cortex A9)上实现,基 ...
- 判断js引擎是javascriptCore或者v8
来由 纯粹的无聊,一直在搜索JavaScriptCore和SpiderMonkey的一些信息,却无意中学习了如何在ios的UIWebView中判断其js解析引擎的方法: if (window.de ...