《docker network網絡》
一.docker容器網絡的介紹
測試鏡像:busybox
(1)----單機網絡,容器間的通訊
1>none 什么都沒有的網絡,
docker run -it --network=none busybox
高隔離性網絡,比如是生成隨機驗證碼,可以不通過網絡,進入容器進行查看。
2>host:和當前的網絡結構完全相同和物理機的網絡協議棧一樣,傳輸性高,靈活性差,可能產生端口沖突。
docker run -it --network=host busybox
3>brige:
brctl show/delbr
brige網絡就是通過就是通過一對veth pair連接,一對連接http的容器的eth0上,一端連接到docker0上,進行通訊。
(2)----跨主機的容器間通訊
macvlan
overlay
二.birdge網絡的詳解
bridge網絡:
1.bridge網絡需要的命令
(1)創建一個bridge網絡,名稱為my_net
docker network create --driver bridge my_net
(2)查看docker網絡,是否創建成功。
docker network ls
(3)查看自定義網絡的生成的網卡和序列編號
brctl show
ifconfig
注意:生成網卡和序列編號,和docker0一樣,橋接網絡的。
(4)查看docker的bridge網絡的詳細情況
docker network inspect my_net
2.bridge網絡的命令和實驗
1》手動指定bridge的網段和網關
docker network create --driver bridge --subnet 網段/24 --gateway 網關 my_net2
2》運行一個容器驗證通過my_net2網絡自動分發的IP是否與剛才創建的是在一個網段
docker run -itd --network my_net2 busybox
docker exec -it id /bin/sh
ip a
3》為容器手動分發IP地址,查看是否又效果
docker run -itd --network my_net2 --ip 172.22.16.8 busybox
docker exec -it id /bin/sh
ip a
4》驗證同一網段的兩個容器是否可以通訊,
5》運行一個httpd的容器
docker run -itd httpd
docker exec -it id /bin/sh
驗證:發現無法與不同網段的容器進行通訊,所以做以下操作:
*******開啟ipv4路由功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
*******清除防火牆規則
iptables -F
最后就可以通訊了
由於每次開關容器都需要清防火牆,所以做以下操作:
6》給httpd的容器創建一個網卡(eth1)連接busybox的bridge網卡my_net2,這樣就可以不同網卡通訊了,容器通訊,必須是同一塊網卡,隔離網絡需要增加一塊網卡才能通訊
docker network connect my_net2 httpdid
docker exec -it httpdid /bin/sh
最終實驗效果就是可以相互通訊。
配圖解析:docker的bridge網絡
http
eth1 15: veth571f547@if14 (eth1網卡15是http的,然后橋接到my_net2的14網卡上)
eht0 9: veth63772c8@if8 docker0
my_net2
172.23.16.2
eth0 13: veth0025cbc@if12 my_net2
172.23.16.8
eth0 11: veth9e8ad66@if10 my_net2
實驗步驟:
容器間的通訊
docker network create --driver bridge my_net
docker network create --driver bridge --subnet 172.23.16.0/24 --gateway 172.23.16.1 my_net2
docker network ls
docker run -itd --network my_net2 busybox
docker ps
docker exec -it a4eacdd83fd2 /bin/sh
docker run -itd --network my_net2 --ip 172.23.16.8 busybox
docker ps
docker exec -it 2cd6594750f2 /bin/sh
docker run -itd httpd
docker ps
docker exec -it aac95c715368 /bin/sh
docker ps
systemctl restart docker
docker ps
docker start aac95c715368 2cd6594750f2 a4eacdd83fd2
docker ps
docker exec -it aac95c715368 /bin/sh
iptables -F
docker exec -it aac95c715368 /bin/sh
docker network connect my_net2 aac95c715368
docker exec -it aac95c715368 /bin/sh