目录
一:前言
当项目大规模使用 Docker 时,容器通信的问题也就产生了。要解决容器通信问题,必须先了解很多关于网络的知识。
二:Docker的网络模式
安装 Docker 以后,会默认创建三种网络"bridge", "host", "null", 通过 docker network ls 查看
[root@vm03 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
0f05bed2f9ee bridge bridge local
ca3153ca103e host host local
8707db62b9fc none null local
网络模式 |
简介 |
bridge |
为每一个容器分配、设置 IP 等,并将容器连接到一个 docker0 虚拟网桥,默认为该模式。 |
host |
容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。 |
none |
容器有独立的 Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,IP 等。 |
container |
新创建的容器不会创建自己的网卡和配置自己的 IP,而是和一个指定的容器共享IP、端口范围等。 |
2.1:bridge 网络模式(桥接模式)
重点:在该模式中,Docker 守护进程创建了一个虚拟以太网桥 docker0
默认情况下,守护进程会创建一对对等虚拟设备接口 veth pair ,将其中一个接口设置为容器的eth0 接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似 vethxxx 这样的名字命名,从而将宿主机上的所有容器都连接到这个内部网络上。
举例说明容器与宿主机的网络如何通信:
1:查看宿主机ip信息,发现已经默认创建docker0 内网ip 172.17.0.1
2: 运行一个容器查看内部ip信息, 会发现容器内部会创建14: eth0@if15的网卡ÿ