首頁 > 軟體

Windows 下 使用 Vagrant 來管理 Linux 虛機開發環境

2020-06-16 17:24:27

前幾天看了Vagrant的介紹,今天正好有空,打算安裝下試試。由於自己用的是Windows的開發環境,所以就在window下試著搭建了下。遇到一些問題,記錄下。

關於Vagrant,及為什麼用Vagrant。大家可以去看這篇文章《為什麼要使用Vagrant》,個人感覺說的比較詳細。

接下來,說下我的整個安裝過程。

一、準備工作

Vagrant 除了virtualbox,還支援HyperV、VMWare等虛擬軟體。virtualbox與vagrant是最常用的搭配,也是文件最多的,所以我也選了這對組合。

box 的映象除了使用下載好的本地檔案還可以使用線上的box映象,新增映象時,還是會下載。

二、安裝及應用

2.1 安裝virtualbox和vagrant

同其他windows軟體一樣,“下一步”即可。

2.2 應用

1、給vagrant 新增映象。

D:vagrant>vagrant box add base CentOS-6.6-x86_64.box

說明:

  • vagrant box vagrant命令
  • base 新增box的名稱
  • centos-6.6-x86_64.box- 本地box的檔名
  • 使用vagrant box list 檢視新增的box映象列表。

也可以新增線上box,和新增本地box一樣。通過命令vagrant box add Ubuntu/trusty64。ubuntu/trusty64為線上映象名稱。

線上映象地址 vagrantCloud。(國內的網路存取可能不太通,建議下載後新增 )

這是我使用centos的映象 centos-6.6-x86_64.box

連結: http://pan.baidu.com/s/1i5si9yl 密碼: 7ug7

2、初始化虛擬機器。

D:vagrant>mkdir worker # 建立工作環境
D:vagrant>cd worker 
D:vagarntworker>vagrant init [boxname] # 當新增的box的別名不為 base 時,此處需要新增 boxname

3、啟動虛擬機器

D:vagrantworker>vagrant up

看到如下資訊,說明虛擬機器啟動成功:

D:vagrantworker>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'base'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: worker_default_1448939529781_46842
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.3.28
    default: VirtualBox Version: 5.0
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => D:/vagrant/worker

注意:
此處會有個錯誤,卡在此處:

Bringing machine 'default' up with 'hyperv' provider...
==> default: Verifying Hyper-V is enabled...

經查詢,網上許多網友說是vagrant的啟動虛擬機器時,使用了windows 系統自帶的 hyperv 虛擬機器導致。但他們的問題大部分是發生在windows 8上,而我的系統為window7 。

最後,看到有網友說需要設定虛擬機器 virtualbox 的環境變數(將virtualbox的安裝目錄新增到環境變數path中),試了下果然解決我的問題。

20151217更新:

網路的設定,網路的設定在worker資料夾下的Vagrantfile 檔案中。vagrant建立的虛擬機器有3中設定網路模式:

  • 較為常用是埠對映,就是將虛擬機器中的埠對映到宿主機對應的埠直接使用 ,在Vagrantfile中設定:

    config.vm.network “forwarded_port”, guest: 80, host: 8080

將設定直接去掉註釋“#”即可。guest: 80 表示虛擬機器中的80埠, host: 8080 表示對映到宿主機的8080埠。

  • 如果需要自己自由的存取虛擬機器,但是別人不需要存取虛擬機器,可以使用private_network,並為虛擬機器設定IP ,在Vagrantfile中設定:

    config.vm.network “private_network”, ip: “192.168.56.2”

192.168.56.2 表示虛擬機器的IP,多台虛擬機器的話需要互相存取的話,設定在相同網段即可。該ip預設幫到eth1上。

  • 如果需要將虛擬機器作為當前區域網中的一台計算機,由區域網進行DHCP,那麼在Vagrantfile中設定:

    config.vm.network :public_network

此時虛擬機器就如同宿主機一樣連結到網路中,享有和宿主機一樣的網路許可權。此時,若ip為自由分配,可使用127.0.0.1地址,

埠使用啟動時在命令視窗提示的埠,登陸機器檢視分配的ip,即可使用分配的ip登陸。若ip為固定的,可在設定中寫好。如下:

config.vm.network :"public_network"ip: "192.168.56.2"
#還可設定網橋,以無線為例 -- 此設定需驗證,一般只需設定最簡即可。
config.vm.network "public_network", :bridge => 'en1: Wi-Fi (AirPort)'

4、連結使用

由於windows不支援 ssh 命令,所以我們需要使用其他的ssh的用戶端來連結。就拿我使用的xshell來做說。

在cmd視窗中錄入:vagrant ssh。會看到你的主機地址、埠、以及key的存放位置。

D:vagrantworker>vagrant ssh
`ssh` executable not found in any directories in the %PATH% variable. Is an
SSH client installed? Try installing Cygwin, MinGW or Git, all of which
contain an SSH client. Or use your favorite SSH client with the following
authentication information shown below:

Host: 127.0.0.1
Port: 2222
Username: vagrant
Private key: D:/vagrant/worker/.vagrant/machines/default/virtualbox/private_key

在xshell中新增ssh的key。可以參考 這裡

由於我們的key已經生成,所以我們只需匯入即可。

工具–>使用者秘鑰管理–>匯入,即可。

建立好回話後,在點選登入的時候選擇 public key ,會看到我們匯入的 private_key。

此處密碼不用填寫,直接點選登入即可進入系統命令列了。

到這裡,便和操作普通的linux的系統一樣了。

若想使用root使用者登入,見下文 3.3 節。

5、打包分發

當你設定好開發環境後,退出並關閉虛擬機器。在終端裡對開發環境進行打包:

vagrant package

打包完成後會在當前目錄生成一個 package.box 的檔案,將這個檔案傳給其他使用者,其他使用者只要新增這個 box

並用其初始化自己的開發目錄就能得到一個一模一樣的開發環境了。

三、其他

3.1 常用命令

虛擬機器關機:D:vagrantworker>vagrant halt

虛擬機器掛起:D:vagrantworker>vagrant suspend

虛擬機器恢復:D:vagrantworker>vagrant resume

刪除虛擬機器:D:vagrantworker>vagrant destory

檢視虛擬機器執行狀態: D:vagrantworker>vagrant status

重新啟動虛擬機器: D:vagrantworker>vagrant reload

3.2 Vagrant和VirtualBox設定修改

Vagrant和VirtualBox安裝完成後,預設存放虛擬機器映象檔案的位置在系統磁碟。這對於大多數系統磁碟容量有限的人來說,

很快就會收到“磁碟容量不足”的告警。通過必要的設定將映象資料移出系統磁碟。

3.2.1 更改VirtualBox的映象檔案存放位置

具體步驟如下:

1、開啟VirtualBox,從選單項選擇 全域性設定 (快捷鍵是 Ctrl-G )

2、選擇 常規 裡的 預設虛擬電腦位置(M)

3、設定為非系統磁碟的位置。

4、將原位置中的虛擬機器映象移動到新的位置。

如果在設定前已經安裝了虛擬機器,那麼在Windows 資源管理器中,選擇對應目錄中的 Vbox 檔案,即可將新目錄中的虛擬機器映象新增到VirtualBox中。

3.2.2 更改Vagrant的映象儲存位置

Vagrant對於虛擬機器的管理分成兩個部分:Box和Machine。Box是指初始的未部署的虛擬機器映象檔案。這個檔案相當於是虛擬機器的一個模板,

可以進行無限制次數的複製。Machine,是指處於可執行狀態下的虛擬機器。當在Vagrant中新增box是,預設Vagrant會將這些虛擬機器模板映象檔案存

放在c:User.Vagrant.d裡。

因此,當使用Vagrant管理的虛擬機器模板映象較多時,這個目錄也是比較大的。可以轉移到其他磁碟分割區上。方法是:

1、將 c:User.vagrant.d 目錄移動到新的位置

2、設定 VAGRANT_HOME 環境變數指向新的位置即可。

3.3 使用root使用者登入虛擬機器

在linux系統下沒有root許可權是很不舒服的,所以查了下root使用者登入的設定,在vagrantfile 中增加設定:

config.ssh.username = 'root'
config.ssh.password = 'vagrant'
config.ssh.insert_key = 'true'

啟動後看到紀錄檔 :

D:vagrantworker>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: root
    default: SSH auth method: password
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.3.28
    default: VirtualBox Version: 5.0
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => D:/vagrant/dev
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

3.4 一個vagrantfile 檔案管理多台虛機

1、先使用 box 初始化: vagrant init

2、修改組態檔如下:

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"
  
  config.vm.define "master" do |saltmaster|
    saltmaster.vm.box = "base"
    saltmaster.vm.host_name = 'saltmaster.local'
    saltmaster.vm.network "private_network", ip: "192.168.33.13"
    saltmaster.ssh.username = 'root'
    saltmaster.ssh.password = 'vagrant'
    saltmaster.ssh.insert_key = 'true'
  end

  config.vm.define "minion" do |saltminion|
    saltminion.vm.box = "base"
    saltminion.vm.host_name = 'saltminion.local'
    saltminion.vm.network "private_network", ip: "192.168.33.14"
    saltminion.ssh.username = 'root'
    saltminion.ssh.password = 'vagrant'
    saltminion.ssh.insert_key = 'true'
  end
end

3、正常啟動即可 : vagrant up

4、登入

  • 使用 vagrant ssh + 名稱 登入

    pylixm@pylixm-pc /d/vagrant/dev331314 $ vagrant ssh master
    root@127.0.0.1's password:
    Welcome to your Vagrant-built virtual machine.
    [root@saltmaster ~]#
  • 使用 ip 直接登入

將已有 virtualbox 虛機新增到 vagrant管理

直接新增是不行的,這裡提供了一中變向的方式:先將virtualbox 的虛機轉成 box 映象 ,再將映象新增到 vagrant 管理;

詳細 –> 這裡

1、打包已有虛機(虛機必須用virtualbox開啟過,為了讓virtualbox可以找到該虛機)

vagrant package --base mybox --output /path/to/mybox.box

2、新增 box 映象

vagrant box add mybox /path/to/mybox.box

如何使用vagrant在虛擬機器安裝Hadoop叢集 http://www.linuxidc.com/Linux/2013-04/82750.htm

Vagrant 中高效的 Puppet 模組管理 http://www.linuxidc.com/Linux/2014-05/101873.htm

利用Vagrant搭建多平台環境  http://www.linuxidc.com/Linux/2015-09/123518.htm

使用 Vagrant 和 Fabric 用於整合測試 http://www.linuxidc.com/Linux/2014-07/104113.htm

使用 Vagrant 搭建開發環境 http://www.linuxidc.com/Linux/2014-07/104116.htm

Windows 下設定 Vagrant 環境 http://www.linuxidc.com/Linux/2014-07/104115.htm

使用 Vagrant 搭建開發環境 http://www.linuxidc.com/Linux/2014-07/104116.htm

通過 Vagrant 搭建虛擬機器環境 http://www.linuxidc.com/Linux/2015-08/121985.htm

使用Vagrant和Virtualbox建立虛擬機器  http://www.linuxidc.com/Linux/2016-08/134435.htm

Ubuntu下使用Vagrant搭建虛擬開發環境 http://www.linuxidc.com/Linux/2016-12/138113.htm

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-12/139016.htm


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