2021-05-12 14:32:11
Windows 下 使用 Vagrant 來管理 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: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
相關文章