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 ...
随机推荐
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- Lesson 15 Good news
Text The secretary told me that Mr. Harmsworth would see me. I felt very nervous when I went into hi ...
- 线程笔记:Future模式
线程技术可以让我们的程序同时做多件事情,线程的工作模式有很多,常见的一种模式就是处理网站的并发,今天我来说说线程另一种很常见的模式,这个模式和前端里的ajax类似:浏览器一个主线程执行javascri ...
- 一缕阳光:DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)?
写在前面 阅读目录: 问题根源是什么? <领域驱动设计-软件核心复杂性应对之道>分层概念 Repository(仓储)职责所在? Domain Model(领域模型)重新设计 Domain ...
- ABP(现代ASP.NET样板开发框架)系列之7、ABP Session管理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之7.ABP Session管理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- MySQL基础之索引
这段时间看了好多东西却没有总结,今天在这里写一写 关于索引 索引是一种提高查询效率的方法,它是B+树的结构,从根到中间节点在到叶子节点,无需遍历全部就可以查到所需的东西 关于索引的创建 一般有俩种方式 ...
- 你所不知道的setTimeout
JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.它们向任务队列添加定时任务.初始接触它的人都觉得好简单 ...
- MySQL有趣的查询方式
背景介绍 美国大选开始了,国防部要求我对两个总统候选人的票数进行统计.我首先简单的进行一次无条件查询,了解了一下表格的结构及所有数据长什么样子. select * from foo 查询到的结果令我很 ...
- Android测试网络是否连接
一.布局页面 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- WCF学习之旅—TCP双工模式(二十一)
WCF学习之旅—请求与答复模式和单向模式(十九) WCF学习之旅—HTTP双工模式(二十) 五.TCP双工模式 上一篇文章中我们学习了HTTP的双工模式,我们今天就学习一下TCP的双工模式. 在一个基 ...