歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Windows 下 使用 Vagrant 來管理 Linux 虛機開發環境

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

日期:2017/2/28 13:45:12   编辑:Linux教程

前幾天看了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:\\vagarnt\\worker\\>vagrant init [boxname] # 當添加的box的別名不為 base 時,此處需要添加 boxname

3、啟動虛擬機

D:\\vagrant\\worker\\>vagrant up

看到如下信息,說明虛擬機啟動成功:

D:\vagrant\worker>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:\vagrant\worker>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:\\vagrant\\worker\\>vagrant halt

虛擬機掛起:D:\\vagrant\\worker\\>vagrant suspend

虛擬機恢復:D:\\vagrant\\worker\\>vagrant resume

刪除虛擬機:D:\\vagrant\\worker\\>vagrant destory

查看虛擬機運行狀態: D:\\vagrant\\worker\\>vagrant status

重啟虛擬機: D:\\vagrant\\worker\\>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:\vagrant\worker>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
    [email protected]'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

Copyright © Linux教程網 All Rights Reserved