1. 程式人生 > 實用技巧 >跨 Docker 宿主機 macvlan 型別

跨 Docker 宿主機 macvlan 型別

跨 Docker 宿主機 macvlan 型別

前言

a. 本文主要為 Docker的視訊教程 筆記。
b. 環境為 三臺 CentOS 7.0 虛擬機器 (Vmware Workstation 15 Player)
c. 上一篇:Docker 網路型別

準備工作

macvlan 是指將一塊物理網絡卡虛擬出多個子網,是 Linux 核心提供的特性(雖然可以實現教程中的效果,但對 macvlan 還沒有深入的瞭解,以後會再來回顧這個概念)。

由於暫時無法接觸到實際的使用場景,因此在虛擬機器中建立兩個系統,使用虛擬網絡卡,以覆盤教程中的情況。

安裝 Vmware 的使用遇到了問題:啟用了Hyper-V無法安裝Vmware。在 VirtualBox 中也只能選擇 32 位的作業系統。解決方法是新建禁用 Hyper-V 的作業系統啟動項

(拷貝現有項並修改):

bcdedit /copy {current} /d "<CUSTOM_NAME>"
bcdedit /set {上一條語句生成的程式碼} hypervisorlaunchtype OFF

至於安裝docker,因操作已經手工操作過多次,直接使用官方的安裝指令碼安裝了(自動化的東西就是好啊)

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

bash -s 表示向指令碼中傳遞執行引數。

為了看起來更加整潔,使用命令 hostnamectl set-hostname <HOST_NAME> 重新設定主機名

,此處我將新建的兩個虛擬機器分別設定為 docker01 和 docker02 ,兩個虛擬的ip地址分別為 192.168.88.128 和 192.168.88.129。

實際操作

在 Docker 中建立 macvlan 型別的網路,在兩個虛擬機器中分別執行:

docker network create --driver macvlan --subnet 192.168.88.0/24 --gateway 192.168.88.1 -o parent=ens33 macvlan1

下載busybox的映象用於測試:

docker pull busybox

使用 macvlan1 作為網路型別、busybox 作為映象建立容器:

docker run -it --network macvlan1 --ip <IP_ADDRESS> busybox

此處我使用192.168.88.150和192.168.88.151分別作為兩個虛擬機器中映象的ip地址,並ping另一個地址,結果如圖

[root@docker01 ~]# docker run -it --network macvlan1 --ip 192.168.88.150 busybox
/ # ping 192.168.88.151
PING 192.168.88.151 (192.168.88.151): 56 data bytes
64 bytes from 192.168.88.151: seq=0 ttl=64 time=0.318 ms
64 bytes from 192.168.88.151: seq=1 ttl=64 time=0.689 ms
64 bytes from 192.168.88.151: seq=2 ttl=64 time=0.476 ms
64 bytes from 192.168.88.151: seq=3 ttl=64 time=0.469 ms
64 bytes from 192.168.88.151: seq=4 ttl=64 time=0.399 ms
64 bytes from 192.168.88.151: seq=5 ttl=64 time=0.339 ms
^C
--- 192.168.88.151 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 0.318/0.448/0.689 ms

[root@docker02 ~]# docker run -it --network macvlan1 --ip 192.168.88.151 busybox
/ # ping 192.168.88.150
PING 192.168.88.150 (192.168.88.150): 56 data bytes
64 bytes from 192.168.88.150: seq=0 ttl=64 time=0.638 ms
64 bytes from 192.168.88.150: seq=1 ttl=64 time=0.642 ms
64 bytes from 192.168.88.150: seq=2 ttl=64 time=0.637 ms
64 bytes from 192.168.88.150: seq=3 ttl=64 time=0.534 ms
64 bytes from 192.168.88.150: seq=4 ttl=64 time=0.381 ms
64 bytes from 192.168.88.150: seq=5 ttl=64 time=0.260 ms
^C
--- 192.168.88.150 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 0.260/0.515/0.642 ms

後記

這一次的實踐其實還是很迷惑的,最開始我嘗試使用兩個裝置:手上的膝上型電腦 和 樹莓派(還特意在樹莓派上安裝了Docker),都連接合租房的無線路由器。也是這樣的步驟進行,但是兩個容器並不能互相ping通。

在看之後教程的過程中,突然發現教程中使用的是 Vmware 的虛擬機器安裝 Docker,於是也轉向虛擬機器重新進行實踐。虛擬機器我是用的就是預設的 NAT 模式,也沒有進行所謂“混雜模式”相關的設定。所謂混雜模式,大概是接收所有的網路包,並不丟棄不是發給自己的部分。因此猜測,macvlan 型別就是通過監聽那些不屬於自己的網路的包 是因為之前筆記本和樹莓派的實踐中,無線路由器不會轉發與本機無關的其它包,因此兩個物理機雖然都建立了所謂的 macvlan 網路,依然無法互相通訊。

參考:

macvlan 相關介紹:
https://www.jianshu.com/p/2b8b6c738bf6

解決windows 10 開啟Hyper-V後無法執行 Vmware:
https://www.xiaoyuanjiu.com/11232.html

修改主機名:
https://www.cnblogs.com/yinfutao/p/10620035.html

虛擬機器最小化安裝CentOS:
https://zhuanlan.zhihu.com/p/133733418

使用指令碼安裝docker:
https://www.runoob.com/docker/centos-docker-install.html

bash -s 含義:
https://kodango.com/one-line-installer-using-shell