Vagrant基础简要记录

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

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是一个帮助用户创建/运行/管理基于lxclinux 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

 

 

相关文章
|
传感器 机器学习/深度学习 数据采集
【航迹关联】基于NNDA、PDA、JPDA三种算法实现航迹关联附matlab代码
【航迹关联】基于NNDA、PDA、JPDA三种算法实现航迹关联附matlab代码
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能技术的探讨
人工智能的概念,人工智能的发展,人工智能的各种学派,人工智能的应用领域
289 4
|
XML 设计模式 存储
Java Spring IOC容器与依赖注入DI实现原理
本文主要讲解Spring IOC机制和实现过程,依赖注入DI和面向切面编程AOP是Spring框架的核心概念,几乎后续使用到Spring Boot框架的地方都有这两个概念的影子。也是Java面试的考察点,我们会结合实际的例子演示说明 。
|
前端开发
element ui实现多层级复杂表单的操作(添加与回显)之回显功能实现
element ui实现多层级复杂表单的操作(添加与回显)之回显功能实现
513 0
|
机器学习/深度学习 人工智能 算法
为什么大模型训练需要GPU,以及适合训练大模型的GPU介绍
为什么大模型训练需要GPU,以及适合训练大模型的GPU介绍
1095 1
|
云安全 存储 Cloud Native
怎么样能顺利通过阿里云ACE考试?难度是不是很大?
阿里云认证是现在IT行业内广受认可的一个认证,其中难度最高的就是ACE考试,很大人都会选择考这个这个来提升自己的就业竞争力,但是自从ACE改版之后,难度大大增加,考试的内容和形式很多人都不了解。
917 1
怎么样能顺利通过阿里云ACE考试?难度是不是很大?
|
SQL 前端开发 JavaScript
Django Blog | 09 这么简单!实现博客markdown输入和显示
Django Blog | 09 这么简单!实现博客markdown输入和显示
690 0
Django Blog | 09 这么简单!实现博客markdown输入和显示
|
编译器 C语言
CodeBlocks出现Can‘t find compiler executable in your search path for GNU GCC Compier错误
CodeBlocks出现Can‘t find compiler executable in your search path for GNU GCC Compier错误
848 0
CodeBlocks出现Can‘t find compiler executable in your search path for GNU GCC Compier错误
|
Web App开发 编解码 网络协议
阿里云低延时直播RTS能力升级 让直播推流效果更佳
针对主播推流使用RTMP存在的TCP链接耗时过长、拥塞控制完全依赖TCP传输层、无法提供实时带宽数据来动态调整视频编码码率等问题引起的推流延迟和卡顿。阿里云低延时直播RTS(Real-time Streaming)产品在下行UDP改造的基础上,进行上行UDP底层WebRTC技术优化,通过发布移动端、PC端推流RTS SDK插件来提升整个行业的主播推流质量,提供低延时、低卡顿、安全可靠的直播观看体验。客户端接入简单,只需要在OBS端嵌入RTS SDK即可新增一个推流协议,无需改变原有的推流端采集架构。
2173 0
|
Web App开发 缓存 网络协议
【翻译工具】如何复活谷歌翻译(网页翻译)
【翻译工具】如何复活谷歌翻译(网页翻译)
1115 0