目录
前沿:
一、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是我自定义的一个网络,下节分析。
一、none容器网络
所谓none容器网络,顾名思义就是什么都没有的网络,我们可以运行一个none网络的容器,发现里面只有lo网络接口。
1.1、构建一个none网络容器
我本地已经下载来busybox的镜像,没有这个镜像的同学,可以执行命令:docker pull busybox下载镜像。
“docker run -it --name none_busybox --network=none docker.io/busybox” 这个命令则是构建一个none网络容器。
1.2、none应用场景
容器并不需要网络(例如只需要写磁盘卷的批处理任务)、或者只生成随机密码,不希望外面机器访问。
二、host容器网络
host网络:跟宿主机共用同一个网络。
2.1、构建host网络
我们通过命令docker run -it --name host_busybox --network=host docker.io/busybox 来构建一个host网络。
2.2 host网络应用场景
host网络的好处很直接,跟宿主机共用网络,通信效率比较高。
缺点也有,比如:要考虑端口冲突问题,在宿主机上占用的端口,容器内部就要考虑端口是否冲突。
三、bridge容器网络
none、host网络用得比较少,当我们创建容器的时候,默认用的就是bridge网络,bridge网络用得比较广泛。
3.1、创建bridge网络
docker 启动的时候默认创建了网卡docker0。
当我们创建一个容器的实时,就会虚拟出来一个网络接口,我们通过下图可以看出,新增了个 interfaces: vethe0910a3
这个vethe0910a3其实就是挂在docker0上的一个network interfaces
进入到容器内部,执行ifconfig。发现也有个网卡:
其实, 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。