说重点系列–Vagrant:
这个东西本质上,是你电脑上要装一个虚拟机,然后通过命令行,可以很简单的生成和配置虚拟机。
很多人说这个东西是统一开发环境的神器。
不过我一般用于测试环境。过去我测试一个程序,要找一台电脑或者vps,部署好Linux,然后跑一跑,这么一个流程下来,少说2个小时完了,有了vagrant,我可能只需要十分钟就完事了。
资源
客户端下载:https://www.vagrantup.com/downloads.html
CentOS box下载:https://cloud.centos.org/centos/7/vagrant/x86_64/images/
手册:https://www.vagrantup.com/docs/index.html
使用
加载box
1 | vagrant box add ${title} $url} |
title为自己起的名字,url为box地址,可以在线也可以本地。eg:
1 | vagrant box add CentOS-7-x86_64-Vagrant-1809_01 D:\boxes\CentOS-7-x86_64-Vagrant-1809_01.HyperV.box |
建立一个虚拟机
1 | cd ${project} |
打包分发
当你配置好开发环境后,退出并关闭虚拟机。在终端里对开发环境进行打包:
1 | $ vagrant package |
打包完成后会在当前目录生成一个 package.box 的文件,将这个文件传给其他用户.
其他用户只要添加这个 box 并用其初始化自己的开发目录就能得到一个一模一样的开发环境了。
如果你只是一般使用,那么以上的操作,从新建一个”box”,到使用”box”创建一个虚拟开发环境,到将这个环境分发使用你已经没问题了。
那么我们还差什么?是的,查找和删除
1 | # 查看所有已经保存并生效的box, |
好了,你已经学会了。
Options
~/dev 目录对应虚拟机中的目录是 /vagrant
虚拟化增强
其实这个没啥大用,我都准备删掉都东西。
Hyper-V
Windows需管理员权限运行
virtual box
centos
1 | yum install -y gcc kernel-devel |
ubuntu
1 | sudo apt install -y gcc make perl |
1 | sh ./VBoxLinuxAdditions.run |
修改网卡模式
private_network
Vagrant 默认是使用端口映射方式将虚拟机的端口映射本地从而实现类似 http://localhost:80 这种访问方式。
这种方式比较麻烦,新开和修改端口的时候都得编辑。相比较而言,host-only 模式显得方便多了。打开 Vagrantfile,将下面这行的注释去掉(移除 #)并保存:
1 | config.vm.network :private_network, ip: "192.168.33.10" |
重启虚拟机,这样我们就能用 192.168.33.10 访问这台机器了,你可以把 IP 改成其他地址,只要不产生冲突就行。
public_network
事实上,这种模式,在配合VirtualBox使用的时候,会创建一个eth1网卡桥接,然后默认网卡依然是那张eth0。
所以,很多时候,我们要自己设置一下默认网卡,比如我们可以在Vagrantfile中添加类似于这么一行:
1 | cat <<EOF >> /etc/sysconfig/network |
Vagrantfile
集成预安装
就是让你在初次运行 vagrant up 后,虚拟机创建过程众自动运行的初始化命令。
打开 Vagrantfile 文件末尾处有下面被注释的代码。
就是让你在初次运行 vagrant up 后,虚拟机创建过程众自动运行的初始化命令。
1 | config.vm.provision "shell", inline: <<-SHELL |
如果你不是初次运行,同时又修改了这里的命令,想让系统再次运行这里面的命令,你可以使用 vagrant reload –provision 进行重载。
所以在这种情况下,你只要将 Vagrantfile 共享给团队的其他成员就可以了。
你还可以把要运行的命令单独写在一个文件里存放在相同的目录下,比如 bootstrap.sh:
1 | #!/usr/bin/env bash |
然后在 Vagrantfile 里这样添加:
1 | Vagrant.configure("2") do |config| |
效果和直接写在 Vagrantfile 是一样的。
注意事项
使用 Apache/Nginx 时会出现诸如图片修改后但页面刷新仍然是旧文件的情况,是由于静态文件缓存造成的。需要对虚拟机里的 Apache/Nginx 配置文件进行修改:
1 | # Apache 配置(httpd.conf 或者 apache.conf)添加: |