Vagrant (三) - 網(wǎng)絡(luò)配置

這個(gè)章節(jié)脫胎于我早期的blog文章勒葱,訂正了一下句法和準(zhǔn)確性私恬。

原始的文字在 VAGRANT 網(wǎng)絡(luò)配置
接續(xù)上兩章:

  1. 一堪澎、基本知識(shí)
  2. 二、日常操作

網(wǎng)絡(luò)配置

Vagrant可以指定三種網(wǎng)絡(luò):端口轉(zhuǎn)發(fā)(Forwarded Ports)缕陕,私有網(wǎng)絡(luò)(Private Network),公有網(wǎng)絡(luò)(Public Network)疙挺。他們和多數(shù)虛擬機(jī)提供的網(wǎng)絡(luò)是對(duì)應(yīng)的扛邑。

Vagrant 網(wǎng)絡(luò)模型

端口轉(zhuǎn)發(fā):

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

將虛擬機(jī)(被稱作guest)的端口80映射為宿主機(jī)的端口8080。

端口轉(zhuǎn)發(fā)隱含著一個(gè)provider的NAT網(wǎng)絡(luò)將被首先創(chuàng)建铐然。
所以蔬崩,如果你單獨(dú)定義一條端口轉(zhuǎn)發(fā)的配置語句的話,VM將會(huì)自動(dòng)建立NAT網(wǎng)絡(luò)環(huán)境搀暑。

私有網(wǎng)絡(luò):

    config.vm.network :private_network, ip: "192.168.1.104"

你可以從宿主機(jī)自由訪問虛擬機(jī)沥阳,但LAN網(wǎng)絡(luò)中的其他人不需要也無法訪問虛擬機(jī)。

值得注意的是自点,ip地址“192.168.1.104”不是隨便指定的桐罕。
首先你可以不指定,這表示虛機(jī)啟動(dòng)時(shí)會(huì)DHCP到一個(gè)可用的IP地址(例如:192.168.33.101)桂敛,這是vagrant通過virtualbox私有網(wǎng)絡(luò)的DHCP機(jī)制獲得的功炮。
如果你要自行指定明確的IP地址,要保證該地址是在恰當(dāng)?shù)木W(wǎng)段中术唬,例如192.168.33.71薪伏。

多臺(tái)虛擬機(jī)在私有網(wǎng)絡(luò)模式下也可以互相訪問,只要設(shè)置為相同的網(wǎng)段就可以粗仓。

本質(zhì)上說嫁怀,這是使用provider的HostOnly模式设捐。

公有網(wǎng)絡(luò):

公有網(wǎng)絡(luò)實(shí)際上是表示將虛擬機(jī)暴露為LAN(例如你的宿主機(jī)所在的辦公室網(wǎng)絡(luò))中的一臺(tái)主機(jī)。

例如使用LAN的DHCP自動(dòng)獲得IP地址:

    config.vm.network :public_network

也可以指定LAN網(wǎng)段中的一個(gè)可用的地址塘淑,但需要注意不要和LAN中已有的主機(jī)或者保留的IP地址相沖突萝招。

本質(zhì)上說,這是使用provider的橋接網(wǎng)絡(luò)模式朴爬。

Provider的網(wǎng)絡(luò)模式

對(duì)于vagrant的provider即寒,例如VirtualBox來說,網(wǎng)絡(luò)模式區(qū)分的更細(xì)召噩,但vagrant并不能使用全部vbox網(wǎng)絡(luò)模型母赵。

VirtualBox 的典型網(wǎng)絡(luò)模型:NAT,Hostonly具滴,Bridge以及Internal凹嘲。

這些模式的細(xì)節(jié)我們不再列舉。

借用一張表格來歸納:

NAT Bridged Internal Hostonly
vm -> host × ×
host -> vm × × ×
vm -> others hosts × ×
others hosts => vm × × ×
vm <-> vm × same subnet

這張表格描述了virtualbox的網(wǎng)絡(luò)模型构韵。

實(shí)用的網(wǎng)絡(luò)配置

一般來說周蹭,端口轉(zhuǎn)發(fā)足以滿足開發(fā)需要了。

但對(duì)于特殊的需要來說疲恢,你可能需要一臺(tái)完全“真實(shí)”的虛機(jī)凶朗,這臺(tái)虛機(jī)可以被穩(wěn)定地從宿主機(jī)訪問,并且可以訪問LAN中的其他資源显拳。這樣的需求實(shí)際上可以通過配置多塊網(wǎng)卡來解決問題棚愤,例如一塊配置為私有網(wǎng)絡(luò)模式,一塊配置為公有網(wǎng)絡(luò)模式杂数。

vagrant通過配置文件能夠支持virtualbox的NAT宛畦,Bridge以及Hostonly網(wǎng)絡(luò)模型。

默認(rèn)情況

默認(rèn)情況下揍移,我們已經(jīng)知道一個(gè)最簡的流程來啟動(dòng)vagrant:

    mkdir /dev
    cd /dev
    vagrant box add ubuntu/trusty64
    vagrant init ubuntu/trusty64
    vagrant up
    vagrant ssh
    vagrant halt

這樣的步驟次和,可以得到一臺(tái)ubuntu 14.04的虛擬機(jī),采用Provider的NAT網(wǎng)絡(luò)模式那伐,在虛擬機(jī)中可以訪問宿主機(jī)踏施,也可以使用宿主機(jī)的外網(wǎng)路由上網(wǎng)。

觀察它生成的默認(rèn)的Vagranfile罕邀,其網(wǎng)絡(luò)配置是未指定的读规。

此時(shí),vagrant建立的vm具有一個(gè)NAT網(wǎng)卡燃少。

橋接網(wǎng)絡(luò)

當(dāng)采用如下配置語句時(shí)束亏,vagrant建立的vm具有一個(gè)Bridged網(wǎng)絡(luò):

# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
config.vm.network "public_network"

此時(shí),vm在宿主機(jī)所在的LAN中等價(jià)于一臺(tái)物理機(jī)器阵具。假如你具有LAN Router的管理權(quán)的話碍遍,這是很簡單的一種開發(fā)模型:通過路由器的mac綁定為vm保留一個(gè)固定的dhcp地址定铜,這樣vm無論何時(shí)啟動(dòng)都會(huì)獲取到相同的IP地址,你的開發(fā)和調(diào)試將會(huì)很順利很簡單怕敬。

私有網(wǎng)絡(luò)

當(dāng)采用如下配置語句時(shí)揣炕,vagrant建立的vm具有兩個(gè)hostonly網(wǎng)絡(luò):

config.vm.network "private_network", ip: "192.168.9.10"
config.vm.network "private_network", ip: "192.168.33.10"

標(biāo)識(shí)符“private_network”總是被映射為virtualbox的hostonly模型。

私有網(wǎng)絡(luò)模型是允許宿主機(jī)訪問的东跪,為了便于宿主機(jī)訪問畸陡,我們也可以明確指定一個(gè)適當(dāng)網(wǎng)段的地址。要知道適當(dāng)?shù)木W(wǎng)段是多少虽填,可以這樣查證:

  • 通過進(jìn)入虛機(jī)顯示網(wǎng)卡信息和IP地址來了解網(wǎng)段丁恭。
  • 打開 VirtualBox 的網(wǎng)絡(luò)配置,檢查HostOnly網(wǎng)絡(luò)的DHCP網(wǎng)段斋日。

混合網(wǎng)絡(luò)

當(dāng)采用如下配置語句時(shí)牲览,vagrant建立的vm具有一個(gè)NAT和一個(gè)hostonly網(wǎng)絡(luò):

config.vm.network "private_network", ip: "192.168.33.10"

標(biāo)識(shí)符“private_network”總是被映射為virtualbox的hostonly模型。

注意 NAT 網(wǎng)絡(luò)將被隱含地創(chuàng)建恶守。
vagrant在創(chuàng)建網(wǎng)卡時(shí)第献,如果配置文件僅配置了一個(gè)private_network,則vagrant自動(dòng)創(chuàng)建NAT網(wǎng)卡兔港,然后在創(chuàng)建配置文件所描述的網(wǎng)絡(luò)庸毫;而如果配置文件指定了兩個(gè)以上的private_network的話,vagrant不再自動(dòng)創(chuàng)建 NAT 網(wǎng)卡了衫樊。

混合網(wǎng)絡(luò)非常適合開發(fā)和測試環(huán)境岔绸,你可以通過NAT和Internet相通,然后多個(gè)vm之間也能相互通信橡伞。

內(nèi)外網(wǎng)絡(luò)

內(nèi)外網(wǎng)絡(luò) 只是我隨便命名的,也就是從vm的角度出發(fā)既有內(nèi)網(wǎng)(VM的私有網(wǎng)絡(luò))晋被,又有外網(wǎng)(宿主機(jī)所在的局域網(wǎng))兑徘。

當(dāng)采用如下配置語句時(shí),vagrant建立的vm具有一個(gè)bridged和一個(gè)hostonly網(wǎng)絡(luò):

config.vm.network "public_network"
config.vm.network "private_network", ip: "192.168.33.10"

這是比較通用的配置模式羡洛,vm既有host主機(jī)所在局域網(wǎng)的ip挂脑,又有一個(gè)私有網(wǎng)絡(luò)的ip地址,因此這些vm之間具有全連通性欲侮。

不過崭闲,一般來說開發(fā)和測試使用較為封閉的網(wǎng)絡(luò)模型是比較好的方式,通常不建議vm配置有 public_network 的網(wǎng)卡威蕉。

小結(jié)

任何

config.vm.network "private_network", ip: "192.168.33.10"

語句都可以改為:

config.vm.network "private_network", type: "dhcp"

這時(shí)virtualbox的網(wǎng)關(guān)負(fù)責(zé)dhcp應(yīng)答和分配IP刁俭。

實(shí)例

nginx服務(wù)

  1. 建立一個(gè)新的工作目錄 sample-nginx
  2. 使用 vagrant init ubuntu/xenial64 進(jìn)行初始化
  3. 修改 Vagrantfile 加入必要的聲明 (見后)
  4. 使用 vagrant up 啟動(dòng)該虛擬機(jī),然后可以SSH進(jìn)入或者 curl -i http://localhost:8080/ 來嘗試訪問它

完整的 Vagrantfile 如下:

# -*- 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|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  config.vm.box = "ubuntu/xenial64"
  
  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # NOTE: This will enable public access to the opened port
  config.vm.network "forwarded_port", guest: 80, host: 8080

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network "private_network", ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  # end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

  # Enable provisioning with a shell script. Additional provisioners such as
  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  # documentation for more information about their specific syntax and use.
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y nginx
  SHELL
end

這是一個(gè)相當(dāng)簡單的實(shí)例韧涨。更復(fù)雜的初始化牍戚,可以考慮使用一個(gè)獨(dú)立的腳本文件來完成侮繁,而不是直接放在 Vagrantfile 中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末如孝,一起剝皮案震驚了整個(gè)濱河市宪哩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌第晰,老刑警劉巖锁孟,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異茁瘦,居然都是意外死亡品抽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門腹躁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桑包,“玉大人,你說我怎么就攤上這事纺非⊙屏耍” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵烧颖,是天一觀的道長弱左。 經(jīng)常有香客問我,道長炕淮,這世上最難降的妖魔是什么拆火? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮涂圆,結(jié)果婚禮上们镜,老公的妹妹穿的比我還像新娘。我一直安慰自己润歉,他們只是感情好模狭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著踩衩,像睡著了一般嚼鹉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驱富,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天锚赤,我揣著相機(jī)與錄音,去河邊找鬼褐鸥。 笑死线脚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酒贬,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼又憨,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了锭吨?” 一聲冷哼從身側(cè)響起蠢莺,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎零如,沒想到半個(gè)月后躏将,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡考蕾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年祸憋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肖卧。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚯窥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出塞帐,到底是詐尸還是另有隱情拦赠,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布葵姥,位于F島的核電站荷鼠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏榔幸。R本人自食惡果不足惜允乐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望削咆。 院中可真熱鬧牍疏,春花似錦、人聲如沸拨齐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奏黑。三九已至,卻和暖如春编矾,著一層夾襖步出監(jiān)牢的瞬間熟史,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工窄俏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹂匹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓凹蜈,卻偏偏與公主長得像限寞,于是被迫代替她去往敵國和親忍啸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 1. Vagrant 的介紹 虛擬開發(fā)環(huán)境 平常我們經(jīng)常會(huì)遇到這樣的問題:在開發(fā)機(jī)上面開發(fā)完畢程序履植,放到正式環(huán)境之...
    斐波那契額閱讀 1,821評(píng)論 1 12
  • 1计雌,介紹Vagrant 我們做web開發(fā)的時(shí)候經(jīng)常要安裝各種本地測試環(huán)境,比如apache,php,mysql,r...
    meng_philip123閱讀 2,512評(píng)論 0 12
  • 1.Vagrant Vagrant是一個(gè)虛擬機(jī)管理和配置工具玫霎,所以虛擬機(jī)系統(tǒng)還得靠專門的虛擬化軟件凿滤,Vagrant...
    中v中閱讀 8,659評(píng)論 0 2
  • [Vagrant入門一(轉(zhuǎn))]閱讀目錄VirtualBox安裝Vagrant安裝Vagrant配置links 原文...
    漢相蕭何閱讀 921評(píng)論 0 0
  • 今天閑來無聊,本地了一個(gè)json讀取庶近,沒想到翁脆,半天都是沒獲取到路徑 后來發(fā)現(xiàn)我把json放到了一個(gè)實(shí)例文件夾中,不...
    wlysky閱讀 5,017評(píng)論 0 1