Docker的网络模型
veth pair:成对出现的一种虚拟网络设备,数据从一端进,从另一
端出。 用于解决网络命名空间之间隔离。
docker0:网桥是一个二层网络设备,通过网桥可以将Linux支持
的不同的端口连接起来,并实现类似交换机那样的多对多的通信。
Docker容器网络访问原理
docker的网络模式分为四种
- bridge
- host
- none
- container
bridge讲解
–net=bridge
默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。
也可以自定义网络,相比默认的具备内部DNS发现,可以通过容器名容器之间网络通信。
我们通过shell>docker network ls
shell>docker network inspect #networkid
默认如果不指定network的话,容器之间不能用hostname访问,可以用IP访问。
例子如下
那如何让容器之间能相互访问呢?通过定义network
1、首先创建network
shell>docker network create #networkname
shell>docker run -it --network #networkname -name #contrain_name #images
host详解
容器不会获得一个独立的network namespace,而是与宿主机共用一个。这就意味着容器不会有自己的网卡信息,而是使用宿主 机的。容器除了网络,其他都是隔离的
这样设置后,容器占用的端口即宿主机的端口,不需要端口映射
none
–net=none
获取独立的network namespace,但不为容器进行任何网络配置,需要我们手动配置。
使用场景:ipm管理的时候,需要指定容器IP。不过使用比较少。
container
–net=container:Name/ID
与指定的容器使用同一个network namespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的