Docker 网络模式
学习docker需要了解它的网络模式,才能够更好的理解它的通信,分为以下四种:
1.bridge
2.host
3.none
4.container自建网络
docker network ls
NETWORK ID NAME DRIVER SCOPE
977b6e78e6b4 bridge bridge local
570c3afdc47e host host local
28739b66a1db none null local
1.bridge网络
简介:
Docker 容器默认使用 bridge 模式的网络
docker网络隔离基于网络命名空间(network namespaces),在物理机上创建docker容器时会为每一个docker容器分配网络命名空间,并且把容器IP桥接到物理机的虚拟网桥上
bridge网络拓扑图
拓展:运行容器Host宿主机,需要开启转发
echo 1 > /proc/sys/net/ipv4/ip_forward
或者
vim /etc/sysctl.conf
…
net.ipv4.ip_forward = 1
…
刷新 sysctl -p
实验
第一步:查看
ip a
…
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:21:ec:47:33 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:21ff:feec:4733/64 scope link
valid_lft forever preferred_lft forever
#发现宿主机host上默认被创建了一个名为 docker0 的网桥,其 IP 为 172.17.0.1/16
ip route
…
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
…
#这条路由信息表示所有目的 IP 为 172.17.0.0/16 的数据包都会从 docker0 网卡发出
第二步:创建一个容器并查看
docker run -it busybox sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
39: eth0@if40: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ #
/ #
/ # ip route
default via 172.17.0.1 dev eth0 ##容器的默认网关正是宿主机的 docker0 网卡
172.17.0.0/16 dev eth0 scope link sr