docker的四种网络模式

Docker/容器
80
0
0
2024-02-28
标签   Docker

四类网络模式

网络模式

配置

说明

bridge模式

–net=bridge

(默认为该模式)

host模式

–net=host

容器和宿主机共享Network namespace。

container模式

–net=container:NAME_or_ID

容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace。

none模式

–net=none

容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。

bridge模式

内网IP

下面给大家列出来,只要ip地址不属于这几个网段范畴的,都是公网ip。

100.X.X.X

10.X.X.X

192.168.X.X

172.16.X.X-172.31.X.X

bridge模式

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

如下图所示,当Docker1需要访问外网时,请求先到达Docker0虚拟网卡,然后在到达物理网卡,请求就发送出去了。

实操

1)首先有一个服务器,我的云服务器内网IP为:10.0.4.8

2)然后创建一个docke容器,容器为zookeeper(端口2181)

3)查看docker服务器的IP

docker inspect 容器ID

执行上面的命令,就可以查看容器的详细信息,从图中可以看出容器的网络模式为bridge,容器的IP为172.17.0.5(我起了其他的容器,所以不是172.17.0.2)

host模式

host模式

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

实操

1)首先有一个服务器,我的云服务器内网IP为:10.0.4.8

2)通过添加一下参数设置网络模式为host模式

--net=host

启动一个centos容器

docker run -itd --name centos01 --net=host centos:centos7

我们使用一下命令查看docker容器的详细信息,如下图所示,并没有发现IP信息

docker inspect 容器ID

我们可以进入容器内部去查看,其中764af3b723a0为容器ID

//进入容器
docker exec -it 764af3b723a0 /bin/bash
//安装网络工具
yum install net-tools -y
//查看IP
ifconfig

通过截图发现,host网络模式下的容器的IP和宿主机IP一致

container模式

container模式

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。

Container模式示意图:

使用场景

k8s中一个Pod中共用一个网络,其实就Pod里先初始化一个Pause容器用来设置网络,其他的容器通过container模式关联到Pause容器上,这样一个Pod里的多个容器共用一个网络

参考:查看k8s中Pod里容器的数量和名称

none模式

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

参考

docker的四种网络模式是什么

查看Linux服务器公网&内网IP地址

操作系统怎么查看docker容器的ip