Docker网络的四种模式

目录

一,四种网络模式

1.HOST模式

2.Container模式

3.Bridge模式(默认模式) 

4.None模式

二,自定义网络

1.查看网络模式列表

 2.查看容器信息

 3.指定分配容器IP地址

 4.自定义网络固定IP

 三,暴露端口

四,总结


如果在统一网桥直接通过iptables通讯

如果不在同一网段,需要它通过物理网卡进行转发,两个不同网桥之间通讯需要自行配置网络,自定义一个网桥。

docker中最基本的通信方式之外还有集中最基本的通讯模式。

一,四种网络模式

1.HOST模式

        host容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的NetworkNamespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是dockerhost 上已经使用的端口就不能再用了,网络的隔离性不好。

 此处容器的ip地址和宿主机使用的IP地址是一样的但是,使用的端口号是不一样的。

2.Container模式

        创建的容器不会创建自己的网卡、设置IP等,而是和一个指定地容器共享IP、端口范围

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

3.Bridge模式(默认模式) 

 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及iptables nat表配置与宿主之间的关联

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

从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建**一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中**。可以通过brctl show命令查看

4.None模式

该模式关闭了容器的网络共功能

使用none模式 ,这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过network=none来指定,这种类型的网络没有办法连接网络,封闭的网络能很好的保证容器的安全性,可以用于存储数据,不会被攻击,简单来说可以当成一个镜像仓库。

二,自定义网络

1.查看网络模式列表

docker network ls

 2.查看容器信息

docker inspect + 容器id   #查看容器信息(包含配置、环境、网关、挂载、cmd等信息)
看容器id命令为:docker ps -a

 3.指定分配容器IP地址

docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
#以上会报错,因为用户使用的ip地址不被规则所允许,docker0定义的就是按照顺序来,所有需要创建一个

 执行分配方法如下

 4.自定义网络固定IP

首先需要创建一个

 #自定义网络固定IP地址
docker network create --subnet=172.10.0.0/16 asd
 
docker run -itd --name test2 --network asd --ip 172.10.0.85 centos:7 /bin/bash
 
docker network ls

 三,暴露端口

-p自定义端口(宿主机端口:容器内端口)
-P随机端瑞口(-F 49153起始49153到65535)
docker run -itd -p 33:80 nginx /bin/bash 
docker run -itd -P nginx /bin/ bash
在容器中要开启nginx
docker exec -it  2c998b0ead7e /bin/bash -c nginx

 

四,总结

  • Bridge contauner   桥接式网络模式(默认)
  •  Host(open) container   开放式网络模式,和宿主机共享网络
  •  Container(join) container   联合挂载式网络模式,和其他容器共享网络
  •  None(Close) container   封闭式网络模式,不为容器配置网络


版权声明:本文为m0_60353617原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。