什么是vargant
Vagrant提供了易于配置、便于重现、且便携的工作环境,它基于行业技术标准,
通过一个统一的流程控制来最大限度地提高 团队的灵活性及生产力
为了实现其功能,Vagrant 站在了巨人的肩膀上,基于VirtualBox, VMware, AWS, 或 其他 虚拟机管理软件(provider)
的接口来创建虚拟机。 因此,标准的 配置管理工具(provisioning tools (例如 shell 脚本, Chef, 或 Puppet)
都可以在 Vagrant 创建的虚拟机上使用,用来进行自动安装及配置管理。
准备工作
因为VMware不是免费的故Vagrant对应的也不是免费的。
所以我们使用VirtualBox来与Vagrant配套使用
安装VirtualBox和Vagrant这样我们就可以开始使用Vagrant
安装 Vagrant 并添加镜像
使用官方镜像
vagrant box add hashicorp/precise64
hashicorp/precise64: 镜像名,其它镜像可以在此搜索
添加本地.box文件
可以在这里下载镜像或使用已经打包好的镜像
vagrant box add hahaha ~/box/package.box # 添加 package.box 镜像并命名为 hahaha
cd ~/dev # 切换到项目目录
vagrant init hahaha # 用 hahaha 镜像初始化。
使用ISO文件
需要使用一个Veewee的工具
例如:我们已经把一个rhel-server-6.5-x86_64-dvd.iso文件复制到了iso文件夹
$ cd iso
$ veewee vbox build 'rhel65-64bit'
$ vagrant package --base rhel65-64bit --output rhel65-64bit.box
$ vagrant box add --name rhel65-64bit rhel65-64bit.box
初始化环境
创建一个开发目录(比如:~/dev),你也可以使用已有的目录,切换到开发目录里,
用 centos/7 镜像初始化当前目录的环境:
$ cd ~/dev # 切换目录
$ vagrant init centos/7 # 用 centos/7 进行 box 初始化
$ vagrant up # 启动环境
$ vagrant ssh # SSH 登录
提示: 使用vagrant虚拟的环境不受实体机的内存和CPU限制。只有你机器够好
配置多台虚拟机
Vagrant.configure("2") do |config|
config.vm.define :web do |web|
web.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "web", "--memory", "512"]
end
web.vm.box = "base"
web.vm.hostname = "web"
web.vm.network :private_network, ip : "11.11.11.1"
end
config.vm.define :db do |db|
db.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "db", "--memory", "512"]
end
db.vm.box = "base"
db.vm.hostname = "db"
db.vm.network :private_network, ip : "11.11.11.2"
end
end
这里使用了:web和:db定义了两个VM,设置完后再使用vagrant up启动。
可以通过vagrant ssh web和vagrant ss db分别登录指定虚拟机上。
验证两台虚拟机间的通信: (验证方法: 在web虚拟机上通过ssh登录到db虚拟机)
vagrant配置文件
Vagrantfile是vagrant的配置文件
具体说明可以参考这里
这里说明下怎么配置虚拟机的内存和CPU
config.vm.provider "virtualbox" do |vb|
vb.memory = 1024
vb.cpus = 4
end
遇到的坑
当使用centos配置多个虚拟机时发现设置的IP地址不生效
出现这个问题的原因是eth1网卡没有启动,启动网卡就可以了
sudo ifup eth1
如果有多个虚拟机,这样非常麻烦. 我们可以在虚拟机创建的使用明确指定去启动这个网卡
config.vm.provision "shell", inline: <<-SHELL
echo "vagrant" | sudo passwd root --stdin > /dev/null 2>&1
sudo ifup eth1
SHELL
因为root开始的时候未设置密码,这里要先设置root的密码。
具体使用shell修改用户密码见这里
centos命令ifconfig找不到
那是因为使用ip代替了ifconfig
具体参考这里
远程连接出现Permission denied (publickey,gssapi-with-mic)
/etc/ssh/sshd_config 设置 PasswordAuthentication yes
重启虚拟机 或 sudo systemctl restart sshd
“Rsync” could not be found on your PATH
I found in another forum that the local Vagrant directory is mounted as "/vagrant" via rsync. This is set in the box itself, you can check by opening
C:\Users\{your_username}\.vagrant.d\boxes\debian-VAGRANTSLASH-jessie64\8.2.2\virtualbox\Vagrantfile
and see the setting
config.vm.synced_folder \
".",
"/vagrant",
type: "rsync"
to get around this I added the following line in my local Vagrantfile
config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
and the error was resolved
常用命令
$ vagrant init # 初始化
$ vagrant up # 启动虚拟机
$ vagrant halt # 关闭虚拟机
$ vagrant reload # 重启虚拟机
$ vagrant ssh # SSH 至虚拟机
$ vagrant status # 查看虚拟机运行状态
$ vagrant destroy # 销毁当前虚拟机
$ vagrant suspend # 挂起虚拟机
$ vagrant resume # 恢复挂起状态
$ vagrant ssh-config # 输出ssh连接信息
$ vagrant package # 打包当前运行的虚拟机的环境
$ vagrant plugin # 用于安装卸载插件
$ vagrant box list # 查看已添加镜像
$ vagrant box remove centos/7 # 删除指定镜像
$ vagrant box add "boxIdentity" # remoteUrlorLocalFile 添加box