Vagrant 初尝试

Vagrant 初尝试

最近的开发是在 win 系统上,操作各种不方便,然后 python 的环境依赖又是一堆堆的,所以准备配置一个 vagrant 环境,在 win 下写代码,在虚拟机里运行,即使后面不在 win 上开发了也可以继续使用,目前的设想是开发环境全部放到 vagrant 里(MySQL 也许还是在本地跑一个)。然后映射开发目录到 win 本地。

安装 vagrant

这里需要安装三个东西,一个 vagrant 软件,一个 virtualbox 软件,然后一个 box。vagrant 只是一个虚拟环境管理工具,所以还需要一个具体的虚拟化工具,这里选用 VirtualBox 是因为他跨平台。然后 box 了, 是一个包含了操作系统,vagrant 配置的压缩包。

前两个软件在官网下就好,box 需要自己另外下,当然,如果网好带梯子可以不用自己下载,因为我喜欢使用 centos,所以这里我选用 centos7 的 box。box 的下载地址可以在这里看。

先安装 virtualbox 和 vagrant。

初始化

建立一个工作目录,我的是 vagrant。

接下来需要执行一个命令指定默认 box,如果你没有下载 box 这一步不用执行。windows 里我是使用的 babun 模拟的终端,直接用命令行也是可以得。

 { vagrant }  » $ vagrant box add base centos65.box                              ~/workspace/vagrant
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'base' (v0) for provider:
    box: Unpacking necessary files from: file://D:/workspace/vagrant/centos65.box
    box:
==> box: Successfully added box 'base' (v0) for 'virtualbox'!

这条命令里 centos65.box 就是刚刚下载的 box。base 表示默认指定的 box,也可以自己另外取名,这个就是给 base 指定了我下载的这个 box。设置完之后,执行

{ vagrant }  » $ 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.

表示在当前目录初始化 vagrant 环境。这里会生成一个 Vagrantfile 文件。

然后启动虚拟机

{ vagrant }  » $ vagrant up                                                     ~/workspace/vagrant
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_default_1488883590279_63993
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (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:
    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 it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.3.6
    default: VirtualBox Version: 5.1
==> default: Mounting shared folders...
    default: /vagrant => D:/workspace/vagrant

这里虚拟机已经启动了,打印了端口映射的信息,然后就可以 ssh 连接了,win 上无法使用 vagrant ssh命令,需要另外使用工具连接。账号和密码都是vagrant, root 密码也是。

ssh 连上之后就可以和普通 linux 服务器一样操作了。配置开发环境等等。

配置共享目录

在 Vagrantfile 里有这样一行

 # config.vm.synced_folder "../data", "/vagrant_data"

这里就是配置共享目录的地方,前面的目录是本机上的,后面的是虚拟机上的,默认 vagrant 初始化的目录 映射到了虚拟机的 /vagrant 目录了。我一般就直接把代码 clone 到这个目录,然后就在 win 下 ide 打开写代码,同时在虚拟机里运行这个目录的代码查看运行效果。但是如果有其他需要映射的目录也是可以添加这样的配置文件映射的。

配置网络

Vagrantfile 里有这样三行配置

# config.vm.network "forwarded_port", guest: 22, host: 22222
# config.vm.network "private_network", ip: "192.168.110.2"
# config.vm.network "public_network"

分别对应了 vagrant 的三种网络配置方法。

第一种是端口转发,示例就是把主机的 22222 转发到虚拟机的 22 端口。当你访问 localhost:22222 实际上是虚拟机的 22 端口。

第二个是私有网络,给定一个 ip,在主机上使用该 ip 即可访问虚拟机(只有该主机可以访问),注意该 ip 不能和主机所在局域网 ip 同段。

第三种是公有网络,将虚拟机作为局域网内的机器。

打包 box

如果你在虚拟机里配置好了环境,突然需要在另一台机器上做这个项目的开发,你可以把这个虚拟机打包成一个 box,然后在另一台机器上部署,打包的命令是 vagrant package ,具体参数可以查询官方文档。

其他

如果需要开启多个虚拟机,可以建立多个工作目录,然后通过 vagrant box add [title] path-to-your-box 添加虚拟机,这里的 title 就是指定的 box 名。然后使用 vagrant init [title] 在该目录下初始化虚拟机,然后就可以 vagrant up 启动了。