docker系列之(八)网络模式

Docker的网络模型

veth pair:成对出现的一种虚拟网络设备,数据从一端进,从另一
端出。 用于解决网络命名空间之间隔离。
docker0:网桥是一个二层网络设备,通过网桥可以将Linux支持
的不同的端口连接起来,并实现类似交换机那样的多对多的通信。

docker、技术与框架、新兴技术能力docker系列之(八)网络模式插图

Docker容器网络访问原理

docker外部访问容器原理
外部访问容器原理(DNAT:iptable)
docker容器访问外部
容器访问外部

docker的网络模式分为四种

  • bridge
  • host
  • none
  • container

bridge讲解

–net=bridge
默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。
也可以自定义网络,相比默认的具备内部DNS发现,可以通过容器名容器之间网络通信。

docker、技术与框架、新兴技术能力docker系列之(八)网络模式插图3

我们通过shell>docker network ls

shell>docker network inspect #networkid

docker、技术与框架、新兴技术能力docker系列之(八)网络模式插图4

默认如果不指定network的话,容器之间不能用hostname访问,可以用IP访问。

例子如下

docker、技术与框架、新兴技术能力docker系列之(八)网络模式插图5

那如何让容器之间能相互访问呢?通过定义network

1、首先创建network
shell>docker network create #networkname
shell>docker run -it --network #networkname -name #contrain_name #images 
docker、技术与框架、新兴技术能力docker系列之(八)网络模式插图6

host详解

容器不会获得一个独立的network namespace,而是与宿主机共用一个。这就意味着容器不会有自己的网卡信息,而是使用宿主 机的。容器除了网络,其他都是隔离的

docker、技术与框架、新兴技术能力docker系列之(八)网络模式插图7

这样设置后,容器占用的端口即宿主机的端口,不需要端口映射

none

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

使用场景:ipm管理的时候,需要指定容器IP。不过使用比较少。

docker、技术与框架、新兴技术能力docker系列之(八)网络模式插图8

container

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

docker、技术与框架、新兴技术能力docker系列之(八)网络模式插图9