建立本身的Vagrant box

Vagrant box只是提供了一个虚拟机的基线,好比对于Harshicorp官网提供的unbuntu/trusty64这个box,至关于只是一个Ubuntu的ISO安装文件。通常来说,在安装了操做系统以后,你都须要安装一些额外的软件以供项目所用,好比,要部署一个网站,你可能须要安装Tomcat以及MySQL等等。此时,咱们能够经过在Vagrantfile中配置Provision来帮助咱们自动完成这些软件安装任务。可是当须要安装的软件愈来愈多以及须要启动的虚拟机数量愈来愈多,执行Provison也会变得愈来愈慢,此时咱们即可以将一些公共的软件预先打包到box中,即建立本身的box。而后将这样的box在团队或者公司范围内发布以供后用。固然,除了加快虚拟机启动过程,建立本身的box还使得咱们预先对全部虚拟机进行相同的基本配置,好比安装公司的安全证书,好比建立属于本身的操做系统用户(默认用户名为vagrant)以及配置相应的公钥等。html

 

对于Vagrant box来讲,咱们须要向box注入如下功能:shell

  1. Vagrant box中须要提供SSH功能,以便可以使用vagrant ssh命令登陆虚拟机
  2. 须要提供一个默认的用户以及相应的登陆方式(好比免密钥登陆和密码登陆),对于大多数Vagrant box来讲,默认都提供了用户名为vagrant的SSH密码登陆功能。
  3. 对于特定的Provider,还须要安装某些特定的软件,好比对于Virtualbox来讲,为了能使共享文件夹功能可以正常工做,box中还须要安装VirtualBox Guest Additions,另外第一块网卡必须为NAT类型,由于Vagrant须要使用NAT与虚拟机完成首次通讯。

 

固然,咱们并不须要彻底从头至尾建立一个box,而是能够在一些公共的box的基础之上经过添加额外的功能来建立本身的box,由于这些公共box已经包含了上述功能。本文便将经过使用ubuntu/xenial64做为基础来建立新的box。ubuntu

 

咱们将使用Shell做为Provision方式,向新的box中添加如下功能:tomcat

  1. 安装openjdk 1.8
  2. 安装Tomcat 

 

首先初始化Vagrantfile:安全

vagrant init -m ubuntu/xenial64

 

 

值得一提的是,ubuntu/xenial64默认使用的SSH登陆用户名为ubuntu,而不是先前的vagrant。网络

 

编辑Vagrantfile,经过Shell安装openjdk1.8和Tomcat 8,同时设置端口转发以便Host机器可以访问Tomcat主页(因为默认的网络是Virtualbox的NAT,故Host机是不能访问到虚拟机的):ssh

复制代码
$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"
    endide

end
复制代码

 

启动虚拟机:网站

vagrant up

 

此时在Host机上访问http://localhost:8080,你会看到“It Works!”,表示Tomcat安装及运行成功。spa

 

好了,前面讲的都只是如何建立虚拟机,有了这些准备咱们才可以基于新建的虚拟机建立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的某个虚拟机名字便可。

相关文章
相关标签/搜索