创建自己的Vagrant box

这是一个关于Vagrant的学习系列,包含如下文章:

在上一篇中,我们讲到了Vagrant的基本使用,在本文中我们将尝试创建自己的Vagrant box。

对于Vagrant box来说,我们需要向box注入以下功能:
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。

我们将使用Shell作为Provision方式,向新的box中添加以下功能:
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机是不能访问到虚拟机的):

$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

扫描二维码关注公众号,回复: 1953966 查看本文章


    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的某个虚拟机名字即可。

本文源代码:

Vagrantfile

$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: 8081
  config.vm.provider "virtualbox" do |v|
    v.name = "xenial-openjdk8-tomcat8"
  end
end

在下一篇中,我们将讲到用Vagrant搭建Jenkins构建环境

猜你喜欢

转载自www.linuxidc.com/Linux/2018-04/151773.htm
Box