使用Vagrant管理虚拟机

为什么需要使用Vagrant管理虚拟机?

点击查看原文

因为你开发的项目最终是要运行在 Linux 系统的服务器上,在开发的过程种,你可能需要创建多个 Linux 系统的虚拟机。所以,你打算在本地也用 Linux 系统为项目搭建一个开发环境,手工去安装不同类型的 Linux 操作系统太麻烦了。你需要 Vagrant来统一管理这些虚拟机。

Vagrant 可以让我们用命令直接从云上下载虚拟机的镜像,你想要什么系统都是可以的。比如Centos,Ubuntu ...   只需要一行命令,然后再用命令去操作虚拟机,启动,暂停,关闭,重启。这样你可以更方便的管理所有的在本地上电脑上的虚拟机镜像,手工去配置它们,可以再重新打包成新的镜像,方便你跟你的团队在其它的项目上重复使用这些打包的虚拟机镜像。

下面的内容是我在Window电脑去安装Vagrant,然后管理虚拟机的相关笔记分享。

 

Vagrant管理虚拟机笔记目录:

1.一些准备工作

2.在Windows电脑安装chocolately包管理工具

3.在Windows电脑上安装Vagrant软件

4.在Windows电脑上安装Virtualbox软件

5.给Vagrant添加BOX

6.在Windows电脑上创建项目目录并在项目中启动虚拟机

7.在Windows电脑上登陆CentOS服务器

8.在Windows电脑上使用Vagrant对虚拟机进行启动,关机,暂停,恢复,销毁操作

9.虚拟机的共享目录

10.在Windows本地电脑给虚拟机创建额外的共享目录

11. 给虚拟机配置私有网络

12. 给虚拟机配置公有网络

13. 在centos7虚拟机上搭建WEB服务器

14. 重新打包虚拟机BOX

15. 在新的项目上应用打包的虚拟机BOX

16.在Windows电脑上用Vagrant定义多主机

17.多主机的网络配置

18.多主机的主机名设置

19.多主机的共享目录设置

-------------------------------------------------------------------------------------------------------------------------------

 

1.一些准备工作

为了能在Windows电脑上使用命令行工具,我们需要下载cmder工具或Windows电脑自带的Powershell命令行工具。

1.1 使用cmder命令行工具,你可以在cmder官网去下载最新的cmder,然后放在你电脑的桌面上,解压后,你会看到Cmder.exe,鼠标右键Cmder.exe已管理员方式运行,就就看到一个Cmder的命令行窗口,截图如下图所示。

使用Vagrant管理虚拟机

                                                               Cmder截图

 

使用Vagrant管理虚拟机

                      Cmder运行的命令行窗口

 

1.2 如果你打算使用Windows电脑自带的Powershell,你可以在电脑左下角,输入Powershell,然后已管理员身份运行它。见下面截图:

                                             使用Vagrant管理虚拟机

                                                             以管理员身份运行Powershell

 

                                      使用Vagrant管理虚拟机

                                                          Powershell命令行窗口

1.2.1 在Powershell命令行窗口输入 Set-ExecutionPolicy Unresctricted 更改Powershell的执行策略,所下所示。

使用Vagrant管理虚拟机

                                                           更改Powershell执行策略

 

那么到这里,我们在Windows电脑上面命令行工具(Cmder或Powershell)就可以正常在Windows电脑上使用命令行进行操作了。

 

2.在Windows电脑安装chocolately包管理工具

chocolately是一个包管理工具,你可以在它的官网了解chocolately更详细的资料。

 

输入命令:

iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

进行自动安装chocolately工具,安装完之后,可以输入choco 查看一下版本,能看到版本信息就说明你已经安装好了chocolately包管理工具。

使用Vagrant管理虚拟机                                                     chocolately安装截图

3.在Windows电脑上安装Vagrant软件

命令 choco install vagrant

 

4.在Windows电脑上安装Virtualbox软件

命令 choco install virtualbox

 

5.给Vagrant添加BOX

默认我们是没有虚拟机的镜像BOX的,我们可以使用vagrant box list查看本地电脑项目可以使用的BOX列表,默认是空的。

下面我们去vagrant cloud网站去搜索一下我们想要的BOX,找到合适的BOX之后,复制一下BOX的名字,这里我找了一个

viniciusfs/centos7的BOX。下面我们就来添加这个BOX.

添加BOX的命令是 vagrant box add viniciusfs/centos7   

[解释:vagrant box add box 名称]

安装完成之后我们可以在使用 vagrant box list  来查看一下BOX列表。

                          使用Vagrant管理虚拟机

                                                          查看BOX列表[/caption]

6.在Windows电脑上创建项目目录并在项目中启动虚拟机

6.1在我们本地电脑的桌面创建一个vagrant-learning 的文件夹,用于存放我们的项目。

6.2运行Cmder或Powershell,然后进入到我们的这个项目所在的目录,

    cd c:\User\Desktop\vagrant-learning       //进入到vagrant-learning这个项目目录

    vagrant box list                             //查看可用的BOX列表

    vagrant init viniciusfs/centos7      //初始化BOX

    vagrant up                                    //启动虚拟机

                        使用Vagrant管理虚拟机

                                                 在项目里启动虚拟机[/caption]

                        使用Vagrant管理虚拟机

                                                                     启动虚拟机

7.在Windows电脑上登陆CentOS服务器

7.1 在Powershell或Cmder命令行窗口,输入 vagrant ssh  登陆CentOS服务器。

                        使用Vagrant管理虚拟机

                                                   vagrant ssh登陆服务器[/caption]

 

7.2 使用XshellPutty来登陆CentOS服务器。默认服务器的IP地址是 127.0.0.1, ssh端口 2222,用户名 vagrant,密码vagrant

                                         使用Vagrant管理虚拟机

                                                                 Putty输入IP和端口[/caption]

                                         使用Vagrant管理虚拟机

                                                                 输入密码vagrant[/caption]

                                        使用Vagrant管理虚拟机

                                                              Putty成功登陆服务器

8.在Windows电脑上使用Vagrant对虚拟机进行启动,关机,暂停,恢复,销毁操作

启动:    vagrant up

停止:    vagrant halt

暂停: vagrant suspend

恢复: vagrant resume

重启:    vagrant reload

销毁: vagrant destroy

查看虚拟机状态: vagrant status

 

9.虚拟机的共享目录

一般我们本地电脑的项目所在的文件夹就是和虚拟机同步的目录,我们可以在项目的文件夹里面去创建文件,然后,虚拟机就可以执行我们本地电脑项目里面的文件。本地项目所在文件夹,这里是vagrant-learning则对应虚拟机的 /vagrant目录,他们是同步的。下面我们可以来验证一下。

 

9.1 在本地电脑项目文件夹vagrant-learning下面创建一个www文件夹,在www下创建index.html。

9.2 用编辑器打开index.html写点内容,比如这里写的内容是 “vagrant 学习”。

9.3 在Cmder或Powershell登陆虚拟机(vagrant ssh),然后cd /vagrant 进入vagrant目录,我们看到了我们在本地电脑手动创建的www文件夹。

9.4  cd www切换到www目录,ls 查看一下www下的文件,我们看到了本地电脑创建的index.html文件。

9.5 cat index.html 查看index.html里面的内容,我们看到了,我们在本地电脑index.html里面写的内容 “vagrant 学习”。

                                  使用Vagrant管理虚拟机

                                                               虚拟机上查看项目里的文件

10.在Windows本地电脑给虚拟机创建额外的共享目录

10.1 用编辑器打开我们的项目文件夹vagrant-learning下的Vagrantfile.

10.2 找到 “ # config.vm.synced_folder "../data", "/vagrant_data ”这一行,把这一行最前面的#去掉。

10.3. 按回车,在这一行的下面输入: create:true,owner:"root",group:"root"  (意思是如果本地没有data这个文件夹的话就创建一个data文件,文件夹的owner拥有着和group群组都属于root)

10.4 保存并关闭Vagrantfile文件。

10.5 vagrant reload 重启虚拟机。

10.6 vagrant ssh登陆虚拟机,进入根目录 (cd /) ,ls-la可以看到多了一个vagrant_data的目录,它和本地电脑的 data 是一组同步的目录,vagrant_data的拥有者和群组都是root。

               使用Vagrant管理虚拟机

                                                                      配置虚拟机共享目录

                                   使用Vagrant管理虚拟机

                                                                 vagrant_data同步目录

 

11.给虚拟机配置私有网络

11.1 用编辑器打开本地项目vagrant-learning下的Vagrantfile。

11.2 找到  # config.vm.network "private_network", ip: "192.168.33.10"  这一行,把最前面的#去掉,后面IP地址根据自己需要设置私有IP地址段的IP地址。我这里设置的是192.168.1.10

11.3 保存并关闭Vagrantfile.

11.4 vagrant reload重启一下虚拟机。

11.5 ping一下我们刚刚配置的虚拟机IP地址,这里ping 192.168.1.10,我们看到可以ping通。

                                    使用Vagrant管理虚拟机

                                                           ping虚拟机IP地址[/caption]

11.6 我们可以登陆进去虚拟机检查一下虚拟机的IP地址。

vagrant ssh

ifconfig

                              使用Vagrant管理虚拟机

                                                       ifconfig查看IP地址[/caption]

12. 给虚拟机配置公有网络

12.1 用编辑器打开项目vagrant-learning下的Vagrantfile.

12.2 找到 #config.vm.network "public_network" 这一行,把最前面的#去掉,保存文件。

12.3 vagrant reload 重启虚拟机。

12.4 vagrant ssh登陆虚拟机,ifconfig查看一下现在虚拟机的IP地址。

12.5 exit虚拟机,ping虚拟机IP地址,看到可以ping通。

12.6 用局域网的其他电脑,ping虚拟机IP地址,应该也是可以ping通。说明公有网络配置正确。

(图略)

13. 在centos7虚拟机上搭建WEB服务器

sudo yum install httpd                           //安装apach

sudo yum install vim                             //安装vim编辑器

sudo vim /etc/httpd/conf/httpd.conf    //修改apach配置文件,更改网站根目录为DocumentRoot /vagrant/www/

sudo service httpd start                        //启动apach

sudo service httpd status                    //查看apach运行的状态

sudo service httpd restart                  //重启apach服务

sudo service httpd stop                   // 停止apach服务

(图略)

 

 

14. 重新打包虚拟机BOX

重新打包BOX的目的是在以后的项目中可以复用,比如我们将安装好apach服务的BOX打包,下次我们需要用到apach服务的虚拟主机的时候,直接初始化我们打包好的BOX,然后vagrant up启动之后,就可以使用apach,就不用在去配置apach相关的东西了。

14.1 进入项目的目录vagrant-learning,然后vagrant up启动虚拟机。

14.2 删除70-persistent-net.rules.

                        使用Vagrant管理虚拟机

                                                     删除70-persistent-net.rules

14.3 vagrant package打包虚拟机镜像BOX。

                使用Vagrant管理虚拟机

                                                          vagrant package打包虚拟机镜像BOX

 

14.4 添加我们打包的BOX

vagrant box add lihong/centos7 package.box

//lihong/centos7 是我定义的BOX的名称, package.box是要添加的BOX

使用Vagrant管理虚拟机

                                                            添加打包的package.box 

14.5 删除打包生成的package.box文件。

rm -rf package.box

 

14.5 查看一下可用的BOX列表。

vagrant box list

 

                                使用Vagrant管理虚拟机

                                                  删除打包生成的package.box[/caption]

 

 

15. 在新的项目上应用打包的虚拟机BOX

15.1 在本地电脑重新创建一个项目的目录,比如lihong,并进入lihong这个目录。

15.2 初始化我们打包后添加的BOX,这里我们定义打包后的BOX名字是lihong/centos7

vagrant init lihong/centos7

                            使用Vagrant管理虚拟机

                                                                  初始化打包的BOX[/caption]

15.3 查看打包后运行的BOX是否装了apach

使用Vagrant管理虚拟机                                                                                     查看apach状态

 

16.在Windows电脑上用Vagrant定义多主机

 

16.1 在桌面上创建一个新的工作项目目录workflow-project.

16.2 进入这个目录,vagrant box list查看一下可以使用的box,如下 (lihong/centos7这个BOX是我自己打包的BOX,我们后面使用这个BOX)

                                         使用Vagrant管理虚拟机

                                                            workflow-project可用的BOX

 

16.3在workflow-project项目下初始化lihong/centos7这个BOX,它会在workflow-project文件夹下面创建一个vagrantfile的文件。

 

 

16.4 使用编辑器打开workflow-project这个目录下边的Vagrantfile文件,分别定义development和production这两台主机。配置方法如下截图所示。

                使用Vagrant管理虚拟机

                                                              配置development和production主机[/caption]

16.5 查看这2台虚拟机的状态。vagrant status

                                 使用Vagrant管理虚拟机

                                                               多主机的not create状态

16.6 启动这两台主机。

vagrant up (它会同时启动development ,production这2台主机)

如果要启动其中的某一台,我们使用命令 vagrant up developement来单独启动development 这台主机。如果想SSH进入某台主机可以使用命令 vagrant ssh development (这个命令是ssh登陆development 这台主机)

启动完成之后,我们再来看一下vagrant status,这2台主机都已经处于running运行状态了。

                         使用Vagrant管理虚拟机

                                                                     多主机running状态

17.多主机的网络配置

17.1 用编辑器打开工作项目的目录workflow下的Vagrantfile。

17.2 在Vagrantfile给2台主机设置IP地址。具体设置参考下面截图。

这里我们给2台主机定义私有网络IP地址。两台IP地址分别为192.168.2.100, 192.168.2.101

(值得注意的是,IP地址要和你本地电脑的IP地址处于不同的网段)

                  使用Vagrant管理虚拟机

                                                             给多主机配置IP地址[/caption]

17.3 vagrant reload重启虚拟主机。

17.4 在SSH连接到这2台主机。vagrant ssh development , vagrant ssh production。

然后用ifconfig命令来查看一下development和production主机的IP地址。

                    使用Vagrant管理虚拟机

                                                           查看development主机的IP地址[/caption]

                          使用Vagrant管理虚拟机

                                                               查看production主机的IP地址

17.5 站在development 主机上测试是否可以ping通production主机的IP地址192.168.2.101。

                                 使用Vagrant管理虚拟机

                                              站在development上ping一下production主机的IP地址[/caption]

 

17.6 反过来,站在production主机上测试一下是否可以ping通development主机的IP地址192.168.2.100。

                                  使用Vagrant管理虚拟机

                                            站在production主机ping一下development主机的IP地址[/caption]

 

18.多主机的主机名设置

18.1 我们先SSH登陆主机,输入命令hostname查看一下现在的主机名。

                                               使用Vagrant管理虚拟机

                                                                 hostname查看主机名

 

 

18.2 在定义这2台主机的Vagrantfile里面去设置一下这两台主机的主机名。

                  使用Vagrant管理虚拟机

                                                                定义多主机名

 

18.3 vagrant reload 重启一下这2台主机。然后重新SSH登陆,看一下hostname.

 

                                    使用Vagrant管理虚拟机

                                                                   重新查看主机名[/caption]

                                        使用Vagrant管理虚拟机

                                                                    重新查看主机名2

 

备注:我们也可以通过network文件进行修改主机名:

vi /etc/sysconfig/network

service network restart

19.多主机的共享目录设置

默认多主机使用项目所在的目录作为虚拟机和本地电脑的同步目录。这里默认就是,本地电脑的同步目录是workflow-project, 2台虚拟主机development,production主机根目录下的vagrant 目录。

我们的任务是给development , production分别创建2个不同的同步共享目录。

 

19.1 在项目的目录分别创建development ,production 文件夹。

                                  使用Vagrant管理虚拟机

                                                               本地项目的目录下创建2个同步目录

19.2 编辑Vagrantfile,设置同步的目录。

                          使用Vagrant管理虚拟机

                                                                在Vagrantfile中设置同步目录[/caption]

19.3 vagrant reload重启主机。

19.4 然后我们在本地电脑development下放一个index.html

                                      使用Vagrant管理虚拟机

                                                              本地development同步目录下添加文件[/caption]

19.5 vagrant ssh development 登陆development主机查看 /vagrant 是否有这个文件,如果有就同步成功了。如下截图。

                                             使用Vagrant管理虚拟机

                                              在development主机查看同步目录vagrant是否有本地添加的文件

哇噢,写到现在写了好久,太累了,休息一下。你学会了吗?如果有问题可以在下方留言,相互交流。

更多文章,请到红为网络独立博客观看。