用Vagrant部署开发环境

技术运维Vagrant 866

Vagrant专题页我们介绍过Vagrant基于VirtualBox运行,本身并不是虚拟化技术,它只是外挂在VirtualBox虚拟机上的自动化程序,所以一定要先安装好VirtualBox,在安装完VirtualBox和Vagrant之后,你可以在http://www.vagrantbox.es/寻找镜像,这里的资源非常多,各种部署好的开发环境,如果你想自己练手做环境部署建议你下载一个纯净的OS。

Note:Vagrant支持远程和本地镜像的安装,由于国外网络访问慢、不稳定建议你下载box文件到本地安装,比如我下载了Centos7的镜像文件CentOS-7.1.1503-x86_64-netboot.box

Vagrant的基本使用

在本地建立工作目录,打开命令行工具cmd并切换至该目录,由于Vagrant安装程序已经自动加入了path变量,所以我们直接可以使用vagrant命令:

vagrant box add boxname CentOS-7.1.1503-x86_64-netboot.box

vagrant box add 为创建镜像的命令;boxname为指定的名称(在VirtualBox中的虚拟主机名称);CentOS-7.1.1503-x86_64-netboot.box是你的.box文件地址,可以是远程http地址,也可以是本地地址。

创建好镜像后执行命令来初始化配置

vagrant init boxname

这时候工作目录会生成出Vagrantfile文件,这个文件非常重要。

Vagrandfile文件的配置:

一些重要的需要配置参数:

端口映射(Forwarded port)

config.vm.network "forwarded_port", guest: 80, host: 8080

guest为虚拟机的端口,host为宿主的端口,这行配置的意思是将虚拟机的80端口映射到宿主电脑的8080端口,也就是说如果你在虚拟机环境里搭建了某web项目,用的默认80端口你在本地浏览器使用8080端口即可访问。

当然这里可以配置多个端口映射,添加一行配置:

config.vm.network "forwarded_port", guest: 5000, host: 5050

讲虚拟机的5000端口映射至宿主电脑5050端口。

2018-01-18更新:

如果宿主电脑无法访问,但是虚拟机curl -I http://xxx可以访问,可以先查看一下防火墙的状态,如果防火墙处于开启状态需要关闭或者添加通行规则,基础使用命令:

firewall-cmd --zone=public --permanent --add-port=5000/tcp #一个端口
firewall-cmd --zone=public --permanent --add-port=4990-4999/udp #端口区间,不同的端口协议
firewall-cmd --zone=public --permanent --list-ports #查看端口开放情况

添加完规则后别忘记重启一下防火墙

systemctl restart firewalld

私有网络(Private network)

官方链接

config.vm.network "private_network", ip: "192.168.33.10"

只有主机可以访问虚拟机,如果多个虚拟机设定在同一个网段也可以互相访问,当然虚拟机是可以访问外部网络的。

这里配置好之后可以用ssh直接使用22端口连接这个IP地址。

公有网络(Public network)

官方链接

虚拟机享受实体机器一样的待遇,一样的网络配置,vagrant1.3版本之后也可以设定静态IP。设定语法如下:

DHCP分配IP

config.vm.network "public_network"

分配静态IP

config.vm.network "public_network", ip: "192.168.1.120"

目录映射(synced folder)

config.vm.synced_folder "Path/To/Host", "/Path/To/VirtualHost"

将宿主电脑的文件目录同步至虚拟机上,第一个参数是本地电脑目录,第二个是虚拟机的目录,如果不做任何配置会把当前工作目录映射至虚拟机/vagrant目录中。

启动时运行脚本

  # config.vm.provision "shell", inline: <<-SHELL
  #   sudo apt-get update
  #   sudo apt-get install -y apache2
  # SHELL

如果需要虚拟机启动时运行脚本可以配置该项

Vagrant常用的虚拟机管理命令

  • vagrant up (启动虚拟机,开机)
  • vagrant halt (关闭虚拟机,关机)
  • vagrant suspend (暂停虚拟机,睡眠)
  • vagrant resume (恢复虚拟机,唤醒)
  • vagrant destroy (删除虚拟机,删除)

打包分享你的Box

Note:打包前先用命令 vagrant halt 关闭虚拟机

打包需要用到vagrant package命令,语法:

vagrant package -h
Usage: vagrant package [options] [name|id]

Options:

        --base NAME                  Name of a VM in virtualbox to package as a base box
 ## 注意:这里是个小坑,这里的NAME是虚拟机vms的名称,一般VirtualBox会建立虚拟机的目录名,在这里就是目录名,比如我是把虚拟机全部放在D:\VirtualBox VMs下,到这里找到对应的虚拟机目录名就好了
        --output NAME                Name of the file to output  ##输出文件名
        --include FILE...            Additional files to package with the box  ##打包包含那些文件
        --vagrantfile FILE           Vagrantfile to package with the box  ##包含vagrantfile配置文件
    -h, --help                       Print this help  ##帮助

比如我要打包CentOS7上搭建LEMP的环境

vagrant package --base vagrant-lemp_default_1484553482505_41668 --output centos7-lemp.box --vagrantfile Vagrantfile
E:\WorkSpace\Vagrant\vagrant-lemp>vagrant package --output centos7-lemp.box --base vagrant-lemp_default_1484553482505_41668 --vagrantfile Vagrantfile
==> vagrant-lemp_default_1484553482505_41668: Clearing any previously set forwarded ports...
==> vagrant-lemp_default_1484553482505_41668: Exporting VM...
==> vagrant-lemp_default_1484553482505_41668: Compressing package to: E:/WorkSpace/Vagrant/vagrant-lemp/centos7-lemp.box
==> vagrant-lemp_default_1484553482505_41668: Packaging additional file: Vagrantfile

这时候看到目录中已经多了一个名文centos7-lemp.box的box文件了,这时候你可以分享这个box给其他人,无需再重复部署环境了。

Post Comment