目录

前沿:

一、none容器网络

1.1、构建一个none网络容器

1.2、none应用场景

二、host容器网络

2.1、构建host网络

2.2 host网络应用场景

三、bridge容器网络

3.1、创建bridge网络

3.2、谈谈bridge容器ip分配



前沿:

    docker容器网络,默认有三种: none、host、bridge。本节将对三种网络进行介绍,遵循3w法则(what 、why、how)来进行介绍。

通过“docker network ls”命令可以看到默认的三种网络。ps: my_net是我自定义的一个网络,下节分析。

docker 网络空间挂出 docker网络详解_网络接口

一、none容器网络

所谓none容器网络,顾名思义就是什么都没有的网络,我们可以运行一个none网络的容器,发现里面只有lo网络接口。

1.1、构建一个none网络容器

我本地已经下载来busybox的镜像,没有这个镜像的同学,可以执行命令:docker pull busybox下载镜像。

“docker run -it --name none_busybox --network=none docker.io/busybox”   这个命令则是构建一个none网络容器。

docker 网络空间挂出 docker网络详解_网络接口_02

1.2、none应用场景

容器并不需要网络(例如只需要写磁盘卷的批处理任务)、或者只生成随机密码,不希望外面机器访问。

二、host容器网络

host网络:跟宿主机共用同一个网络。

2.1、构建host网络

我们通过命令docker run -it --name host_busybox --network=host docker.io/busybox 来构建一个host网络。

docker 网络空间挂出 docker网络详解_docker_03

2.2 host网络应用场景

host网络的好处很直接,跟宿主机共用网络,通信效率比较高。

缺点也有,比如:要考虑端口冲突问题,在宿主机上占用的端口,容器内部就要考虑端口是否冲突。

 

三、bridge容器网络

none、host网络用得比较少,当我们创建容器的时候,默认用的就是bridge网络,bridge网络用得比较广泛。

3.1、创建bridge网络

docker 启动的时候默认创建了网卡docker0。

docker 网络空间挂出 docker网络详解_docker_04

当我们创建一个容器的实时,就会虚拟出来一个网络接口,我们通过下图可以看出,新增了个 interfaces:  vethe0910a3

这个vethe0910a3其实就是挂在docker0上的一个network interfaces

docker 网络空间挂出 docker网络详解_网络接口_05

进入到容器内部,执行ifconfig。发现也有个网卡:

docker 网络空间挂出 docker网络详解_网络接口_06

其实, eth0和vethe0910a3 是一对veth pair,那么这就好理解了,其实容器内部的网卡eth0也是挂在docker0上的。

当容器内部一个请求要出去的时候,路径:eth0->vethe0910a3->docker0->docker host。

3.2、谈谈bridge容器ip分配

我们发现容器内部分配的IP是172.17.0.2,为什么是这个ip呢?其实,这是由docker network 来设置的。

我们在宿主机上执行:docker network inspect  查看容器bridge网络信息,发现bridge_network的ipv4地址就是172.17.0.2/16。

docker 网络空间挂出 docker网络详解_docker_07