Vagrant入门
Vagrant is a tool for building and managing virtual machine environments in a single workflow. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases production parity, and makes the “works on my machine” excuse a relic of the past.
Vagrant是一个在单一工作流中创建和管理虚拟机环境的工具。通过简单易用的工作流和对自动化的关注,Vagrant可以减少开发环境的配置时间,增加生产平价,并且使得"works on my machine"这个借口成为过去。
为什么使用Vagrant
Vagrant提供了一种易于配置、可复用、编写的工作环境。它是建立在行业标准技术和单一一致工作流控制的基础上,可以使得你和你团队的生产力和灵活性最大化。
Vagrang是站在了巨人的肩膀上实现了这些需求。配置的虚拟机是基于VirtualBox, VMware, AWS和其他的一些提供商。然后,行业标准配置工具(如shell脚本,Cher或者Puppte),可以自动在虚拟机上安装和配置软件。
如果你是一名开发者,只要你创建了一个Vagrantfile,然后只要运行vagrant up,你配置的软件都会自动安装好。你还可以把Vagrantfile传给你团队里面的其他人,这样你们团队人都可以在一个相同的环境里面进行开发了。可以对"works on my machine"说再见了。
如果你是一名运维或者DevOps开发,Vagrant可以给你一个一次性环境和一致的工作流程,用于开发和测试脚本。你可以在本地虚拟化技术如VirtualBox或者VMware上快速测试shell脚本,Chef或者Puppet。然后使用相同的配置去远程机器上测试。
QuickStart
安装
去https://www.vagrantup.com/downloads.html ,下载系统对应版本的Vagrant安装即可
相关命令
vagrant init centos/7
初始化Vagrantfile,init后面的名字可以在https://app.vagrantup.com/boxes/search 里面找到,可以选择很多系统。一个Vagrantfile可以配置多台虚拟机vagrant up [name]
启动虚拟机,可以加上name,name是Vagrantfile里面虚拟机的名称(下面的命令里面的name也是一样),那么就只启动name这台机器。不然默认是Vagrantfile里面的机器都启动。-provider=vmware_fusion
,加上-provider参数可以指定只有什么虚拟器。但是要注意vagrant要使用vmware的虚拟机的脚本是收费的,所以还是推荐virtual box。vagrant ssh [name]
ssh到虚拟机vagrant suspend [name]
暂停虚拟机vagrant halt [name]
关闭虚拟机vagrant destroy [name]
删除虚拟机vagrant plugin list
列出所有的vagrant插件vagrant plugin install vagrant-scp
安装插件,因为网络原因,可能会需要一点时间。
Vagrantfile配置
一个简单Vagrantfile例子
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.require_version ">= 1.6.0"
boxes = [
{
# 虚拟机的名称,ip,内存和cpu
:name => "docker-node1",
:eth1 => "192.168.205.10",
:mem => "1024",
:cpu => "1"
},
{
:name => "docker-node2",
:eth1 => "192.168.205.11",
:mem => "1024",
:cpu => "1"
}
]
Vagrant.configure(2) do |config|
# 系统版本
config.vm.box = "centos/7"
boxes.each do |opts|
config.vm.define opts[:name] do |config|
config.vm.hostname = opts[:name]
config.vm.provider "vmware_fusion" do |v|
v.vmx["memsize"] = opts[:mem]
v.vmx["numvcpus"] = opts[:cpu]
end
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--memory", opts[:mem]]
v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
end
config.vm.network :private_network, ip: opts[:eth1]
end
end
# 映射外部文件夹
config.vm.synced_folder "../../lab001", "/home/vagrant/lab001"
# 运行外部脚本(比如安装软件等)
config.vm.provision "shell", privileged: true, path: "./setup.sh"
end
插件
vagrant-vbguest
vagrant up的时候可能会遇到vagrant was unable to mount VirtualBox shared folders的错误,安装了这个插件再vagrant up应该就好了
vagrant-scp
可以给vagrant虚拟机传文件vagrant scp ../lab005/ docker-node1:/home/vagrant/lab005
,可以把本地的lab005传送到docker-node1这台虚拟机里面
参考资料
- vagrant文档:https://www.vagrantup.com/docs/index.html
- vagrant的所有镜像:https://app.vagrantup.com/boxes/search
- unable to mount VirtualBox shared folders错误:https://github.com/scotch-io/scotch-box/issues/296
- vagrant-scp主页:https://github.com/invernizzi/vagrant-scp