Vagrantfile文件只会在第一次执行vagrant up时调用执行,其后如果不明确使用vagrant reload,则不会被强制重新加载。

# This is the mount point for the sync_folders of the source
SRCMOUNT = "/hyperledger"
LOCALDEV = "/local-dev"

变量script为执行完基本配置后,需要执行的脚本

$script = <<SCRIPT
set -x export DOCKER_STORAGE_BACKEND="#{ENV['DOCKER_STORAGE_BACKEND']}" cd #{SRCMOUNT}/devenv
./setup.sh SCRIPT
baseimage_release = File.read '../.baseimage-release'
Vagrant.require_version ">= 1.7.4"

box设置:配置虚拟机主机名

config.vm.box = "hyperledger/fabric-baseimage"

auto download box from

config.vm.box_version = ENV['USE_LOCAL_BASEIMAGE'] ? "": baseimage_release # Vagrant does not support versioning local images, the local version is always implicitly version 

端口转发,设置主机与虚拟机之间的端口的映射关系.要转发到虚拟机(guest)上的端口是 7050,转发的是主机(host)上的7050 端口。也就是你在访问主机上的7050端口的时候,实际上访问的是虚拟机上的 7050端口

config.vm.network :forwarded_port, guest: 7050, host: 7050 # Openchain REST services
config.vm.network :forwarded_port, guest: 7051, host: 7051 # Openchain gRPC services
config.vm.network :forwarded_port, guest: 7054, host: 7054 # Membership service
config.vm.network :forwarded_port, guest: 7053, host: 7053 # GRPCCient gRPC services

同步目录:synced_folder方法的第一个参数为主机上要跟虚拟机同步的目录,第二个参数为要挂载到虚拟机上的路径。

config.vm.synced_folder "..", "#{SRCMOUNT}"  #Copy /opt/gopath/src/github.com/hyperledger/fabric folder to /hyperledger
config.vm.synced_folder "..", "/opt/gopath/src/github.com/hyperledger/fabric" #Copy /opt/gopath/src/github.com/hyperledger/fabric folder to /opt/gopath/src/github.com/hyperledger/fabric
config.vm.synced_folder ENV.fetch('LOCALDEVDIR', ".."), "#{LOCALDEV}" #Copy /opt/gopath/src/github.com/hyperledger/fabric folder to /opt/gopath/src/github.com/hyperledger/fabric
#/vagrant => /opt/gopath/src/github.com/hyperledger/fabric/devenv 默认配置下,虚拟机中的/vagrant目录与主机上的项目目录是同一个目录,该目录中的所有操作都会自动同步。
#注意的是,在该虚拟机上进行rm -fr /操作的时候请谨慎一些,因为在该虚拟机中,挂载了/vagrant目录,该目录是与你主机的项目共享的,删除的话会将项目删除掉。

内存和cpu核心

config.vm.provider :virtualbox do |vb|
  #Customize the amount of memory on the VM:
vb.name = "hyperledger"
vb.customize ['modifyvm', :id, '--memory', '']
vb.cpus = 2 storage_backend = ENV['DOCKER_STORAGE_BACKEND']
case storage_backend
when nil,"","aufs","AUFS"
# No extra work to be done
when "btrfs","BTRFS"
# Add a second disk for the btrfs volume
IO.popen("VBoxManage list systemproperties") { |f| success = false
while line = f.gets do
# Find the directory where the machine images are stored
machine_folder = line.sub(/^Default machine folder:\s*/,"") if line != machine_folder
btrfs_disk = File.join(machine_folder, vb.name, 'btrfs.vdi') unless File.exist?(btrfs_disk)
# Create the disk if it doesn't already exist
vb.customize ['createhd', '--filename', btrfs_disk, '--format', 'VDI', '--size', 20 * 1024]
end # Add the disk to the VM
vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', btrfs_disk]
success = true break
end
end
raise Vagrant::Errors::VagrantError.new, "Could not provision btrfs disk" if !success
}
else
raise Vagrant::Errors::VagrantError.new, "Unknown storage backend type: #{storage_backend}"
end

Vagrant使用提供者(provider)来启动隔离的虚拟环境。默认的提供者是Virtualbox

The Vagrant Shell provisioner allows you to upload and execute a script within the guest machine.Reference to Shell Provisioner

config.vm.provision :shell, inline: $script #run scripts
config.vm.provision :shell, path =>"boot.sh" #run scripts in boot.sh file using ssh provider method like running command 'vagrant ssh'

vagrant up (启动虚拟机)
vagrant halt (关闭虚拟机——对应就是关机)
vagrant suspend (暂停虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用)
vagrant resume (恢复虚拟机 —— 与前面的暂停相对应)
vagrant destroy (删除虚拟机,删除后在当前虚拟机所做进行的除开Vagrantfile中的配置都不会保留)

vagrant package --output NAME --vagrantfile FILE(当在启动Vagrant后,对于虚拟机有进行过安装环境相关的配置,如果并不希望写在Vagrant的启动shell里面每次都重新安装配置一遍,可以将当前配置好的虚拟机打包成box.(可选)设置通过NAME来指定输出的文件名/(可选)可以将Vagrantfile直接封进box中)注:如果网络模式中使用 private_network 的话,在打包之前需要清除一下private_network的设置,避免不必要的错误:sudo rm -f /etc/udev/rule.d/70-persistent-net.rules

参考网站:

Vagrant简介和安装配置

使用vagrant部署开发环境

最新文章

  1. 一个可拖拽的DIV框框
  2. linux学习笔记2-命令总结3
  3. javascript第三方组件
  4. tomcat 服务器全解
  5. iostream与iostream.h乱弹琴
  6. 实现 node_modules 共享
  7. AspnetCore WebApi使用Swagger简单入门
  8. 一、Windows10下python3和python2同时安装
  9. 【LOJ】#2533. 「CQOI2018」交错序列
  10. 2018.09.17 atcoder Tak and Hotels(贪心+分块)
  11. 使用docker部署项目
  12. 【刷题】BZOJ 3626 [LNOI2014]LCA
  13. 数据驱动ddt+excel数据读取
  14. js图片转换为base64
  15. Android中通过拨号调起应用的实现方式及特殊情况处理
  16. php getimagesize()函数获取图片宽度高度
  17. J2EE的十三个技术——EJB之消息驱动JMS
  18. RabbitMQ的安装与客户端的简单实用
  19. Robots协议应用与写法研究
  20. [SDOI2013]spring

热门文章

  1. Java开发环境搭建——Maven配置
  2. VsFtpd配置文件详解
  3. Protobuf for Python测试保存和读取文件
  4. WIN10 CMD 启动虚拟WIFI
  5. PMD宣传文案
  6. Linux 内核数据结构:双向链表
  7. iOS 8 Extensions
  8. GIFT-EMS礼记----青软S2SH(笔记)
  9. 《大道至简》第一章读后感--JAVA语言伪代码形式
  10. JS中数组Array的用法{转载}