vagrant配置端口轉發
vagrant 提供了三種網絡配置方式:端口轉發(默認)、私有網絡、公有網絡,可以在配置文件 Vagrantfile 進行網絡配置,推薦使用私有網絡。
端口轉發(forwarded ports)
1 .定義
端口轉發指把宿主機的端口映射到虛擬機的某一個端口上,訪問宿主機端口時,請求實際是被轉發到虛擬機上指定端口的。
注:宿主機指運行虛擬機的物理機。
2 .優點
容易實現外網訪問虛擬機
3 .缺點
如果端口較少需要映射很容易,但是端口比較多時,就比較麻煩,例如:MySQL,redis,nginx等服務。
不支持在宿主機使用小于1024的端口來轉發,例如:不能使用SSL的443端口來進行https連接。
4 .配置
在配置文件Vagrantfile下做如下編輯
Vagrant.configure("2") do |config|
config.vm.network
"forwarded_port"(必須) //端口轉發標識
, guest(必須): //虛擬機端口
, host(必須): //宿主機端口,值必須大于1024
,guest_ip(可選): //虛擬機端口綁定虛擬機ip地址
,host_ip(可選): //虛擬機端口綁定宿主機ip
,protocol(可選)://指定通信協議,可以使用tcp/udp,默認tcp
,auto_correct(可選)://true/false,若配置為true,則每次開啟虛擬機的時候自動檢查是否存在端口沖突
end
注:若guest_ip和host_ip兩項配置為空,則局域網下的所有設備都可以訪問該虛擬機。
示例配置,如下:
Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest: 80, host: 8080,
auto_correct: true
end
訪問宿主計算機8080端口的請求都轉發到虛擬機的80端口上進行處理。
補充:
如果要再添加一個端口轉發
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 8181, host: 8181
添加完之后執行vagrant reload命令重新加載配置文件即可,so easy~
私有網絡(private networks)
1 .定義
私有網絡是指只有宿主機可以訪問虛擬機,如果多個虛擬機設定在同一個網段也可以互相訪問。
2 .優點
安全,只有自己可以訪問
3 .缺點
團隊成員不能訪問你的虛擬機
4 .配置
使用私有網絡的最簡單方法是允許通過DHCP分配IP。
Vagrant.configure("2") do |config|
config.vm.network "private_network", type: "dhcp"
end
這將自動從保留的地址空間分配IP地址。 可以通過使用 vagrant ssh 將 SSH 連接到計算機并使用適當的命令行工具查找 IP(例如ifconfig)來確定 IP 地址。
還可以為計算機指定靜態IP地址。 可以使用已知的靜態 IP 訪問 Vagrant 受管計算機。 配置如下:
config.vm.network
"private_network"http://必須 ,私有網絡標識
, ip: "192.168.33.10"
注:私有ip可以自行指定
如果您想自己手動配置網絡接口,可以通過指定auto_config來禁用Vagrant的自動配置功能:
Vagrant.configure("2") do |config|
config.vm.network "private_network", ip: "192.168.50.4",
auto_config: false
end
公有網絡(public networks)
1 .定義
公有網絡是指設置虛擬機和宿主機有相同的網絡配置。
2 .優點
方便團隊協作,別人可以訪問你的虛擬機
3 .缺點
只有在有網絡的情況下才能訪問虛擬機
4 .配置
Vagrant.configure("2") do |config|
config.vm.network
"public_network" //必須 公有網絡標識
,ip(string): //可選,配置靜態ip
,bridge(string/array): "en1: Wi-Fi (AirPort)"http://可選,設置橋接的網卡
end
四、分布式環境
我們可以在 Vagrantfile 里使用 config.vm.define 方法定義多個主機:
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: "echo Hello"
config.vm.define "web" do |web|
web.vm.box = "apache"
end
config.vm.define "db" do |db|
db.vm.box = "mysql"
end
end
如上,config.vm.define 采用定義一個變量的塊。 此變量(如上面的web)與config 變量完全相同,只是內部變量的任何配置僅適用于正在定義的計算機。 因此,web 上的任何配置都只會影響 web 計算機。也可以繼續使用 config 對象。 config 對象在特定于機器的配置之前加載和合并。使用這些范圍時,配置程序等事務的執行順序變得很重要。 Vagrant 按照 Vagrantfile 中列出的順序強制執行從外到內的排序。 例如,使用下面的 Vagrantfile,輸出順序為 "A", "C", "B"
Vagrant.configure("2") do |config|
config.vm.provision :shell, inline: 'echo A'
config.vm.define :testing do |test|
test.vm.provision :shell, inline: 'echo B'
end
config.vm.provision :shell, inline: 'echo C'
end
當在 Vagrantfile 中定義了多臺計算機時,各種 vagrant 命令的使用會略有變化。
僅針對單個機器有意義的命令(例如 vagrant ssh)現在需要控制機器的名稱。例如上面的例子,需要使用 vagrant ssh web 或 vagrant ssh db。
默認情況下,其他命令(例如 vagrant up)在每臺機器上運行。因此,如果vagrant up ,Vagrant 會啟動 web 和 db 機器。也可以選擇具體啟動 vagrant up web 或 vagrant up db。此外,也可以指定正則表達式以僅匹配某些計算機。
另外,可以使用自動啟動設置允許告知 Vagrant 不啟動特定計算機。 例:
config.vm.define "web"
config.vm.define "db"
config.vm.define "db_follower", autostart: false
當使用上述設置運行 vagrant 時,Vagrant 將自動啟動 "web" 和 "db" 機器,但不會啟動 "db_follower" 機器。 可以通過運行 vagrant up db_follower 來手動強制 "db_follower" 計算機啟動。
可以指定主計算機。 主計算機將是未指定分布式環境中的特定計算機時使用的默認計算機。要指定默認計算機,只需在定義時將其標記為主計算機。 只能指定一臺主機。
config.vm.define "web", primary: true do |web|
# ...
end
Push
從版本1.7開始,Vagrant 能夠將與 Vagrantfile 相同的目錄中的應用程序代碼部署或“推送”到遠程數據庫(如FTP服務器或HashiCorp的Atlas)。
推送的定義在應用程序的 Vagrantfile 中定義,并使用 vagrant push 子命令調用。 與 Vagrant 的其他組件非常相似,每個 Vagrant Push 插件都有自己的配置選項。 有關更多信息,請參閱Vagrant Push插件的文檔。 以下是Vagrantfile中的Vagrant Push配置部分示例:
config.push.define "ftp" do |push|
push.host = "ftp.company.com"
push.username = "..."
# ...
end
當應用程序準備好部署到FTP服務器時,只需運行一個命令:
vagrant push
與 Vagrant Providers 非常相似,Vagrant Push也支持多個后端聲明。 考慮staging 和 QA 環境的常見情況:
config.push.define "staging", strategy: "ftp" do |push|
# ...
end
config.push.define "qa", strategy: "ftp" do |push|
# ...
end
在這種情況下,用戶必須將 Vagrant Push 的名稱傳遞給子命令:
vagrant push staging
參考:
https://www.vagrantup.com/docs/
https://jimmysong.io/posts/vagrant-intro/
https://www.jianshu.com/p/050b0a4468c4
網絡 虛擬化
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。