Vagrant是一种虚拟机配置工具,它可以调用VirtualBox 或者 VMware 来按照vagrant的配置文件运行虚拟机。因此Vagrant并不是独立的,它必须和VirtualBox或者VMware配套使用。
安装对象:VirtualBox,Vagrant
版本: VirtualBox-6.0.8-130520-Win.exe
下载地址:https://www.virtualbox.org/
版本:vagrant_2.2.5_x86_64.msi
下载地址: https://www.vagrantup.com/downloads.html
ubuntu用户也要在官网下载
如果直接使用:sudo apt install vagrant
会导致vagrant 因为版本低, vagrant up 命令出错
Vagrant 使用的是以 .box 为后缀名的镜像
镜像大全可以在这里查找 : http://www.vagrantbox.es/
这里推荐一个下载比较快的Ubuntu镜像:
打开网页 https://cloud-images.ubuntu.com/xenial/current/
找到文件 “xenial-server-cloudimg-amd64-vagrant.box” 点击下载
首先建立一个文件夹用于存放虚拟机镜像,这个文件夹将作为该虚拟机的工作目录。
将第一步下载的镜像文件放入到该文件夹中。
打开命令行(bash),进入该目录
cd xxx
vagrant box add ubuntubox1 ./xenial-server-cloudimg-amd64-vagrant.box # 添加虚拟机
vagrant init ubuntubox1 # 初始化虚拟机
vagrant up # 启动虚拟机
其中上述命令中,ubuntubox1 是虚拟机名称,可以改为其他任意名称
在命令行中登陆虚拟机的终端,以及退出虚拟机的终端的命令为
vagrant ssh #登陆进虚拟机
exit #退出虚拟机登陆
关闭虚拟机和销毁虚拟机的命令分别为
vagrant halt #停止虚机
vagrant destroy -f #删除虚机
虽然virtualbox也提供了操作虚拟机的终端命令行界面,但是并不是很好用,这里推荐使用Xshell来登陆虚拟机。
下载地址(参考):http://www.cncrk.com/downinfo/35683.html
如果安装后双击运行时,提示
msxxx.dll 不存在,请下载并安装以下的支持库
https://www.microsoft.com/zh-CN/download/details.aspx?id=30679
(注意 x64 和 x86 两种库都需要安装)
使用之前,我们需要知道虚拟机的ip地址和端口信息以及登陆密钥
打开命令行(bash)进入到虚拟机的工作目录
cd xxx
vagrant ssh-config
输出的信息例如
nikokvcs@wucanliu-web MINGW64 /d/vagrantbox/ubuntuclone
$ vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile C:/Users/nikokvcs/.vagrant.d/boxes/ubuntuclone/0/virtualbox/vagrant_private_key
IdentitiesOnly yes
LogLevel FATAL
从输出信息,我们得知 主机地址是 127.0.0.1,端口是 2222
用户名是 vagrant,密钥文件位于 C:/Users/nikokvcs/.vagrant.d/boxes/ubuntuclone/0/virtualbox/vagrant_private_key
在新出现的窗口填上虚拟机的相关信息(步骤1.获取虚拟机的连接信息 中已获取)
填完点击连接
出现的用户名窗口,请填上 步骤1.获取虚拟机的连接信息 中已获取的用户名
点击确定后,新窗口需要导入密钥文件
选择 步骤1.获取虚拟机的连接信息 中密钥文件的地址即可
连接成功,输入 sudo -s 即可切换为 root模式
当你在你的虚拟机上安装了很多东西(比如开发环境),想要将同一个开发环境给另一个人使用,这时就需要将你的虚拟机打包起来,叫包拷贝给别人,这样他就可以使用和你一样的虚拟机环境。
命令行(bash)进入到虚拟机的工作目录
cd xxx
vagrant package --output outputpackage.box
其中 --output outputpackage.box 是指定打包后的镜像文件名称
PS:vagrant package还有以下参数
--base NAME # 用于指定要打包的虚拟机目录
--vagrantfile file ## 用于指定Vagrantfile文件
--include x,y,z
指定Vagrantfile文件的情况下打包的例子
cd xxx
vagrant package --output outputpackage.box --vagrantfile Vagrantfile
注意如果是要指定Vagrantfile打包的话,Vagrantfile的配置信息也会被一并打包,因此建议不要在Vagrantfile内配置密码或者密钥地址,这可能存在安全隐患。
使用这样打包出来的镜像去安装新的虚拟机时,新的虚拟机会默认加载原虚拟机的Vagrantfile配置。
创建一个新的虚拟机工作目录 yyy, 将上面生成的包文件放入该目录。
使用命令行(bash)
cd yyy
vagrant box add newubuntu ./outputpackage.box # 添加虚拟机
vagrant init newubuntu # 初始化虚拟机
vagrant up # 启动虚拟机
这样就使用上面打包的镜像又创建了一个新的虚拟机。
进入虚拟机后会发现,两个虚拟机的软件,环境都是相同的。
打开虚拟机工作目录下的 Vagrantfile 文件
如上图,以 # 开头的是被注释掉的配置项。
我们可以通过修改这个配置文件,让宿主机(Windows 10)和虚拟机有一个共享文件夹。
首先,在这个配置文件里面找到 config.vm.synced_folder 这个配置项
将其头部的 # 号删去,使其生效。
config.vm.synced_folder "d:/github", "/home/vagrant/github"
该配置项中 “d:/github” 是指在宿主机 windows 10 中用于作为共享文件夹的目录地址
“/home/vagrant/github” 则是指虚拟机中用于作为共享文件夹的目录地址。
注意,这两个地址都必须使用绝对地址。
修改完Vagrantfile的配置后,为了令其生效,需要重启虚拟机,命令为
vagrant reload
解除注释
输入以下命令重启虚拟机
vagrant reload