通过vagrant和Cygwin创建虚拟机

目录

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/http://andyyoung01.16mb.com/

Vagrant是一个开源的基于ruby的开源虚拟机管理工具,它能够以脚本化的方式启动、停止、和和删除虚拟机,而且它能够完成自己定义网络分配、初始化执行脚本、添加硬盘等各种复杂的动作,最重要的是Vagrant提供了类似于docker image的box。本文就来简单探索一下Windows下Vagrant的使用。

在Linux或MacOS环境下,由于Vagrant依赖的一些程序(rsync、ssh等)比较全,在使用过程中遇到的问题可能相对较少。然而在Windows环境下,由于Windows的cmd命令行与bash环境区别较大,可能会遇到相对较多的问题。本文主要描述了在Windows环境中如何正确使用Vagrant。
首先,Windows下Vagrant的安装和配置可以参考这篇文章。然而在使用vagrant ssh登录虚拟机时,却遇到如下错误:

D:\VM\sfh>vagrant ssh
`ssh` executable not found in any directories in the %PATH% variable. Is an
SSH client installed? Try installing Cygwin, MinGW or Git, all of which
contain an SSH client. Or use your favorite SSH client with the following
authentication information shown below:

Host: 127.0.0.1
Port: 2222
Username: vagrant
Private key: D:/VM/sfh/.vagrant/machines/default/virtualbox/private_key

这是因为Windows的cmd命令行环境,并没有ssh命令可用,于是便请出Cygwin这个Windows下的工具。简单来说,Cygwin其实就是一个命令行工具,它利用Windows的一些函数来实现Linux独有的API。Cygwin的安装也很简单,只要在其官网下载安装程序包安装即可,首次安装时,其默认只安装最小化的基础包,其它的一些程序需要选择安装。另外,可以将国内的镜像添加到安装源列表中,这里推荐使用网易的镜像(使用说明参考这里)。
在安装了Cygwin后,确认默认的包都已经安装可以正常运行之后(点击Cygwin64 Terminal快捷方式,可以正常运行cygwin命令行程序),再次运行安装程序。这次选择安装rsync和ssh。如下图:
1.png
首先在Search框中输入rsync,稍等片刻待安装程序过滤出rsync包之后,点击Skip前面那个箭头,Bin一栏下变成选择状态;然后在Search框中输入openssh,同样点选Skip前面的箭头,Bin一栏下变成选择状态后,点击下一步便完成了rsync和ssh程序的安装。测试一下,打开Cygwin命令行界面,分别输入rsync和ssh命令后,都有命令行提示输出,这两个程序便成功安装了。
下面所有的Vagrant命令,都通过Cygwin命令行窗口来执行,这样,在Vagrant执行过程中再调用rsync程序和ssh程序等第三方程序,便不会报错了。通过如下的Vagrantfile来安装两台CentOS7的virtualbox的虚拟机:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.define "node1" do |node1|
node1.vm.network "private_network", ip: "192.168.56.10"
node1.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
end
config.vm.define "node2" do |node2|
node2.vm.network "private_network", ip: "192.168.56.11"
node2.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
end
end

进入该文件所在文件夹,打开Cygwin,执行vagrant up

$ vagrant up
Bringing machine 'node1' up with 'virtualbox' provider...
Bringing machine 'node2' up with 'virtualbox' provider...
==> node1: Importing base box 'centos/7'...
...
==> node1: Machine booted and ready!
...
==> node1: Rsyncing folder: /cygdrive/d/VM/vagrant_centos7/ => /vagrant
==> node2: Importing base box 'centos/7'...
...
==> node2: Machine booted and ready!
...
==> node2: Rsyncing folder: /cygdrive/d/VM/vagrant_centos7/ => /vagrant

尝试ssh登陆到主机上:

$ vagrant ssh node1
[vagrant@localhost ~]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:ba:51:2b brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
    valid_lft 85998sec preferred_lft 85998sec
    inet6 fe80::5054:ff:feba:512b/64 scope link
    valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:ae:06:e5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.10/24 brd 192.168.56.255 scope global eth1
    valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:feae:6e5/64 scope link
    valid_lft forever preferred_lft forever

可见,在windows环境中,通过Cygwin执行vagrant命令后,命令都能正常执行。

结束语:通过Vagrant可以方便地实现对虚拟机的管理,包括建立和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境必须的各类软件、打包和分发虚拟机运行环境等。这给开发环境的搭建,尤其是集群环境的搭建提供了自动化的解决方案。同时也给需要在不同平台环境下工作的人员提供了便利。