一.docker網絡模式
1.docker有三種模式(bridge、host、none)
二.docker基本網絡配置
bridge:
docker安裝時會創建一個名爲 docker0 的Linux bridge,新建的容器會自動橋接到這個接口。
默認選擇的就是bridge
查看宿主機網橋
root@server2 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02421e6ebdb5 no veth128d595
沒有brctl命令,可在真機查看
在宿主機上查看docker容器網絡產生的進程
host:
host模式可以讓容器共享宿主機網絡棧,這樣的好處是外部主機與容器直接通信,但是容器的網絡缺少隔離性。
1.創建以網絡類型爲host的vm2
none:
none模式是指禁用網絡功能,只有lo接口
container:
1.使用container模式運行容器並且查看網絡
2.運行新的容器與container的網絡模式下的數據庫進行連接
三.高級網絡配置
自定義網絡模式,docker提供了三種自定義網絡驅動:bridge、overlay、macvlan
1.創建自定義網橋
查看詳細信息
2.以自定義網橋運行容器
3.以自定義網橋運行容器,並測試兩個容器能否ping通
docker之間的互連
指定網段和網關:–subnet 、–gateway
1.創建自定義網絡,指定網段及其網關
2.使用自定義網絡運行容器
使兩個不同網段的容器通信
外網訪問容器(通過端口影射)
外網訪問容器用到了docker-proxy和iptables DNAT
宿主機訪問本機容器使用的是iptables DNAT
外部主機訪問容器或容器之間的訪問是docker-proxy實現
使用macvlan解決docker跨主機網絡
1.爲server1、server2兩個虛擬機添加網卡,並打開混雜模式
[root@server1 ~]# ip addr show | grep eth
[root@server1 ~]# ip link set eth1 promisc on
[root@server1 ~]# ip addr show | grep eth1
[root@server2 ~]# ip addr show | grep eth
[root@server2 ~]# ip link set eth1 promisc on
[root@server2 ~]# ip addr show | grep eth1
注意:
1.因爲多個MAC地址的網絡數據包都是從同一塊網卡上傳輸,所以需要打開網卡的混雜模式
2.如果不開啓混雜模式,會導致macvlan網絡無法訪問外界,具體在不使用vlan時,表現爲無法ping通路由以及同一網絡內他其他主機
2.在兩個虛擬機創建以macvlan模式爲網絡的容器
server1:
[root@server1 ~]# docker network create -d macvlan --subnet 172.25.0.0/24 --gateway 172.25.0.1 -o parent=eth1 macvlan1
[root@server1 ~]# docker run -it --name vm1 --network=macvlan1 --ip=172.25.0.11 ubuntu
[root@server1 ~]# docker run -it --name vm2 --network=macvlan1 --ip=172.25.0.12 ubuntu
server2:
[root@server2 ~]# docker network create -d macvlan --subnet 172.25.0.0/24 --gateway 172.25.0.1 -o parent=eth1 macvlan1
[root@server2 ~]# docker run -it --name vm1 --network=macvlan1 --ip=172.25.0.10 ubuntu
此時發現server1內部兩個容器不能ping通,server1、2之間也不能ping通
原因:爲開啓eth1網卡
ip link set eth1 up