docker网络

Docker的网络类型

Docker 安装成功后会安装三种网络,可以通过命令docker network ls查看

1
2
3
4
NETWORK ID NAME DRIVER SCOPE
7135d9d919c3 bridge bridge local
86e79a49b27f host host local
0015c3361f3d none null local

在创建容器的时候,可以通过--net进行指定。

1
2
➜ ~ docker run -d --net=host docker.gz.cvte.cn/hello-world-jar/hello-docker:master-91d61c7
ab14e449f4241372ce034ca2fede8d6cd9dd7cf55ad0713db02f649df02ef341

docker network inspect <net>查看网络详情。

当启动一个容器的时候,就会想对应的网络的containers中添加subnet和gateway, 在全局注册相关的网络信息。

docker0

另外,Docker安装成功之后,会为bridge网络创建一个默认的docker0的虚拟网络设备,所有的docker容器都是通过桥接模式挂载到docker0上实现宿主机上容器和容器之间的通信。
使用brctl show可以看到虚拟机的网络关系:

其中veth开头的是docker container的虚拟网卡,docker每新建一个container, docker0就会创建一个新的虚拟网卡,名称以veth开头,其余是随机的.

在container上实际看到的是eth0这些.

container上的eth0 和 宿主机上的veth2368ab8 类似一个 PIPE.
挂载到docker0上docker container就这样实现网络互通。

Docker使用route和iptables(要注意 MASQUERADE),为容器创建NAT,这样就可以连接到外网。