网络模式
- None
- 把容器放入独立网络空间不做任何网络配置
- 可以用docker network命令来完成网络配置
- Host
- 复用宿主机的网络空间
- Container
- 复用其他容器的网络
- Bridge
创建容器(未创建网络)
root@aliyun:~# docker run —network=none -d nginx Unable to find image ‘nginx:latest’ locally latest: Pulling from library/nginx Digest: sha256:859ab6768a6f26a79bc42b231664111317d095a4f04e4b6fe79ce37b3d199097 Status: Downloaded newer image for nginx:latest b2069a801ebc277e3b0cefdea9c5196d3fd0df7cad3f1fafbf70abea7f63305a
查找进程PID
root@aliyun:~# docker inspect b2069a801eb | grep -wi pid “Pid”: 893295,
查看容器网络
root@aliyun:~# nsenter -t 893295 -n ip a
1: lo:
root@aliyun:~# export PID=893295
?
root@aliyun:~# mkdir /var/run/netns
?
root@aliyun:~# ln -sv /proc/$PID/ns/net /var/run/netns/$PID ‘/var/run/netns/893295’ -> ‘/proc/893295/ns/net’
宿主机创建
ip link show
110: B@A:
创建虚拟网络
root@aliyun:~# ip link add AAA type veth peer name BBB
将虚拟网络连接到docker0
root@aliyun:~# brctl addif docker0 AAA root@aliyun:~# ip link set AAA up
查看网桥连接
root@aliyun:~# brctl show bridge name bridge id STP enabled interfaces docker0 8000.0242879b1a30 no AAA
先检测地址有没有被占用
root@aliyun:~# IP=172.17.0.110 root@aliyun:~# MASK=16
docker0的地址
root@aliyun:~# GATEWAY=172.17.0.1
将BBB端放入容器的网络空间中
root@aliyun:~# ip link set BBB netns $PID
root@aliyun:~# ip netns exec $PID ip link set dev BBB name eth2 root@aliyun:~# ip netns exec $PID ip link set eth2 up root@aliyun:~# ip netns exec $PID ip addr add $IP/$MASK dev eth2 root@aliyun:~# ip netns exec $PID ip route add default via $GATEWAY
查看网络配置
ip netns exec $PID ip a ip netns exec $PID ip r
请求测试,返回nginx默认页面即正常
curl 172.17.0.110
<a name="cyDrv"></a>
## bridge 默认模式
在主机启动容器会默认配置bridge模式网络
```bash
docker run -d -p 8080:80 nginx
docker以标准模式配置网络
- 创建veth pair
- 将veth pair一端连接到docker0网桥
- 将eth0 pair另一端设置为命名空间的eth0
- 为eth0分配ip
- 宿主机创建iptables规则 POSTROUTING -A DOCKER ! -i docker0 -p tcp -m tcp —dport 2233 -j DNAT —to-destnation 172.17.0.110:22
同台主机上的默认方式启动的容器都连接到docker0网桥上,所以同台主机上的docker是互通的
跨主机通信
underlay
- 采用linux网桥设备,通过物理网络连接容器
- 创建新的网桥设备mydr0
- 将主机网卡加入网桥mydr0
- 将主机网卡地址配置到网桥,并把默认路由规则转移到网桥
- 创建veth,把一端添加到网桥mydr0,另一端连接到容器网卡
优缺点
- 方案简单
- 需要规划网络IP,否则会浪费IP
Overlay
libnetwork是内置的基于vxlan的网络驱动
通过VTEP设备封包解包完成跨主机网络通信,看起来就像是直接通信
Overlay网络插件—flannel
- 同一主机的POD可以使用网桥进行通信
- 不同主机流量通过flanneld封装在DUP数据包中进行通信