代码改变世界

用 Vagrantfile 配置虚拟机 — 共享目录

2016-03-26 21:15  sunshine1987  阅读(1206)  评论(0编辑  收藏  举报

用 vagrant init 命令初始化项目以后,会在你的项目的目录下面创建一个叫 Vagrantfile 的文件。虚拟机在启动的时候,会检查这个文件上的内容,你可以在这个文件里面修改跟虚拟机相关的配置,比如虚拟机的用户名,网络的配置,使用的内存大小,共享的目录等等。用你喜欢的编辑器打开项目的目录,然后再打开 Vagrantfile 这个文件。

这个文件里的内容的语法是 Ruby 语言,你不用懂 Ruby 语言,只需要简单的修改就能通过这个文件去配置虚拟机。在这个文件里,所有最前面用 # 开头的,都是被注释掉的内容,有些说明了相关的配置的使用方法,有些是配置语法本身。还有几行代码前面不带 # 号。

config.vm.box = "chef/centos-6.5"

上面的的配置说明了这个项目用的虚拟机的 Box 叫什么,我这里是 chef/centos-6.5 ,你看到的可能跟这个不太一样。

共享目录

同步目录,或者共享目录,就是你的电脑(Host)跟虚拟机之间共享的一个目录。在你电脑上,你把文件放到这个目录里面,ssh 到虚拟机以后,你也可以在某个目录下面找到这些文件。默认情况下,这个同步的目录在你电脑上就是项目所在的目录,也就是Vagrantfile 这个文件所在的目录。在虚拟机上,这个目录的位置是 /vagrant,也就是你把要共享的文件放到项目的目录里面,在虚拟机上的 /vagrant 这里可以看到,你可以直接在虚拟机上修改在这个目录下面的文件,这样在你电脑上,也可以看到修改以后的结果,反过来也是一样的。

在用 vagrant up 启动虚拟机的时候,显示的提示信息里,可以找到电脑与虚拟机对应的同步目录。

==> default: Mounting shared folders...
    default: /vagrant => /Users/xiaoxue/Desktop/ninghao-project

上面显示,/vagrant 是虚拟机上的目录,对应的同步目录是我电脑上的 /Users/xiaoxue/Desktop/ninghao-project 这个目录。

配置共享目录

下面去手工配置一下共享的目录,先在项目的根目录下面新建一个目录叫 app ,在这个目录下面新建一个文件叫 README.md,打开这个文件,输入点东西:#Hello World 。然后打开 Vagrantfile ,搜索一下共享目录的配置:

# config.vm.synced_folder

去掉这行代码前面的 # 符号 。这个配置后面有两个参数,第一个参数是主机上的目录,可以使用绝对的位置,也可以使用相对的位置,如果是相对位置,是相对于项目根目录的位置,也就是相对于 Vagrantfile 这个文件所在的目录的位置。两个参数之间是一个逗号,第二个参数是在虚拟机上的目录,如果你设置的目录在虚拟机上不存在,Vagrant 在启动虚拟机的时候,会自动去创建这个目录。

这里我们修改成:

config.vm.synced_folder "app", "/vagrant"

修改后,保存文件。这样在启动虚拟机的时候,会使用这个配置。如果虚拟机正在运行,可以用 vagrant reload 命令重启一下,在启动的时候你会看到:

==> default: Mounting shared folders...
    default: /vagrant => /Users/xiaoxue/Desktop/ninghao-project/app

现在,共享目录就变成了,在虚拟机上仍然是 /vagrant,不过在我的电脑上是 /Users/xiaoxue/Desktop/ninghao-project/app ,app 这个目录是在项目的根目录下面,这个目录的下面有一个文件叫 README.md 。用 SSH 登录到虚拟机,Windows 用户可以使用 Putty 登录。然后:

cd /vagrant
ls -la

进入到虚拟机的 /vagrant 目录 ,再用 ls 命令列出目录下面的文件,这里用了两个参数 -la,它们可以更详细的显示目录与文件的相关信息。你会看到 README.md 这个文件。留意一下这个文件的拥有者还有用户组,默认都是 vagrant ,你不能在虚拟机上用命令修改这个目录的所有权。不过可以通过 Vagrantfile 去配置这个共享目录的所有权。

在虚拟机上修改一下 README.md 文件(可以用 vim 编辑器),保存以后,再到你的电脑上直接用编辑器打开它看一下,然后在编辑器上修改一下,再去虚拟机上看看这个文件的变化。