建立本身的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的某個虛擬機名字便可。

相關文章
相關標籤/搜索