在MS Windows下通过Vagrant搭建虚拟化环境
在开始本文前,你需要准备如下所示的几个资源。
Vagrant官方网站:
https://www.vagrantup.com/
可以根据自己的主机环境选择针对特定平台的安装包。
本文中,我的平台是MS Windows 7 64,所以我选择下载了Win64的包。
需要注意的是:该软件包在Windows上安装完成后,需要重启系统,方可生效。
Vagrant BOX:
http://www.vagrantbox.es/
在该站点下载你需要的BOX。(这里仅需下载,在后文中会使用到下载的*.box介质。)
官方提供的样例:http://files.vagrantup.com/precise32.box
下载的资源:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
PS C:\Users\logical_mind> g: PS G:\> cd G:\迅雷下载\Vagrant PS G:\迅雷下载\Vagrant> dir 目录: G:\迅雷下载\Vagrant Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2014/12/13 16:24 843204608 centos_56_32.box -a--- 2014/12/13 17:21 666476889 oraclelinux-5-x86_64.box -a--- 2014/12/13 16:44 590264768 oraclelinux-7-x86_64.box PS G:\迅雷下载\Vagrant> PS G:\迅雷下载\Vagrant> |
Oracle Virtual Box:
https://www.virtualbox.org/
根据上面的资源链接,一一下载,并安装其中的:vagrant与VirtualBox。
MS Windows中的安装很简单,下一步即可,这里就不一一描述(并截图)了。
下面开始配置。
1. 通过“vagrant”为环境添加BOX:
添加BOX之前,VirtualBOX的状态:
执行添加:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
PS G:\迅雷下载\Vagrant> cd G:\vagrant_data PS G:\vagrant_data> pwd Path ---- G:\vagrant_data PS G:\vagrant_data> dir PS G:\vagrant_data> vagrant box add base "G:\迅雷下载\Vagrant\oraclelinux-7-x86_64.box" ==> box: Adding box 'base' (v0) for provider: box: Downloading: file://G:/%D1%B8%C0%D7%CF%C2%D4%D8/Vagrant/oraclelinux-7-x86_64.box box: Progress: 100% (Rate: 102M/s, Estimated time remaining: --:--:--) ==> box: Successfully added box 'base' (v0) for 'virtualbox'! PS G:\vagrant_data> |
在设定好BOX之后,生成对应的Vagrantfile文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
PS G:\vagrant_data> vagrant init A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant. PS G:\vagrant_data> PS G:\vagrant_data> dir 目录: G:\vagrant_data Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2014/12/14 13:28 3056 Vagrantfile PS G:\vagrant_data> |
可以通过任意一个文本编辑工具编辑Vagrantfile。
正如该文件中描述的那样:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine. In the example below, # accessing "localhost:8080" will access port 80 on the guest machine. # config.vm.network "forwarded_port", guest: 80, host: 8080 # Create a private network, which allows host-only access to the machine # using a specific IP. # config.vm.network "private_network", ip: "192.168.33.10" # Create a public network, which generally matched to bridged network. # Bridged networks make the machine appear as another physical device on # your network. # config.vm.network "public_network" |
Vagrant的虚拟机的网络有三种模式:
NAT
PRIVATE
PUBLIC
(语法上述帮助信息已经写的很明确了,照着配就好)
这里,我设置为Public。
目录映射。
即将宿主机器的某个路径共享给GuestOS,具体如下:
1 2 3 4 5 6 |
# Share an additional folder to the guest VM. The first argument is # the path on the host to the actual folder. The second argument is # the path on the guest to mount the folder. And the optional third # argument is a set of non-required options. # config.vm.synced_folder "../data", "/vagrant_data" config.vm.synced_folder "shared_between_us/", "/shared_between_us" |
(关于Vagrantfile还有更多的配置,这里不细说。)
在Vagrantfile配置完成后,就可以启动虚拟机了,即上文中通过“vagrant box add …”的机器。
具体如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
PS G:\vagrant_data> vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'base'... ==> default: Matching MAC address for NAT networking... ==> default: Setting the name of the VM: vagrant_data_default_1418536130375_69754 ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 => 2222 (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Connection timeout. Retrying... default: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if its present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Mounting shared folders... default: /vagrant => G:/vagrant_data PS G:\vagrant_data> PS G:\vagrant_data> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
PS G:\vagrant_data> pwd Path ---- G:\vagrant_data PS G:\vagrant_data> dir 目录: G:\vagrant_data Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2014/12/14 13:42 .vagrant d---- 2014/12/14 13:36 shared_between_us -a--- 2014/12/13 16:24 843204608 centos_56_32.box -a--- 2014/12/14 13:48 3056 Vagrantfile PS G:\vagrant_data> |
此时,通过“Vagrant”查看到的状态:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PS G:\vagrant_data> vagrant status Current machine states: default running (virtualbox) The VM is running. To stop this VM, you can run `vagrant halt` to shut it down forcefully, or you can run `vagrant suspend` to simply suspend the virtual machine. In either case, to restart it again, simply run `vagrant up`. PS G:\vagrant_data> PS G:\vagrant_data> vagrant box list adamhuan-centos56-32 (virtualbox, 0) base (virtualbox, 0) PS G:\vagrant_data> |
连入虚拟机:
1 2 3 4 5 6 7 8 9 10 11 |
PS G:\vagrant_data> 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: G:/vagrant_data/.vagrant/machines/default/virtualbox/private_key PS G:\vagrant_data> |
在我的环境里,我没有SSH的工具,所以上述命令“vagrant ssh”,反馈不正确的信息。
如图所示,最后,如愿的登入了Vagrant生成的虚拟机了。
Shell Log:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[vagrant@oraclelinux7 ~]$ hostname oraclelinux7.vagrant.vm [vagrant@oraclelinux7 ~]$ ifconfig enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::a00:27ff:fe03:36f0 prefixlen 64 scopeid 0x20<link> ether 08:00:27:03:36:f0 txqueuelen 1000 (Ethernet) RX packets 581 bytes 65359 (63.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 472 bytes 62960 (61.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 11 bytes 1220 (1.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 11 bytes 1220 (1.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [vagrant@oraclelinux7 ~]$ |
其他的一些管理命令:
启动虚拟机:vagrant up
关闭虚拟机:vagrant halt
暂停虚拟机:vagrant suspend
恢复虚拟机:vagrant resume
删除虚拟机:vagrant destroy
查看vagrant当前拥有的BOX:vagrant box list
查看当前vagrant状态:vagrant status
查看当前vagrant版本:vagrant version
————————————————————————————
Ending。