一、基本網絡配置
1.查看doeker網絡的信息
bridge、host、null
安裝橋接服務:
[root@server1 ~]# yum install -y bridge-utils
此時會發現docker0的橋接信息
測試:
在擁有ubuntu鏡像的基礎上:
[root@server1 ~]# docker run -it --name vm1 ubuntu
不關閉退出,並且此時查看server1的物理機網絡信息
此時在server2上ping不同,因爲容器是隔離的
2.docker network 3種模式的設定
- host
連上vm1,不關閉退出
用host網絡模式創建vm2
[root@server1 ~]# docker run -it --name vm2 --net host ubuntu
此時在server2可以ping
在server1上獲取nginx鏡像:並且建立vm2
運行一個vm2:(不能-p影射端口,因爲此時和物理機server1共享網絡)
[root@server1 ~]# docker run -d --name vm2 --net host nginx
e66e8774cdf912a085f3acaa6c8bf0e89e0afb03ceb76916af3d1e26d729c6fc
此時nginx開啓,在server2上可以查看
- null
[root@server1 ~]# docker run -it --name vm3 --net none ubuntu
將vm3刪除,重新運行
[root@server1 ~]# docker run -it --name vm3 --net container:vm1 ubuntu
注意:此時網絡和vm1同
link 的作用:(自己生成解析文件)
如果不加link:不會自動生成解析
二、高級網絡配置
docker提供了3種自定義網絡驅動:
bdidge、overlay、macvlan
查看手冊:[root@server1 ~]# docker network create --help
創建自定義網絡驅動:默認是bridge
[root@server1 ~]# docker network create -d bridge mynet
33990305dd6bc45bd49687f56d25fc24b2523a166e5e1aa0763bf317c9dcb9be
將mynet刪除後,自定的網絡驅動就刪除了
[root@server1 ~]# docker network rm mynet
- bridge 舉例
創建網段下的網卡驅動
[root@server1 ~]# docker network create -d bridge --subnet 172.73.26.0/24 --gateway 172.73.26.1 mynet1
46dbdb19dda5b162f3862c97dac60d0fdf51268a0e5566ee12e18e12abd0ba2a
創建此網卡驅動下的vm1
[root@server1 ~]# docker run -it --name vm1 --net mynet1 --ip 172.73.26.10 ubuntu
此時serve2上
在server2上創建網卡(此處和server1相同,因爲不在同一主機)
在server2上創建vm1
注意:此時不同主機還是不能進行通信,但是同一主機的不同容器之間可以
在server1上:
建一個vm2:在mynet1上:
如何使不同網橋的容器進行通訓??
情況演示:單機不同網橋下此時不能通信
在server1上:建立mynet2
創建一個vm3:
[root@server1 ~]# docker run -it --name vm3 --net mynet2 --ip 172.74.26.11 ubuntu
此時vm1和vm2在一個橋接上,vm3在一個橋接上
注意:此時vm1和vm2可以互相通信,但vm1和vm3不可以通信
#####讓單機不同網橋下容器可以進行通信
將vm3添加到mynet1上:
[root@server1 ~]# docker network connect mynet1 vm3
網絡解決方案進階
macvlan方案的實現:
刪除網卡驅動
此時server1的網絡狀態
此時server2的網絡狀態
1.在兩臺docker上添加網卡,打開網卡混雜模式
在server1上:
[root@server1 ~]# ip link set up eth1
[root@server1 ~]# ip link set eth1 promisc on
在server2上:
[root@server2 ~]# ip link set up eth1
[root@server2 ~]# ip link set eth1 promisc on
2.在兩臺docker主機上創建macvlan網絡
在server1上:
[root@server1 ~]# docker network create -d macvlan --subnet 172.73.26.0/24 --gateway 172.73.26.1 -o parent=eth1 mac1
8ba8e487cdd230fed0845d4a0ac2f1c160853949cdee756c39018f3b0041a6af
在server2:
3.在server1和server2上創建vm1
[root@server1 ~]# docker run -it --name vm1 --net mac1 --ip 172.73.26.11 ubuntu
[root@server2 ~]# docker run -it --name vm1 --net mac1 --ip 172.73.26.12 ubuntu
此時可以在server1的vm1上ping通servr2的vm1(在server2上也同)
macvlan 子接口
在server1上設置子接口
[root@server1 ~]# docker network create -d macvlan --subnet 172.74.26.0/24 --gateway 172.74.26.1 -o parent=eth1.1 mac2
101412a2a567fae6ba316e35289207df1711874dcd9658c0db3a702b57226773
此時並沒有多出驅動
但是此時另外建立,ping不通