首頁 > 軟體

建立自己的Vagrant box

2020-06-16 16:53:11

這是一個關於Vagrant的學習系列,包含如下文章:

1.Vagrant基本使用入門 https://www.linuxidc.com/Linux/2018-04/151772.htm
2.建立自己的Vagrant box https://www.linuxidc.com/Linux/2018-04/151773.htm
3.用Vagrant搭建Jenkins構建環境 https://www.linuxidc.com/Linux/2018-04/151774.htm
4.用Vagrant和Ansible搭建持續交付平台 https://www.linuxidc.com/Linux/2018-04/151775.htm

在上一篇中,我們講到了Vagrant的基本使用,在本文中我們將嘗試建立自己的Vagrant box。

Vagrant box只是提供了一個虛擬機器的基線,比如對於Harshicorp官網提供的unbuntu/trusty64這個box,相當於只是一個Ubuntu的ISO安裝檔案。一般來講,在安裝了作業系統之後,你都需要安裝一些額外的軟體以供專案所用,比如,要部署一個網站,你可能需要安裝Tomcat以及MySQL等等。此時,我們可以通過在Vagrantfile中設定Provision來幫助我們自動完成這些軟體安裝任務。但是當需要安裝的軟體越來越多以及需要啟動的虛擬機器數量越來越多,執行Provison也會變得越來越慢,此時我們便可以將一些公共的軟體預先打包到box中,即建立自己的box。然後將這樣的box在團隊或者公司範圍內發布以供後用。當然,除了加快虛擬機器啟動過程,建立自己的box還使得我們預先對所有虛擬機器進行相同的基本設定,比如安裝公司的安全證書,比如建立屬於自己的作業系統使用者(預設使用者名稱為vagrant)以及設定相應的公鑰等。

對於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


    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構建環境

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-04/151773.htm


IT145.com E-mail:sddin#qq.com