标签:
在上一篇中,我们讲到了Vagrant的基本使用,在本文中我们将尝试创建自己的Vagrant box。
Vagrant box只是提供了一个虚拟机的基线,比如对于Harshicorp官网提供的unbuntu/trusty64这个box,相当于只是一个Ubuntu的ISO安装文件。一般来讲,在安装了操作系统之后,你都需要安装一些额外的软件以供项目所用,比如,要部署一个网站,你可能需要安装Tomcat以及MySQL等等。此时,我们可以通过在Vagrantfile中配置Provision来帮助我们自动完成这些软件安装任务。但是当需要安装的软件越来越多以及需要启动的虚拟机数量越来越多,执行Provison也会变得越来越慢,此时我们便可以将一些公共的软件预先打包到box中,即创建自己的box。然后将这样的box在团队或者公司范围内发布以供后用。当然,除了加快虚拟机启动过程,创建自己的box还使得我们预先对所有虚拟机进行相同的基本配置,比如安装公司的安全证书,比如创建属于自己的操作系统用户(默认用户名为vagrant)以及配置相应的公钥等。
对于Vagrant box来说,我们需要向box注入以下功能:
当然,我们并不需要完全从头到尾创建一个box,而是可以在一些公共的box的基础之上通过添加额外的功能来创建自己的box,本文便将通过使用ubuntu/xenial64作为基础来创建新的box。
我们将使用Shell作为Provision方式,向新的box中添加以下功能:
首先初始化Vagrantfile:
vagrant init -m ubuntu/xenial64
值得一提的是,ubuntu/xenial64默认使用的SSH登录用户名为ubuntu,而不是先前的vagrant。
编辑Vagrantfile,通过Shell安装openjdk1.8和Tomcat 8,同时设置端口转发以便Host机器能够访问Tomcat主页(由于默认的网络是Virtualbox的NAT,故Host机是不能访问到虚拟机的):
$script = <<SCRIPT
sudo apt-get update
sudo apt-get -y install openjdk-8-jdk
sudo apt-get -y install tomcat8
SCRIPT
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: $script
config.vm.box = "ubuntu/xenial64"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.provider "virtualbox" do |v|
v.name = "my-virtualbox"
end
end
启动虚拟机:
vagrant up
此时在Host机上访问http://localhost:8080,你会看到“It Works!”,表示Tomcat安装及运行成功。
好了,前面讲的都只是如何创建虚拟机,有了这些准备我们才能够基于新建的虚拟机创建box。
先关闭虚拟机:
vagrant halt
由于在Vagrantfile中,我们为虚拟机指定了名字“my-vertualbox”,在创建box时我们可以直接通过该名字指向新建的虚拟机:
vagrant package --base my-virtualbox
Vagrant将创建名为package.box的新的box,此后我们便可以使用该package.box作为其他虚拟机的基础box了。另外,如果当前处于Vagrantfile文件所在目录,则可简化创建命令:
vagrant package
如果此时虚拟机正在运行,Vagrant将先关闭运行的虚拟机,然后创建box。另外,“vagrant package”也可以为任何Virtualbox的虚拟机创建box,而不一定非得是vagrant启动的虚拟机,只要“--base”参数指向Virtualbox的某个虚拟机名字即可。
标签:
原文地址:http://www.cnblogs.com/davenkin/p/create-own-vagrant-box.html