docker网络模式及网络访问原理

docker的5种网络模型:

bridge网络  -net=bridge 默认网络,docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中

host网络  -net=host 容器不会获得一个独立的network namespace ,而是与宿主机共用一个,这意味着容器不会有自己的网卡信息,而是使用宿主机的,容器除了网络,其他都是隔离的
#使用场景,不想被占用IP,直接端口映射


none网络   -net=none   获取独立的network namespace,但不为容器进行任何网络配置,需要我们手动配置 
#容器的IP 需要手动配置,


container网络 -net=container:Name/ID  与指定的容器使用同一个network namespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的

自定义网络  与默认的bridge原理一样,但自定义网络具备内部dns防线,可以通过容器名或者主机名容器之间网络通信。
#可以通过DNS解析

docker网络访问原理

docker网络模式及网络访问原理

docker网络模式及网络访问原理

 

如上图所示:

容器访问internet:
容器里的eth0,访问docker0 是通过veth(管道)与docker0相连,docker0通过snat 与宿主机的eth0相连,在到Internet

internet 访问容器
通过宿主机的eth0网卡,dnat路由到docker0,docker0根据veth(管道)分辨出要给哪个容器。